NeoGraph.tech

Как подключить чат-бота к 1С: REST API и HTTP

Как подключить чат-бота к 1С: HTTP-сервисы, REST API, RabbitMQ, мэппинг данных, типовые сценарии автоматизации 1С и безопасность.

Автор: · Опубликовано: 09.03.2026 (Обновлено: 17.05.2026)

Практическое руководство для разработчиков и интеграторов: как подключить AI-чат-бота или агента к 1C:Предприятие, использовать HTTP-сервисы и REST API, организовать асинхронный обмен через очереди сообщений, маппить данные и не нарушить 152-ФЗ. Внутри --- архитектурные схемы, примеры кода, типовые сценарии и чек-листы.

TL;DR:

  • Архитектура: 1C HTTP-сервисы / OData → Integration API → AI-агент → RAG-индекс → Ответы с данными из 1C.
  • Синхронный путь: HTTP-сервисы 1C для запросов в реальном времени (статус заказа, остатки).
  • Асинхронный путь: RabbitMQ / Kafka для пакетной обработки и событийной архитектуры.
  • Мэппинг: Таблицы соответствий 1C ↔ чат-бот, трансформация справочников и документов.
  • Типовые сценарии: статус заказа, проверка остатков, формирование счёта, история взаиморасчётов.
  • Безопасность: 152-ФЗ, RBAC, шлюз с маскированием, аудит-лог.

Когда интеграция с 1C нужна

Подходит для:

  • Автоматизация ответов клиентам: статус заказа, наличие товара, сроки доставки.
  • Выставление счетов и коммерческих предложений через чат.
  • Проверка взаиморасчётов и дебиторской задолженности.
  • Автоматизация внутренних процессов: согласование заявок, проверка остатков на складе.
  • Интеграция AI-агента с учётной системой для RAG на актуальных данных.

Не подходит для:

  • Компании без 1C (рассмотрите интеграцию с SberCRM, Bitrix24).
  • Сценарии, не требующие данных из учётной системы (достаточно RAG на документах).
  • Конфигурации 1C без возможности публикации HTTP-сервисов (устаревшие версии, файловые базы без веб-сервера).

Архитектура интеграции

Компоненты:

Компонент Роль Технология
1C HTTP-сервисы Публикация API для внешних систем Встроенный механизм 1C, публикация через веб-сервер (Apache / IIS)
1C OData Автоматический REST-доступ к данным Стандартный интерфейс OData, включается в настройках публикации
RabbitMQ Асинхронный обмен сообщениями AMQP-брокер, компонента 1C для отправки/получения
Integration API Прокси между 1C и AI-агентом Python (FastAPI) / Node.js / Go
AI-Agent Обработка запросов, RAG-пайплайн LangChain / LlamaIndex + LLM
n8n Оркестрация, таймеры, уведомления Docker, PostgreSQL-бэкенд

Способ 1: HTTP-сервисы 1C (синхронный)

HTTP-сервисы --- встроенный механизм 1C:Предприятия 8.3 для публикации REST-подобных API. Это основной способ синхронной интеграции.

Настройка в 1C

Шаг 1. Создание HTTP-сервиса.

В конфигураторе: Общие → HTTP-сервисы → Добавить. Указать:

  • Корневой URL: /api/v1
  • Шаблоны URL: /orders/{id}, /inventory/{sku}, /invoices
  • Методы: GET, POST, PUT

Шаг 2. Обработчик запроса (пример --- статус заказа).

Функция ПолучитьСтатусЗаказа(Запрос)
 НомерЗаказа = Запрос.ПараметрыURL["id"];

 Заказ = Документы.ЗаказКлиента.НайтиПоНомеру(НомерЗаказа);

 Если Заказ.Пустая() Тогда
 Ответ = Новый HTTPСервисОтвет(404);
 Ответ.УстановитьТелоИзСтроки(
 "{""error"": ""Заказ не найден""}",
 КодировкаТекста.UTF8
 );
 Возврат Ответ;
 КонецЕсли;

 Данные = Новый Структура;
 Данные.Вставить("number", НомерЗаказа);
 Данные.Вставить("date", Формат(Заказ.Дата, "ДФ=yyyy-MM-dd"));
 Данные.Вставить("status", Строка(Заказ.Статус));
 Данные.Вставить("amount", Заказ.СуммаДокумента);
 Данные.Вставить("contractor", Строка(Заказ.Контрагент));

 JSON = Новый ЗаписьJSON;
 JSON.УстановитьСтроку();
 ЗаписатьJSON(JSON, Данные);
 РезультатJSON = JSON.Закрыть();

 Ответ = Новый HTTPСервисОтвет(200);
 Ответ.Заголовки["Content-Type"] = "application/json; charset=utf-8";
 Ответ.УстановитьТелоИзСтроки(РезультатJSON, КодировкаТекста.UTF8);

 Возврат Ответ;
КонецФункции

Шаг 3. Публикация на веб-сервере.

В конфигураторе: Администрирование → Публикация на веб-сервере. Указать:

  • Веб-сервер: Apache 2.4 / IIS.
  • Каталог публикации: /var/www/1c-api (Linux) или C:\inetpub\wwwroot\1c-api (Windows).
  • Отметить HTTP-сервисы для публикации.

После публикации API доступен по адресу: http://server:port/1c-api/hs/api/v1/orders/12345.

Вызов из Integration API

import httpx
from fastapi import FastAPI

app = FastAPI()
ONE_C_BASE = "http://1c-server:8080/erp/hs/api/v1"
ONE_C_AUTH = ("api_user", "secure_password")

@app.get("/order-status/{order_id}")
async def get_order_status(order_id: str):
 async with httpx.AsyncClient() as client:
 resp = await client.get(
 f"{ONE_C_BASE}/orders/{order_id}",
 auth=ONE_C_AUTH,
 timeout=10.0
 )
 resp.raise_for_status()
 return resp.json()

Ограничения HTTP-сервисов

  • Блокировки. Длинные запросы могут блокировать сеансы 1C. Устанавливайте таймаут 5--10 секунд.
  • Rate limiting. 1C не имеет встроенного rate limiting --- реализуйте на стороне API Gateway.
  • Пул соединений. Веб-сервер создаёт пул сеансов 1C; при высокой нагрузке возможна нехватка лицензий.
  • Кэширование. Для частых однотипных запросов (остатки, прайсы) используйте Redis-кэш с TTL 1--5 минут.

Способ 2: OData / автоматический REST

1C:Предприятие поддерживает стандартный протокол OData для автоматического доступа к данным. Не требует написания кода в 1C --- достаточно настроить публикацию.

Настройка

В конфигураторе при публикации на веб-сервере: отметить «Публиковать стандартный интерфейс OData». Затем через API задать состав публикуемых объектов:

POST /erp/odata/standard.odata/$metadata

Или через обработку в 1C:

// Разрешить доступ к справочнику Номенклатура
УстановитьСоставСтандартногоИнтерфейсаOData(
 "Catalog_Номенклатура", Истина
);

Примеры запросов

Получить остатки по SKU:

GET /erp/odata/standard.odata/AccumulationRegister_ОстаткиТоваровНаСкладах
 ?$filter=Номенклатура_Key eq guid'...'
 &$select=Склад,КоличествоОстаток
 &$format=json

Получить заказы за период:

GET /erp/odata/standard.odata/Document_ЗаказКлиента
 ?$filter=Date ge datetime'2026-03-01T00:00:00'
 &$orderby=Date desc
 &$top=50
 &$format=json

Когда использовать OData

Критерий HTTP-сервисы OData
Гибкость запросов Полная (любая логика) Ограничена CRUD + фильтры
Скорость разработки Медленнее (код в 1C) Быстрее (конфигурация)
Производительность Лучше (оптимизированные запросы) Хуже (генерация SQL из OData)
Сложная бизнес-логика Да Нет
Массовые выборки Контролируемые Риск тяжёлых запросов

Рекомендация: используйте OData для быстрого прототипа и простых справочных запросов. Для промышленной интеграции --- HTTP-сервисы с оптимизированной логикой.


Способ 3: Очереди сообщений (RabbitMQ)

Для асинхронных сценариев --- событийная архитектура через брокер сообщений. 1C публикует события (новый заказ, изменение статуса, поступление товара), чат-бот подписывается и реагирует.

Архитектура

Отправка из 1C

Для работы с RabbitMQ из 1C используют внешнюю компоненту (Native API) или HTTP API RabbitMQ Management.

Через HTTP API RabbitMQ (без внешней компоненты):

Процедура ОтправитьСобытиеВОчередь(ТипСобытия, Данные)
 // Формируем сообщение
 Сообщение = Новый Структура;
 Сообщение.Вставить("event_type", ТипСобытия);
 Сообщение.Вставить("timestamp", XMLСтрока(ТекущаяДатаСеанса()));
 Сообщение.Вставить("data", Данные);
 Сообщение.Вставить("source", "1C:ERP");

 JSON = Новый ЗаписьJSON;
 JSON.УстановитьСтроку();
 ЗаписатьJSON(JSON, Сообщение);
 ТелоСообщения = JSON.Закрыть();

 // Отправляем через HTTP API RabbitMQ
 Соединение = Новый HTTPСоединение(
 "rabbitmq-server", 15672,
 "1c_publisher", "secure_password"
 );

 Тело = Новый Структура;
 Тело.Вставить("properties", Новый Структура("delivery_mode", 2));
 Тело.Вставить("routing_key", ТипСобытия);
 Тело.Вставить("payload", ТелоСообщения);
 Тело.Вставить("payload_encoding", "string");

 JSONТело = Новый ЗаписьJSON;
 JSONТело.УстановитьСтроку();
 ЗаписатьJSON(JSONТело, Тело);

 Запрос = Новый HTTPЗапрос("/api/exchanges/%2F/1c_events/publish");
 Запрос.УстановитьТелоИзСтроки(JSONТело.Закрыть());
 Запрос.Заголовки["Content-Type"] = "application/json";

 Соединение.ВызватьHTTPМетод("POST", Запрос);
КонецПроцедуры

Получение в Integration API

import aio_pika
import json

async def on_order_created(message: aio_pika.IncomingMessage):
 async with message.process():
 data = json.loads(message.body.decode())
 order = data["data"]

 # Уведомить клиента через чат-бот
 await notify_customer(
 customer_id=order["contractor_id"],
 text=f"Ваш заказ #{order['number']} принят. "
 f"Сумма: {order['amount']} руб. "
 f"Ожидаемая доставка: {order['delivery_date']}"
 )

 # Обновить RAG-индекс
 await update_rag_index(order)

async def start_consumer():
 connection = await aio_pika.connect_robust("amqp://consumer:password@rabbitmq/")
 channel = await connection.channel()
 queue = await channel.declare_queue("orders.new", durable=True)
 await queue.consume(on_order_created)

Преимущества очередей

  • Отказоустойчивость. Если AI-агент недоступен, сообщения накапливаются в очереди и обрабатываются после восстановления.
  • Масштабируемость. Несколько consumer-ов обрабатывают очередь параллельно.
  • Развязка. 1C не зависит от доступности чат-бота; чат-бот не зависит от скорости 1C.
  • Гарантия доставки. RabbitMQ с delivery_mode=2 и подтверждениями (ack) гарантирует обработку каждого сообщения.

Мэппинг данных 1C ↔ чат-бот

Данные 1C имеют свою специфику: внутренние идентификаторы (GUID), ссылочные типы, составные ключи. Для интеграции нужна таблица соответствий.

Таблица мэппинга (основные сущности)

Объект 1C Поле 1C Поле чат-бота Трансформация
Документ.ЗаказКлиента Номер order_number Обрезать ведущие нули
Документ.ЗаказКлиента Дата order_date ISO 8601
Документ.ЗаказКлиента Статус order_status Enum → человекочитаемый текст
Документ.ЗаказКлиента СуммаДокумента order_amount Число → строка с разделителями
Справочник.Контрагенты Наименование customer_name Без изменений
Справочник.Контрагенты ИНН customer_inn Маскирование для PII
Справочник.Номенклатура Наименование product_name Без изменений
Справочник.Номенклатура Артикул sku Без изменений
РегистрНакопления.ОстаткиТоваров КоличествоОстаток stock_qty Число
Справочник.Склады Наименование warehouse_name Без изменений

Трансформация статусов

STATUS_MAP = {
 "Согласован": "Заказ подтверждён",
 "КОтгрузке": "Готовится к отгрузке",
 "Отгружен": "Отгружен, в пути",
 "Доставлен": "Доставлен",
 "Закрыт": "Завершён",
 "Отменен": "Отменён",
 "НаСогласовании": "На согласовании",
}

def transform_status(status_1c: str) -> str:
 return STATUS_MAP.get(status_1c, f"Статус: {status_1c}")

Обработка справочников

1C хранит данные в виде ссылок (Ref). При передаче в чат-бот нужно «разыменовать» ссылку --- передать наименование или код вместо GUID.

// В обработчике HTTP-сервиса: разыменование справочников
Данные.Вставить("warehouse", Строка(Движение.Склад));
Данные.Вставить("product", Строка(Движение.Номенклатура));
// Вместо GUID передаём человекочитаемые значения

Автоматизация 1C: типовые сценарии интеграции

Сценарий 1: Статус заказа

Триггер: клиент в чате спрашивает «Где мой заказ?».

Поток:

  1. AI-агент извлекает номер заказа из сообщения (NER или регулярное выражение).
  2. Запрос к 1C HTTP-сервису: GET /orders/{number}.
  3. Получение статуса, даты отгрузки, трек-номера.
  4. Формирование ответа: «Ваш заказ #12345 отгружен 07.03.2026. Трек-номер: EMS1234567890. Ожидаемая доставка: 12.03.2026.»

Время ответа: 2--5 секунд (синхронный запрос).

Сценарий 2: Проверка остатков

Триггер: менеджер или клиент спрашивает «Есть ли в наличии X?».

Поток:

  1. AI-агент определяет товар (поиск по RAG-индексу номенклатуры или fuzzy-поиск).
  2. Запрос к 1C: GET /inventory/{sku}?warehouses=all.
  3. Получение остатков по складам.
  4. Ответ: «Товар "Кабель ВВГнг 3x2.5" в наличии: склад Москва --- 450 м, склад СПб --- 120 м. Цена: 85 руб./м.»

Кэширование: остатки кэшируются на 2--5 минут (Redis); для точного остатка --- запрос в реальном времени.

Сценарий 3: Формирование счёта

Триггер: менеджер в чате даёт команду «Выставить счёт клиенту X на товары Y».

Поток:

  1. AI-агент разбирает запрос: контрагент, номенклатура, количество.
  2. Проверка остатков через 1C.
  3. Запрос актуальных цен (прайс-лист из 1C или RAG-индекса).
  4. Формирование черновика счёта: POST /invoices с телом JSON.
  5. 1C создаёт документ «Счёт на оплату» в статусе «Черновик».
  6. Ответ менеджеру: «Счёт #СЧ-000456 создан на сумму 127 500 руб. Проверьте и утвердите в 1C.»

Важно: счёт создаётся в статусе «Черновик» --- менеджер проверяет и утверждает вручную. Автоматическое проведение документов --- только после валидации.

Сценарий 4: История взаиморасчётов

Триггер: бухгалтер или менеджер спрашивает «Какая задолженность у клиента X?».

Поток:

  1. AI-агент определяет контрагента.
  2. Запрос к 1C: GET /settlements/{contractor_id}.
  3. Получение сальдо взаиморасчётов, списка неоплаченных документов.
  4. Ответ: «Задолженность ООО "Ромашка": 345 000 руб. Неоплаченные счета: #СЧ-000312 (120 000 руб., просрочка 14 дней), #СЧ-000389 (225 000 руб., срок оплаты 15.03.2026).»

Безопасность: доступ к финансовым данным --- только для ролей «Менеджер», «Бухгалтер» (RBAC).

Сценарий 5: Уведомления об изменениях (асинхронный)

Триггер: 1C публикует событие в RabbitMQ при изменении статуса заказа.

Поток:

  1. Регламентное задание 1C отслеживает изменения статусов.
  2. При изменении --- публикация в очередь orders.status.
  3. Consumer получает сообщение, определяет клиента.
  4. Отправка push-уведомления в мессенджер / email: «Статус заказа #12345 изменён: "Отгружен". Трек: EMS1234567890.»

Сценарий 6: Актуализация RAG-индекса

Триггер: обновление прайс-листа, регламента, каталога в 1C.

Поток:

  1. 1C публикует событие catalog.updated в RabbitMQ.
  2. Consumer запускает переиндексацию: скачивает обновлённые данные, генерирует эмбеддинги, обновляет Qdrant.
  3. AI-агент начинает отвечать на основе актуальных данных.

Частота: прайсы --- ежедневно, каталог --- при изменениях, регламенты --- при публикации новых версий.


Безопасность интеграции

Аутентификация и авторизация

1C → Integration API:

  • Отдельная учётная запись 1C для API-доступа с минимальными правами (только чтение нужных объектов).
  • Basic Auth или API-ключ в заголовке; TLS обязателен.
  • Ограничение по IP: API Gateway принимает запросы только от серверов 1C.

Integration API → 1C:

  • Сервисный пользователь с ролью «API Read-Only» (для запросов) или «API Writer» (для создания документов).
  • Ротация паролей каждые 90 дней.
  • Логирование всех обращений с IP, timestamp, запрошенными объектами.

Чат-бот → Integration API:

  • JWT-токены с коротким TTL (15--30 мин), refresh-токены.
  • RBAC: роли определяют доступные сценарии (менеджер видит заказы своих клиентов, бухгалтер --- взаиморасчёты).

Маскирование PII

При передаче данных из 1C в чат-бот маскируйте персональные данные:

Поле Исходное Маскированное
ИНН 7707083893 77****3893
Телефон +79161234567 +7916***4567
Email ivan@company.ru iv**@company.ru
ФИО Иванов Иван Иванович И*** И.И.

Реализация: словарь «красных полей» в Integration API; маскирование до передачи в LLM.

Соответствие 152-ФЗ

  • Локализация. Все данные 1C и RAG-индекс --- на серверах в РФ.
  • Обезличивание. ПДн маскируются перед передачей во внешние сервисы.
  • Аудит-лог. Каждый запрос к данным 1C логируется: кто, когда, какие данные, для какого сценария.
  • DPIA. Перед запуском провести оценку рисков обработки ПДн через чат-бот.

Производительность и мониторинг

Оптимизация запросов к 1C

  • Кэширование. Redis с TTL по типу данных: остатки --- 2 мин, прайсы --- 30 мин, справочники --- 1 час.
  • Пакетные запросы. Вместо 10 отдельных запросов остатков --- один запрос с массивом SKU.
  • Индексы в 1C. Убедитесь, что поля, используемые в фильтрах HTTP-сервисов, индексированы.
  • Лимит сеансов. Контролируйте количество одновременных API-сеансов 1C (стоимость лицензий).

Мониторинг

Метрика Целевое значение Инструмент
Латентность запроса к 1C < 500 мс (p95) Prometheus + Grafana
Размер очереди RabbitMQ < 1000 сообщений RabbitMQ Management
Ошибки 1C HTTP-сервисов < 0.1% Логи + алерты
Утилизация сеансов 1C < 80% Консоль администрирования
Время обработки сообщения < 2 сек (p95) Prometheus

Обработка ошибок

import httpx
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(
 stop=stop_after_attempt(3),
 wait=wait_exponential(min=1, max=10)
)
async def query_1c(endpoint: str, params: dict = None):
 """Запрос к 1C с retry и таймаутом."""
 async with httpx.AsyncClient() as client:
 try:
 resp = await client.get(
 f"{ONE_C_BASE}/{endpoint}",
 params=params,
 auth=ONE_C_AUTH,
 timeout=10.0
 )
 resp.raise_for_status()
 return resp.json()
 except httpx.TimeoutException:
 logger.warning(f"Timeout: 1C {endpoint}")
 raise
 except httpx.HTTPStatusError as e:
 if e.response.status_code == 503:
 logger.warning("1C unavailable, retrying...")
 raise
 logger.error(f"1C error {e.response.status_code}: {endpoint}")
 raise

Чек-лист интеграции

Подготовка (неделя 1)

  • Определить сценарии: какие данные из 1C нужны чат-боту.
  • Проверить версию 1C (8.3.10+ для HTTP-сервисов, 8.3.14+ для OData).
  • Проверить наличие веб-сервера (Apache / IIS) для публикации.
  • Создать сервисного пользователя 1C с минимальными правами.
  • Составить таблицу мэппинга данных.

Разработка (недели 2--3)

  • Разработать HTTP-сервисы в 1C для выбранных сценариев.
  • Опубликовать на веб-сервере, проверить доступность.
  • Развернуть Integration API (FastAPI / Node.js).
  • Настроить RabbitMQ (если нужна асинхронная интеграция).
  • Реализовать маскирование PII в Integration API.
  • Настроить аудит-лог.

Тестирование (неделя 4)

  • Функциональное тестирование каждого сценария.
  • Нагрузочное тестирование: 50--100 параллельных запросов.
  • Проверка failover: что происходит при недоступности 1C.
  • Проверка корректности маскирования PII.
  • Тестирование кэширования: актуальность данных.

Запуск (неделя 5)

  • Подключить 5--10 пользователей для пилота.
  • Собрать обратную связь, настроить промпты.
  • Включить мониторинг и алерты.
  • Провести экспресс-DPIA.

Итоги

Интеграция чат-ботов с 1C --- задача решаемая, но требующая понимания специфики платформы: HTTP-сервисы для синхронных запросов, OData для быстрого прототипирования, RabbitMQ для событийной архитектуры. Ключевые факторы успеха: правильный мэппинг данных, кэширование частых запросов, маскирование PII и контроль сеансов 1C.


Хотите подключить AI-чат-бота к вашей 1C? Мы спроектируем архитектуру интеграции и запустим пилот за 4--6 недель. Оставьте заявку или свяжитесь с нами.

Связанные материалы

Интеграции:

Технические детали:

Кейсы:

Нужна диагностика процессов или AI-автоматизация?
Бесплатная консультация за 15 минут