Как подключить чат-бота к 1С: REST API и HTTP
Как подключить чат-бота к 1С: HTTP-сервисы, REST API, RabbitMQ, мэппинг данных, типовые сценарии автоматизации 1С и безопасность.
Автор: Александр Ожерельев, основатель NeoGraph · Опубликовано: 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: Статус заказа
Триггер: клиент в чате спрашивает «Где мой заказ?».
Поток:
- AI-агент извлекает номер заказа из сообщения (NER или регулярное выражение).
- Запрос к 1C HTTP-сервису:
GET /orders/{number}. - Получение статуса, даты отгрузки, трек-номера.
- Формирование ответа: «Ваш заказ #12345 отгружен 07.03.2026. Трек-номер: EMS1234567890. Ожидаемая доставка: 12.03.2026.»
Время ответа: 2--5 секунд (синхронный запрос).
Сценарий 2: Проверка остатков
Триггер: менеджер или клиент спрашивает «Есть ли в наличии X?».
Поток:
- AI-агент определяет товар (поиск по RAG-индексу номенклатуры или fuzzy-поиск).
- Запрос к 1C:
GET /inventory/{sku}?warehouses=all. - Получение остатков по складам.
- Ответ: «Товар "Кабель ВВГнг 3x2.5" в наличии: склад Москва --- 450 м, склад СПб --- 120 м. Цена: 85 руб./м.»
Кэширование: остатки кэшируются на 2--5 минут (Redis); для точного остатка --- запрос в реальном времени.
Сценарий 3: Формирование счёта
Триггер: менеджер в чате даёт команду «Выставить счёт клиенту X на товары Y».
Поток:
- AI-агент разбирает запрос: контрагент, номенклатура, количество.
- Проверка остатков через 1C.
- Запрос актуальных цен (прайс-лист из 1C или RAG-индекса).
- Формирование черновика счёта:
POST /invoicesс телом JSON. - 1C создаёт документ «Счёт на оплату» в статусе «Черновик».
- Ответ менеджеру: «Счёт #СЧ-000456 создан на сумму 127 500 руб. Проверьте и утвердите в 1C.»
Важно: счёт создаётся в статусе «Черновик» --- менеджер проверяет и утверждает вручную. Автоматическое проведение документов --- только после валидации.
Сценарий 4: История взаиморасчётов
Триггер: бухгалтер или менеджер спрашивает «Какая задолженность у клиента X?».
Поток:
- AI-агент определяет контрагента.
- Запрос к 1C:
GET /settlements/{contractor_id}. - Получение сальдо взаиморасчётов, списка неоплаченных документов.
- Ответ: «Задолженность ООО "Ромашка": 345 000 руб. Неоплаченные счета: #СЧ-000312 (120 000 руб., просрочка 14 дней), #СЧ-000389 (225 000 руб., срок оплаты 15.03.2026).»
Безопасность: доступ к финансовым данным --- только для ролей «Менеджер», «Бухгалтер» (RBAC).
Сценарий 5: Уведомления об изменениях (асинхронный)
Триггер: 1C публикует событие в RabbitMQ при изменении статуса заказа.
Поток:
- Регламентное задание 1C отслеживает изменения статусов.
- При изменении --- публикация в очередь
orders.status. - Consumer получает сообщение, определяет клиента.
- Отправка push-уведомления в мессенджер / email: «Статус заказа #12345 изменён: "Отгружен". Трек: EMS1234567890.»
Сценарий 6: Актуализация RAG-индекса
Триггер: обновление прайс-листа, регламента, каталога в 1C.
Поток:
- 1C публикует событие
catalog.updatedв RabbitMQ. - Consumer запускает переиндексацию: скачивает обновлённые данные, генерирует эмбеддинги, обновляет Qdrant.
- 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 |
| 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 недель. Оставьте заявку или свяжитесь с нами.
Связанные материалы
Интеграции:
- Интеграция чат-ботов с Bitrix24: полное руководство --- аналогичный гайд для Bitrix24
- Интеграция чат-ботов с SberCRM --- схема и типовые сценарии
Технические детали:
- Как работает RAG на реальных документах --- архитектура RAG-пайплайна
- 152-ФЗ и чат-боты --- безопасность и комплаенс
Кейсы:
- Кейс --- Дистрибуция: -41% времени ответа --- AI-агент + CRM
- Кейс --- Ритейл: AI-консультант для сети магазинов --- автоматизация клиентского сервиса