WebSocket в 1С 8.3.27: интеграции в реальном времени

Платформа 1С 8.3.27 принесла то, чего разработчики ждали годами: встроенный WebSocket-клиент. Больше не нужны внешние компоненты, Node.js-прокси и другие костыли для интеграций в реальном времени. Разбираемся, что это даёт на практике и в каких задачах WebSocket меняет правила игры.

Что не так с HTTP-опросом

До версии 8.3.27 единственный способ получить данные из внешней системы в реальном времени — периодический HTTP-запрос. Регламентное задание каждые 5 секунд дёргает API: «Есть новые данные? Нет? Ладно, спрошу через 5 секунд». Это работает, но с тремя проблемами.

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

Вторая — нагрузка. 90% запросов возвращают «нет данных». Сервер 1С тратит ресурсы на бесполезные HTTP-сессии, внешний сервис отдаёт пустые ответы. При 20 интеграциях и 5-секундном интервале — 240 запросов в минуту вхолостую.

Третья — сложность масштабирования. Хочешь сократить задержку до 1 секунды — нагрузка растёт в 5 раз. Хочешь добавить ещё одну интеграцию — ещё одно регламентное задание, ещё один поток запросов.

Сравнение HTTP-опроса и WebSocket: задержки, нагрузка, сложность

WebSocket: постоянное соединение вместо опроса

WebSocket — протокол двусторонней связи поверх TCP. Соединение устанавливается один раз и остаётся открытым. Сервер может отправить данные клиенту в любой момент — без запроса. Клиент получает их мгновенно.

В 1С 8.3.27 появился объект КлиентWebSocket. Создаёшь экземпляр, указываешь URL, назначаешь обработчики событий — и слушаешь. Когда приходит сообщение, срабатывает обработчик. Никаких циклов опроса, никаких регламентных заданий.

Ключевые возможности нового объекта:

  • Подключение к серверам по протоколам ws:// и wss:// (с TLS)
  • Текстовые и бинарные сообщения
  • Обработчики событий: ПриОткрытии, ПриЗакрытии, ПриОшибке, ПриПолученииСообщения
  • Работа в фоновом задании (не блокирует UI)
  • Автоматический ping/pong для поддержания соединения

Важное ограничение: это именно клиент. 1С не может быть WebSocket-сервером — только подключаться к внешним серверам. Для большинства интеграционных сценариев этого достаточно: внешняя система — сервер, 1С — подписчик.

Сценарии: где WebSocket меняет правила

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

Сценарии использования WebSocket в 1С: телефония, IoT, мессенджеры

IP-телефония

Классика. Входящий звонок — АТС (Asterisk, FreePBX, облачные АТС) отправляет событие по WebSocket. 1С получает номер, за 100 миллисекунд находит контрагента, открывает менеджеру карточку с историей заказов и задолженностью. Пока телефон звонит — менеджер уже знает, кто звонит и зачем.

Раньше для этого нужна была внешняя компонента (SoftPhone) или промежуточный сервер. Теперь — нативный WebSocket-клиент в 1С, подключённый к AMI (Asterisk Manager Interface) через WebSocket-прокси.

Пример интеграции 1С с IP-телефонией через WebSocket

IoT-датчики на складе

Температурные датчики в холодильных камерах, весы на приёмке, сканеры штрих-кодов с Wi-Fi. Все они могут отправлять данные через MQTT-брокер, к которому 1С подключается по WebSocket. Температура вышла за пределы — мгновенный алерт в 1С. Товар взвешен — вес автоматически подставляется в документ приёмки.

Мессенджеры и чат-боты

Telegram Bot API поддерживает long polling, но не WebSocket напрямую. Зато многие платформы чат-ботов (Botpress, Rasa, кастомные решения) умеют отдавать события по WebSocket. Клиент написал в чат — 1С мгновенно получает сообщение, формирует ответ из данных учётной системы (остаток товара, статус заказа, сумма долга) и отправляет обратно. Без задержки на polling.

Биржевые курсы и котировки

Для компаний, работающих с валютными контрактами: подписка на поток котировок через WebSocket-API биржи. Курс изменился — 1С пересчитывает стоимость открытых контрактов в реальном времени. Менеджер видит актуальную маржу, а не вчерашнюю.

Мониторинг и алерты

Prometheus, Grafana, Zabbix — все умеют отправлять алерты. Через WebSocket можно подписаться на поток событий мониторинга и реагировать внутри 1С: создать задачу, отправить уведомление ответственному, приостановить выполнение регламентных операций при перегрузке сервера.

Архитектурные решения

WebSocket-клиент в 1С работает в контексте фонового задания. Это логично: постоянное соединение не должно блокировать пользовательский сеанс. Схема такая:

  1. Запускается фоновое задание с WebSocket-клиентом
  2. Клиент подключается к внешнему серверу
  3. При получении сообщения — обработчик парсит данные и записывает в регистр сведений (очередь событий)
  4. Клиентские сеансы периодически проверяют очередь (или используют Систему Взаимодействия для push-уведомлений)

Важный нюанс: обработчик ПриПолученииСообщения не должен выполнять тяжёлую логику. Принял сообщение — записал в очередь — отпустил. Обработка — в отдельном потоке. Иначе при высокой частоте сообщений буфер WebSocket переполнится и соединение оборвётся.

Переподключение при обрыве — на вашей совести. Платформа не делает это автоматически. В обработчике ПриЗакрытии нужно запустить повторное подключение с экспоненциальной задержкой: 1 секунда, 2, 4, 8... до максимума в 60 секунд. Без этого единичный сетевой сбой положит всю интеграцию.

Ограничения и подводные камни

WebSocket в 1С — не серебряная пуля. Несколько моментов, которые стоит учитывать:

  • Только клиент. 1С не может быть сервером. Если внешняя система умеет только подключаться (а не принимать подключения) — WebSocket не поможет, нужен HTTP-сервис
  • Фоновое задание. Если фоновые задания отключены или их пул исчерпан — WebSocket не запустится
  • Нет автореконнекта. Восстановление соединения — ваша задача
  • Версия платформы. Только 8.3.27 и выше. Если заказчик на 8.3.24 — вариант с WebSocket отпадает
  • Лицензии. Фоновое задание с WebSocket занимает клиентскую лицензию. При 10 интеграциях — 10 лицензий

Когда переходить

Если ваша интеграция работает на HTTP-опросе и задержка в 5-30 секунд устраивает бизнес — не трогайте. Работающее решение лучше модного. Но если вы начинаете новый проект интеграции и платформа позволяет — WebSocket стоит рассмотреть как основной транспорт для событийных сценариев.

Особенно актуально для:

  • Интеграций с телефонией (где каждая секунда задержки — потерянное впечатление клиента)
  • Складских операций с IoT-устройствами (где данные должны попасть в документ мгновенно)
  • Систем оповещения и мониторинга (где алерт через 30 секунд — это уже поздно)

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