Как организовать обмен сообщениями и чат в 1С 8.3

· 10 мин

Содержание

Самый быстрый путь получить чат внутри 1С 8.3 — включить штатную «Систему взаимодействия» (раздел Администрирование → Обсуждения): переписка, вложения и уведомления заработают без единой строки кода. Писать свой чат стоит только тогда, когда нужно связать 1С с внешним каналом — Telegram, корпоративным мессенджером или сайтом.

Способы различаются по трудоёмкости и по тому, где происходит разговор. Внутри одной базы хватит встроенного механизма или простого регистра сообщений. Для диалога с клиентом или сотрудником в привычном ему мессенджере нужны HTTP-запросы к чужому API. А если чат должен жить на вашем сайте — публикуется HTTP-сервис 1С, к которому обращается веб-страница. Ниже — все пять вариантов с кодом и границами применимости.

Где должен происходить разговор?

Встроенная «Система взаимодействия»: чат без программирования

Начиная с платформы 8.3.10 в 1С есть готовый механизм обсуждений. Это полноценный чат: личная и групповая переписка, вложения файлов, упоминания через @, видеозвонки и привязка разговора к конкретному документу или элементу справочника.

Как включить в типовой конфигурации (БП 3.0, ЗУП 3.1, УТ 11, ERP):

  1. Откройте Администрирование → Обсуждения.
  2. Нажмите включение обсуждений и пройдите регистрацию: по умолчанию база подключается к серверу взаимодействия, который предоставляет фирма «1С». Понадобится действующий адрес электронной почты для подтверждения.
  3. После регистрации у пользователей появляется панель обсуждений. Там можно создавать чаты, писать коллегам и прикреплять файлы .

Привязка к объекту — главное преимущество перед внешним мессенджером. Прямо в форме документа видно обсуждение именно этой поставки или заявки, и переписка не теряется среди десятков других диалогов.

Для автоматических уведомлений механизм доступен из встроенного языка через объект СистемаВзаимодействия. С его помощью можно программно создать разговор и отправить в него сообщение — например, оповестить ответственного, когда заказ сменил статус. Точные сигнатуры методов смотрите в синтакс-помощнике по ветке «Система взаимодействия»: объектная модель там обширная, и наугад вызывать методы не стоит.

Ограничение одно, но важное: обсуждения работают только между пользователями этой же базы 1С. Клиенту, у которого нет доступа в вашу информационную базу, через этот механизм не написать — для внешнего собеседника нужен один из следующих способов.

Чат на документах и регистрах внутри конфигурации

Если встроенные обсуждения по какой-то причине не подходят (нет интернет-поддержки, закрытый контур, своя логика статусов сообщений), простейший «чат» собирается на объектах самой конфигурации.

Базовая схема — регистр сведений Сообщения с измерениями и реквизитами:

  • Автор — ссылка на пользователя или физлицо;
  • Получатель — кому адресовано;
  • Период — дата и время отправки (ведущее измерение);
  • Текст — строка неограниченной длины;
  • Прочитано — булево, отметка о прочтении.

Форма списка этого регистра, отфильтрованная по текущему пользователю, и есть окно чата. Отправка сообщения — запись новой строки в регистр. Чтобы собеседник увидел новое сообщение без перезахода, настройте автоматическое обновление формы по таймеру (ПодключитьОбработчикОжидания) с интервалом 15–30 секунд.

Это решение «для своих»: оно нагружает базу лишними записями и не даёт мгновенной доставки. Для десятка сотрудников внутри одной конфигурации — приемлемо, для активной переписки или внешних собеседников — берите штатную систему взаимодействия или внешний канал.

Плюс подхода — полный контроль: сообщения хранятся в вашей базе, попадают в резервные копии, участвуют в отчётах. Минус — всё приходится программировать самому, включая групповые чаты и вложения.

Telegram-бот: переписка 1С с внешним собеседником

Telegram — самый частый выбор, когда надо писать не коллеге в базе, а клиенту или сотруднику в его телефон. 1С обменивается сообщениями с ботом через обычные HTTP-запросы к api.telegram.org, внешних компонент не нужно.

Порядок подготовки:

Подключение Telegram-бота к 1С
Выполнено: 0 / 5

Отправка сообщения из 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С

Диагностика: выберите симптом

Отдельно о нагрузке: не стройте мгновенный чат на частом опросе базы из множества клиентов. Десятки форм, обновляющихся раз в секунду через запрос к регистру, создают заметную нагрузку на сервер. Для активной переписки используйте штатную систему взаимодействия или вынесите realtime на отдельный WebSocket-сервис.

Частые вопросы

Нужна ли внешняя компонента, чтобы отправлять сообщения в Telegram?
Нет. Telegram Bot API — это обычный HTTPS, и 1С работает с ним штатными объектами HTTPСоединение и HTTPЗапрос. Внешние компоненты нужны только для протоколов, которых в платформе нет, например AMQP для RabbitMQ.
Можно ли сделать чат в базовой версии 1С?
Отправку сообщений по HTTP — да, встроенный язык доступен. А вот система взаимодействия и публикация HTTP-сервиса на веб-сервере требуют ПРОФ-версии платформы и клиент-серверного или опубликованного режима работы.
Работает ли система взаимодействия без доступа в интернет?
По умолчанию обсуждения подключаются к серверу, который предоставляет фирма «1С», и ему нужен интернет. В закрытом контуре разворачивают собственный сервер взаимодействия, но это отдельная серверная задача.
Чем HTTP-сервис лучше автоматического REST-интерфейса (OData)?
OData отдаёт данные в фиксированном формате и по структуре метаданных. HTTP-сервис позволяет задать произвольный ответ, свою авторизацию и бизнес-логику — для чата это важнее, чем прямой доступ к таблицам.
Как хранить токен бота, чтобы он не попал в выгрузку конфигурации?
Держите токен в константе или в безопасном хранилище данных с ограничением прав на чтение. В модулях и в выгружаемых файлах конфигурации токена быть не должно.