Websockets в 1С. Учимся использовать Websocket клиентов 1С на примере интеграции с телефонией Asterisk.
Websockets в 1С. Учимся использовать Websocket клиентов 1С на примере интеграции с телефонией Asterisk.
________________________________________
Постоянный диалог вместо «писем». В чем отличие от классического HTTP?
Чтобы понять революционность WebSockets, нужно сначала вспомнить, как работает «классический» интернет. Большую часть времени веб полагается на протокол HTTP (HyperText Transfer Protocol).
Представьте HTTP как обмен письмами:
- Клиент (вы): Отправляете письмо с запросом («Дай мне эту страницу»).
- Сервер: Получает письмо, читает, готовит ответ.
- Сервер: Отправляет ответное письмо («Вот страница»).
- Финал: Связь обрывается. Сервер тут же забывает о вас до следующего письма.
Эта модель называется «Запрос — Ответ» (Request-Response). Она отлично работает для загрузки документов или картинок, но ужасно неэффективна, когда вам нужны данные в реальном времени (например, котировки акций или сообщения в чате). Вам пришлось бы постоянно «стучаться» к серверу: «Есть что нового? А сейчас? А сейчас?».
Что такое WebSocket?
WebSocket — это протокол связи, который превращает этот прерывистый обмен письмами в непрерывный телефонный разговор.
Это технология, позволяющая открыть интерактивный сеанс связи между браузером пользователя и сервером. В этом сеансе сообщения могут отправляться в обе стороны в любой момент времени, без необходимости каждый раз заново устанавливать соединение.
Ключевые различия: HTTP vs WebSocket
Главное различие кроется в характере связи. HTTP — это half-duplex (полудуплекс): говорит только один, строго по очереди. WebSocket — это full-duplex (полный дуплекс): клиент и сервер могут говорить одновременно.
Вот детальное сравнение:
| Характеристика | HTTP (и REST) | WebSocket |
|---|---|---|
| Тип связи | Однонаправленная (по запросу). Сервер молчит, пока его не спросят. | Двунаправленная (Full-duplex). Сервер сам отправляет данные, когда они появляются. |
| Жизненный цикл | Короткий. Соединение открывается для запроса и закрывается после ответа. | Длительный. Соединение («труба») остается открытым, пока одна из сторон не разорвет его. |
| Накладные расходы (Overhead) | Высокие. Каждый запрос содержит тяжелые HTTP-заголовки (куки, user-agent и т.д.). | Низкие. После установки связи данные передаются в легких «фреймах» без лишних заголовков. |
| Латентность (Задержка) | Выше. Требуется время на «рукопожатие» (handshake) при каждом новом запросе. | Минимальная. Канал уже открыт, данные летят мгновенно. |
| Сценарий использования | Загрузка веб-страниц, REST API, кэшируемый контент. | Чаты, онлайн-игры, биржевые тикеры, коллаборативная работа, интеграция с телефонией |
Как это работает "под капотом"?
Самое интересное, что WebSocket начинается как обычный HTTP-запрос. Это называется Handshake (Рукопожатие).
- Клиент отправляет HTTP-запрос с особым заголовком: Upgrade: websocket.
- Если сервер поддерживает вебсокеты, он отвечает статусом 101 Switching Protocols.
- С этого момента HTTP-соединение «апгрейдится»: оно не закрывается, а превращается в постоянный TCP-канал (WebSocket), по которому гоняют бинарные данные или текст.

Практика: История звонков Asterisk в 1С
Долгое время работа с веб-сокетами в 1С требовала изобретательности. Мы писали внешние компоненты, использовали сторонние библиотеки или поднимали микросервисы-прокси. Но начиная с версии платформы 8.3.27, разработчики 1С сделали нам подарок — встроенный объект WebSocketКлиент.
Давайте рассмотрим задачу, с которой сталкивается практически любая CRM-система: сохранение истории звонков. Наша цель — сделать так, чтобы при любом входящем или исходящем вызове в Asterisk, информация об этом событии (номер абонента, внутренний номер сотрудника, время) мгновенно попадала в регистр сведений 1С.
Архитектура решения
Схема взаимодействия выглядит следующим образом:
- Asterisk (сервис ARI) выступает в роли WebSocket-сервера. Он транслирует события телефонии в эфир.
- 1С:Предприятие использует объект WebSocketКлиент. Мы инициируем соединение с сервером телефонии и "замираем" в ожидании данных.
- Как только происходит звонок, сервер отправляет JSON-пакет в открытый сокет.
- 1С перехватывает это сообщение и записывает данные в регистр сведений.
Реализация
Для своего стенда я использовал локально развернутый в wsl FreePBX версии 17.0.19.28 (на базе Asterisk). В этой статье мы не будем углубляться в установку и администрирование самой телефонии — это тема для отдельного цикла материалов. Будем исходить из того, что у вас уже есть рабочий сервер Asterisk и вы имеете к нему доступ.
Настройка Asterisk (ARI)
Для начала подготовим наш сервер телефонии. Нам необходимо активировать встроенный веб-сервер и интерфейс ARI (Asterisk REST Interface), через который мы будем получать события по WebSocket.
Подключаемся к терминалу сервера и выполняем следующие шаги:
1. Включаем встроенный HTTP-сервер
Открываем файл конфигурации http.conf:
sudo nano /etc/asterisk/http.conf
Приводим секцию [general] к следующему виду (или добавляем её, если она отсутствует):
[general]
enabled = yes
bindaddr = 0.0.0.0
bindport = 8088
2. Настраиваем права доступа ARI
Теперь настроим сам интерфейс и создадим пользователя для 1С. Открываем файл ari.conf:
sudo nano /etc/asterisk/ari.conf
Добавляем (или редактируем) следующие секции:
[general]
enabled = yes
pretty = yes
allowed_origins = *
websocket_write_timeout = 1000
[1cuser]
type = user
read_only = no
password = MyStrongARIpassword123
Пояснение:
- ● [1cuser] — это имя пользователя, под которым 1С будет подключаться к Asterisk.
- ● password — пароль этого пользователя. Важно: в продакшене используйте сложный пароль.
3. Перезагрузка службы
Чтобы изменения вступили в силу, перезагружаем Asterisk:
sudo systemctl restart asterisk
Серверная часть готова! Теперь Asterisk ожидает подключений по порту 8088.
________________________________________
Настройка на стороне 1С
Переходим к конфигурации. Для работы с протоколом WebSocket разработчики платформы (начиная с версии 8.3.27) добавили в дерево метаданных новый объект.
- Откройте ветку Общие.
- Найдите пункт WebSocket-клиенты.
- Добавьте новый объект (например, AsteriskARI) и установите свойства, как показано на скриншоте ниже.
Ключевой момент — это заполнение свойства URL сервера. Для Asterisk REST Interface (ARI) строка подключения формируется особым образом.
В моем случае (для локального стенда) URL выглядит так:
ws://172.25.22.61:8088/ari/events?app=1c-app&api_key=1cuser:MyStrongARIpassword123&subscribeAll=true
Давайте разберем, из чего состоит этот адрес, чтобы вы могли правильно собрать свой:
- ● ws://172.25.22.61:8088 — протокол, IP-адрес вашего сервера Asterisk и порт (по умолчанию 8088).
- ● /ari/events — стандартный путь к событиям ARI.
- ● app=1c-app — обязательный параметр. Это имя вашего приложения. Asterisk требует, чтобы каждый слушатель идентифицировал себя.
- ● api_key=1cuser:MyStrongARIpassword123 — авторизация. Замените 1cuser и пароль на те, что вы указали в ari.conf.
- ● subscribeAll=true — полезный флаг, который подписывает нас сразу на все события всех каналов. Без него нам пришлось бы отдельно подписываться на каждый канал вручную.
Важно: При переносе строки в конфигуратор не забудьте заменить IP-адрес и учетные данные на актуальные для вашего сервера.
В окне свойств есть галочка "Подключать автоматически".
- ● Если включить: Платформа сама установит соединение с WebSocket-сервером сразу при запуске системы 1С.
- ● Если выключить: Соединением нужно управлять программно или вручную.
Для нашего учебного примера я намеренно не ставлю эту галочку. Мы будем инициировать подключение вручную, чтобы наглядно видеть процесс.
Для проверки связи воспользуемся стандартным инструментом платформы:
- Откройте меню Функции для технического специалиста
- Перейдите в раздел Стандартные.
- Запустите обработку Управление WebSocket-клиентами.
В открывшейся обработке выберите наш WebSocket-клиент и нажмите кнопку Подключить.
Если URL и параметры авторизации указаны верно, статус соединения изменится на Открыто. Это наш "зеленый свет": постоянный туннель между сервером 1С (или клиентом) и телефонией успешно проложен. Теперь мы можем принимать данные в реальном времени.
Обработка входящих событий
Связь есть, теперь нужно научить 1С "понимать" то, что ей говорит телефония. Переходим в конфигуратор, открываем модуль нашего WebSocket-клиента и создаем обработчик события ПриПолученииСообщения.
Именно этот метод будет срабатывать каждый раз, когда Asterisk отправляет данные в сокет. В параметр обработчика Сообщение (тип ДанныеWebSocket) платформа передает полученный пакет. В случае с Asterisk ARI это будет текстовая строка в формате JSON, содержащая всю информацию о звонке.
Модуль моего WebSocket-клиента:

Структура моего регистра сведений:

Тестирование и результат
Настало время проверить нашу систему в бою.
- Запускаем «1С:Предприятие» и убеждаемся, что соединение с WebSocket-сервером установлено (статус "Открыто").
- Совершаем реальный звонок через Asterisk (входящий или исходящий) с любого софтфона или аппарата.
- Открываем наш регистр сведений.
Если все настроено верно, мы увидим, как в момент звонка в списке мгновенно появляется новая запись. Без нажатия кнопок, без регламентных заданий и задержек.
Мы получили живой лог звонков, который наполняется в режиме реального времени.
Как видите, WebSockets — это не магия, а просто постоянный канал связи, который теперь доступен в 1С «из коробки». Больше не нужны «костыли» — достаточно создать один объект в конфигураторе и правильно прописать адрес. Надеюсь, эта инструкция сэкономит вам время при настройке вашей первой интеграции.
Фазлиддин Ахмедов
Руководитель отдела разработки
OOO BUSINESS AUTOMATIZATION

