В процессе разработки интеграции 1С с мессенджером Telegram часто возникают две ключевые проблемы: сообщения, отправленные через СистемаВзаимодействия, не отображаются в Telegram, либо возникают сетевые ошибки при попытке обращения к API напрямую. Рассмотрим, как проанализировать эти ситуации и настроить корректную работу.
Когда мы работаем с СистемаВзаимодействия, бот выступает как полноценный участник чата. Одной из особенностей архитектуры является защита от «зацикливания». Если бот отправляет сообщение в обсуждение, которое было инициировано из Telegram, система может блокировать обратную ретрансляцию этого сообщения, так как считает его внутренним событием бота. В такой ситуации программная отправка через СистемаВзаимодействия выглядит успешной в 1С, но в самом Telegram сообщение не появляется.
Если функционала СистемаВзаимодействия недостаточно, наиболее надежным способом является использование прямого API Telegram через HTTPСоединение. Давайте разберем, как правильно реализовать этот механизм.
Для начала, рассмотрим пример корректной отправки запроса к Telegram API:
Сервер = "api.telegram.org";
Ресурс = "bot" + ТокенТГ + "/getUpdates";
Соединение = Новый HTTPСоединение(Сервер, 443, , , , 5, Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
ДвоичныеДанныеОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
ДвоичныеДанныеОтвета.Записать("C:\Телеграм\response.txt");
Часто разработчики сталкиваются с ошибкой Couldn't resolve host name. Важно понимать: если ваш код работает локально (в клиенте), но выдает ошибку на сервере, причина кроется в сетевой инфраструктуре сервера приложений.
api.telegram.org именно с того сервера, где установлен 1C:Enterprise Server Agent, значит, у службы сервера нет доступа к внешним DNS или доступ заблокирован фаерволом.Новый ЗащищенноеСоединениеOpenSSL(), так как API Telegram работает исключительно по протоколу HTTPS. Отсутствие или неисправность библиотек OpenSSL на сервере приведет к сбросу соединения.При отправке текста через API важно учитывать кодировку и спецсимволы. Ранее существовало ограничение на использование Символы.ПС (перенос строки). В современных условиях при использовании POST-запросов и JSON правильнее использовать методы сериализации, которые корректно обрабатывают спецсимволы.
Если же вы используете GET-запросы (через URL), то для переноса строки рекомендуется использовать URL-кодированный символ %0A:
ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ПС, "%0A");
Таким образом, для стабильной работы мы рекомендуем следующий алгоритм действий:
ping или nslookup от имени учетной записи службы сервера 1С).HTTPСоединение, если ваш сервер находится в закрытом контуре.HTTPСоединение с обязательной инициализацией ЗащищенноеСоединениеOpenSSL.Следуя этим рекомендациям, вы сможете успешно интегрировать 1С с Telegram, обойдя ограничения СистемаВзаимодействия и решив проблемы сетевого взаимодействия.