Рассмотрим достаточно нетривиальную задачу: организацию индивидуальных рассылок клиентам через популярные мессенджеры напрямую из устаревшей платформы 1С 7.7. Несмотря на возраст платформы, бизнес часто требует современного уровня коммуникаций. Разберем по шагам, с какими техническими ограничениями мы столкнемся и как их обойти для каждого конкретного мессенджера.
Прежде чем приступать к написанию кода для конкретного API, проанализируем базовые возможности платформы. В отличие от современных версий, 1С 7.7 не имеет встроенных объектов для работы с HTTP-запросами и форматом обмена данными JSON. Мессенджеры, в свою очередь, общаются исключительно через REST API с использованием JSON.
Разберем, как реализовать базовые механизмы связи:
WinHttp.WinHttpRequest.5.1 или MSXML2.XMLHTTP. Они позволяют формировать GET и POST запросы, передавать заголовки и получать ответы.MSScriptControl.ScriptControl, который позволяет выполнять код JScript прямо внутри 1С и обращаться к свойствам JSON-объектов.Рассмотрим пример того, как в 1С 7.7 может выглядеть базовый POST-запрос с использованием COM-объекта:
Функция ОтправитьPOSTЗапрос(URL, ДанныеJSON)
Попытка
HTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
HTTP.Open("POST", URL, 0); // 0 - синхронный запрос
HTTP.SetRequestHeader("Content-Type", "application/json");
HTTP.Send(ДанныеJSON);
Возврат HTTP.ResponseText;
Исключение
Сообщить("Ошибка отправки запроса: " + ОписаниеОшибки());
Возврат "";
КонецПопытки;
КонецФункции
Telegram предоставляет наиболее дружелюбный API для разработчиков. Для отправки сообщений нам достаточно создать бота. Посмотрим, как выглядит этот процесс:
BotFather в самом Telegram.https://api.telegram.org/bot[ТОКЕН]/sendMessage, передавая в JSON-теле запроса ID чата получателя и текст сообщения.Если же стоит задача не только отправлять, но и получать ответы от клиентов обратно в 1С 7.7, ситуация усложняется. В современных системах для этого используют Webhook (сервер мессенджера сам присылает данные на ваш сервер). Но 1С 7.7 не может выступать в роли веб-сервера. Поэтому нам остается метод getUpdates (Long Polling). Нам придется создать обработку ожидания, которая будет по расписанию постоянно опрашивать сервер Telegram на наличие новых входящих сообщений.
Также для сложных задач (например, отправки картинок или файлов) отличным решением является использование внешних скриптов. В сообществе часто применяют инструмент OneScript (1Script), который позволяет писать скрипты на языке, похожем на 1С, и запускать их из командной строки. 1С 7.7 может просто формировать данные, а внешний скрипт — выполнять всю сложную работу по взаимодействию с Telegram API.
Интеграция с Viber Bot API технически сложнее, чем с Telegram. Главная проблема заключается в том, что для полноценной работы (даже просто для регистрации бота в системе и получения возможности отправлять сообщения) Viber требует обязательной установки Webhook. Сервер Viber должен убедиться, что по указанному вами публичному URL-адресу находится рабочий сервис.
Так как 1С 7.7 не умеет принимать входящие веб-запросы из интернета, нам потребуется промежуточное звено (прокладка):
WhatsApp — самый сложный и закрытый мессенджер из представленных. Напрямую интегрироваться с ним, как с Telegram, невозможно. Как справедливо отмечают специалисты, работа с WhatsApp возможна только через специализированные сервисы-шлюзы (прокладки). Проанализируем два основных варианта:
1. Неофициальные шлюзы (Эмуляция WhatsApp Web)
Существует множество сервисов, которые предоставляют свой API (обычно REST с JSON), а "под капотом" они эмулируют работу WhatsApp Web. Вам необходимо отсканировать QR-код телефоном, после чего шлюз начинает пересылать ваши команды в телефон, а телефон — на серверы WhatsApp.
2. Официальный WhatsApp Business API (WABA)
Это официальный путь, который предоставляется компанией Meta через авторизованных провайдеров. Вы регистрируете номер компании официально.
В случае с 1С 7.7 взаимодействие с любым из этих шлюзов будет строиться по описанной в самом начале схеме: использование WinHttp для отправки JSON-запросов к API выбранного провайдера.