Как организовать обмен сообщениями и чат в 1С 8.3
Содержание
Самый быстрый путь получить чат внутри 1С 8.3 — включить штатную «Систему взаимодействия» (раздел Администрирование → Обсуждения): переписка, вложения и уведомления заработают без единой строки кода. Писать свой чат стоит только тогда, когда нужно связать 1С с внешним каналом — Telegram, корпоративным мессенджером или сайтом.
Способы различаются по трудоёмкости и по тому, где происходит разговор. Внутри одной базы хватит встроенного механизма или простого регистра сообщений. Для диалога с клиентом или сотрудником в привычном ему мессенджере нужны HTTP-запросы к чужому API. А если чат должен жить на вашем сайте — публикуется HTTP-сервис 1С, к которому обращается веб-страница. Ниже — все пять вариантов с кодом и границами применимости.
Встроенная «Система взаимодействия»: чат без программирования
Начиная с платформы 8.3.10 в 1С есть готовый механизм обсуждений. Это полноценный чат: личная и групповая переписка, вложения файлов, упоминания через @, видеозвонки и привязка разговора к конкретному документу или элементу справочника.
Как включить в типовой конфигурации (БП 3.0, ЗУП 3.1, УТ 11, ERP):
- Откройте
Администрирование → Обсуждения. - Нажмите включение обсуждений и пройдите регистрацию: по умолчанию база подключается к серверу взаимодействия, который предоставляет фирма «1С». Понадобится действующий адрес электронной почты для подтверждения.
- После регистрации у пользователей появляется панель обсуждений. Там можно создавать чаты, писать коллегам и прикреплять файлы .
Привязка к объекту — главное преимущество перед внешним мессенджером. Прямо в форме документа видно обсуждение именно этой поставки или заявки, и переписка не теряется среди десятков других диалогов.
Для автоматических уведомлений механизм доступен из встроенного языка через объект СистемаВзаимодействия. С его помощью можно программно создать разговор и отправить в него сообщение — например, оповестить ответственного, когда заказ сменил статус. Точные сигнатуры методов смотрите в синтакс-помощнике по ветке «Система взаимодействия»: объектная модель там обширная, и наугад вызывать методы не стоит.
Ограничение одно, но важное: обсуждения работают только между пользователями этой же базы 1С. Клиенту, у которого нет доступа в вашу информационную базу, через этот механизм не написать — для внешнего собеседника нужен один из следующих способов.
Чат на документах и регистрах внутри конфигурации
Если встроенные обсуждения по какой-то причине не подходят (нет интернет-поддержки, закрытый контур, своя логика статусов сообщений), простейший «чат» собирается на объектах самой конфигурации.
Базовая схема — регистр сведений
Сообщения с измерениями и реквизитами:
Автор— ссылка на пользователя или физлицо;Получатель— кому адресовано;Период— дата и время отправки (ведущее измерение);Текст— строка неограниченной длины;Прочитано— булево, отметка о прочтении.
Форма списка этого регистра, отфильтрованная по текущему пользователю, и есть окно чата. Отправка сообщения — запись новой строки в регистр. Чтобы собеседник увидел новое сообщение без перезахода, настройте автоматическое обновление
формы по таймеру (ПодключитьОбработчикОжидания) с интервалом 15–30 секунд.
Это решение «для своих»: оно нагружает базу лишними записями и не даёт мгновенной доставки. Для десятка сотрудников внутри одной конфигурации — приемлемо, для активной переписки или внешних собеседников — берите штатную систему взаимодействия или внешний канал.
Плюс подхода — полный контроль: сообщения хранятся в вашей базе, попадают в резервные копии, участвуют в отчётах. Минус — всё приходится программировать самому, включая групповые чаты и вложения.
Telegram-бот: переписка 1С с внешним собеседником
Telegram — самый частый выбор, когда надо писать не коллеге в базе, а клиенту или сотруднику в его телефон. 1С обменивается сообщениями с ботом через обычные HTTP-запросы к api.telegram.org, внешних компонент не нужно.
Порядок подготовки:
Отправка сообщения из 1С в Telegram
Токен бота храните не в коде модуля, а в константе или защищённом хранилище. Отправка одного сообщения методом sendMessage:
Процедура ОтправитьВТелеграм(Токен, ЧатИД, ТекстСообщения) Экспорт
ПараметрыТела = Новый Структура;
ПараметрыТела.Вставить("chat_id", ЧатИД);
ПараметрыТела.Вставить("text", ТекстСообщения);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПараметрыТела);
ТелоЗапроса = ЗаписьJSON.Закрыть();
Соединение = Новый HTTPСоединение(
"api.telegram.org", 443, , , , 30,
Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/bot" + Токен + "/sendMessage");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния <> 200 Тогда
ЗаписьЖурналаРегистрации("Телеграм.Отправка",
УровеньЖурналаРегистрации.Ошибка, , ,
"Код " + Ответ.КодСостояния + ": " + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
КонецПроцедуры
Вызывать такую процедуру можно из любого места конфигурации — при проведении документа, по расписанию регламентного задания, из обработки.
Приём сообщений от пользователя
Чтобы бот принимал ответы, есть два механизма:
- Опрос (
getUpdates). Регламентное задание раз в минуту запрашивает у Telegram новые сообщения методомgetUpdatesи обрабатывает их. Проще в настройке, работает даже без публикации на веб-сервере, но доставка не мгновенная. - Webhook. Вы публикуете HTTP-сервис 1С на внешний адрес и методом
setWebhookсообщаете Telegram его URL. Теперь Telegram сам шлёт каждое сообщение вам POST-запросом. Быстрее, но требует внешнего доступа к серверу 1С по HTTPS.
Токен бота — это полный доступ к переписке. Утёкший токен позволяет посторонним писать от имени вашей компании. Храните его в константе с ограничением прав на чтение и никогда не коммитьте в выгрузки конфигурации.
Сообщения в корпоративный мессенджер через вебхуки
Если компания работает в Bitrix24 или Microsoft Teams, из 1С удобно слать туда уведомления: новый заказ, просроченная задача, отклонённая заявка. Со стороны 1С это тот же HTTP-запрос, что и к Telegram, меняется только адрес и формат тела.
Bitrix24. В портале создаётся входящий вебхук с правом im (мессенджер). 1С отправляет POST-запрос на выданный URL, передавая идентификатор диалога или пользователя и текст. Так же через REST Bitrix24 можно создавать задачи и сделки прямо из документов 1С.
Microsoft Teams. В нужном канале добавляется коннектор Incoming Webhook, он даёт URL. 1С шлёт на него JSON с полем сообщения — в канале появляется карточка. Это односторонний канал: Teams-коннектор принимает сообщения, но не передаёт ответы обратно в 1С.
Общая логика отправки:
Соединение = Новый HTTPСоединение(
АдресСервера, 443, , , , 30,
Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(ОтносительныйПуть);
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки(ТелоJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Различается только, что подставить в АдресСервера, ОтносительныйПуть и ТелоJSON — эти значения берутся из документации конкретного мессенджера. Перед отправкой в продуктив проверяйте запросы на тестовом канале: массовая рассылка из-за ошибки в цикле проведения документов засыплет коллег уведомлениями.
Своё веб-приложение чата на HTTP-сервисе 1С
Когда чат должен жить на вашем сайте или в мобильном приложении, 1С выступает сервером данных. Схема такая: в конфигурации создаётся объект метаданных HTTP-сервис с методами «получить сообщения» и «отправить сообщение
», затем информационная база публикуется на веб-сервере (Apache или IIS) через 1С:Предприятие → Администрирование → Публикация на веб-сервере в конфигураторе.
Что делает каждая сторона:
- HTTP-сервис 1С принимает запросы фронтенда, читает и пишет сообщения в регистр или справочник, отдаёт их в формате JSON.
- Веб-страница или приложение раз в несколько секунд опрашивает сервис (long polling) либо держит открытым WebSocket на стороне веб-сервера, а 1С обновляет данные при появлении нового сообщения.
HTTP-сервис — предпочтительный инструмент: в отличие от автоматического OData-интерфейса он позволяет задать произвольный формат ответа и свою логику авторизации. Авторизацию пользователей закрывайте токеном в заголовке запроса, а не передачей логина и пароля при каждом обращении.
Для realtime-доставки без постоянного опроса базы вынесите «push» на отдельный сервис: 1С пишет событие, а лёгкий сервис на стороне веб-сервера рассылает его клиентам по WebSocket. 1С сама долго удерживать тысячи открытых соединений не предназначена.
Этот способ самый трудоёмкий, зато даёт полностью кастомный интерфейс чата и независимость от чужих мессенджеров.
Обмен сообщениями через REST, JSON и очереди
Когда чат — часть большой интеграции (несколько систем, высокая нагрузка, гарантия доставки), прямые HTTP-запросы заменяют на обмен через брокер сообщений.
- REST + JSON. Универсальный транспорт: одна система выставляет HTTP-сервис, другая шлёт на него JSON. В 1С сериализация делается объектами
ЗаписьJSON/ЧтениеJSON, разбор ответа — процедуройПрочитатьJSON. Подходит для обмена «запрос-ответ» между 1С и внешней системой. - Очередь (RabbitMQ, Kafka). Когда сообщения нельзя терять при недоступности получателя, их кладут в брокер. 1С работает с RabbitMQ либо через HTTP-API брокера (плагин management), либо через внешнюю компоненту с поддержкой протокола AMQP. Отправитель публикует сообщение в очередь, получатель забирает его, когда готов, — доставка переживает перезапуск любой из систем.
Выбор между прямым REST и очередью сводится к одному вопросу: допустимо ли потерять сообщение, если получатель в этот момент недоступен. Для оповещений — обычно да, достаточно REST. Для обмена документами и денежными операциями — нет, нужна очередь.
Сравнение способов: что выбрать под задачу
| Способ | Собеседник | Код | Когда брать |
|---|---|---|---|
| Система взаимодействия | Сотрудники в базе | Нет | Внутренний чат, обсуждение документов |
| Регистр сообщений | Сотрудники в базе | Средне | Закрытый контур без интернета |
| Telegram-бот | Клиент, сотрудник в телефоне | Средне | Уведомления и диалог с внешними людьми |
| Вебхук Bitrix24 / Teams | Корпоративный мессенджер | Мало | Оповещения в уже используемый мессенджер |
| HTTP-сервис + сайт | Посетитель сайта | Много | Свой интерфейс чата, мобильное приложение |
| REST / очередь | Другая система | Много | Интеграции с гарантией доставки |
Для большинства задач внутри компании хватает штатной системы взаимодействия. К внешнему каналу переходят только тогда, когда собеседник находится за пределами базы 1С.
Типичные ошибки при создании чата в 1С
HTTPСоединение, если он используется.chat_id либо пользователь ни разу не писал боту. Получатель должен сам первым запустить бота — Telegram запрещает ботам писать тем, кто их не добавил.УстановитьТелоИзСтроки явно указывайте КодировкаТекста.UTF8.getUpdates.Администрирование → Интернет-поддержка и сервисы и доступ в интернет с сервера 1С.Отдельно о нагрузке: не стройте мгновенный чат на частом опросе базы из множества клиентов. Десятки форм, обновляющихся раз в секунду через запрос к регистру, создают заметную нагрузку на сервер. Для активной переписки используйте штатную систему взаимодействия или вынесите realtime на отдельный WebSocket-сервис.
Частые вопросы
Нужна ли внешняя компонента, чтобы отправлять сообщения в Telegram?
HTTPСоединение и HTTPЗапрос. Внешние компоненты нужны только для протоколов, которых в платформе нет, например AMQP для RabbitMQ.