Как программно отправлять сообщения в Telegram из 1С: решение проблем с интеграцией

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки интеграции 1С с мессенджером Telegram часто возникают две ключевые проблемы: сообщения, отправленные через СистемаВзаимодействия, не отображаются в Telegram, либо возникают сетевые ошибки при попытке обращения к API напрямую. Рассмотрим, как проанализировать эти ситуации и настроить корректную работу.

Почему не уходят сообщения через Систему взаимодействия?

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

Решение через прямое API Telegram

Если функционала СистемаВзаимодействия недостаточно, наиболее надежным способом является использование прямого API Telegram через HTTPСоединение. Давайте разберем, как правильно реализовать этот механизм.

Для начала, рассмотрим пример корректной отправки запроса к Telegram API:


Сервер = "api.telegram.org";
Ресурс = "bot" + ТокенТГ + "/getUpdates";
Соединение = Новый HTTPСоединение(Сервер, 443, , , , 5, Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
ДвоичныеДанныеОтвета = Ответ.ПолучитьТелоКакДвоичныеДанные();
ДвоичныеДанныеОтвета.Записать("C:\Телеграм\response.txt");

Устранение сетевых ошибок при работе через сервер 1С

Часто разработчики сталкиваются с ошибкой Couldn't resolve host name. Важно понимать: если ваш код работает локально (в клиенте), но выдает ошибку на сервере, причина кроется в сетевой инфраструктуре сервера приложений.

  1. Проверка DNS: Сервер 1С должен иметь возможность разрешать доменные имена. Проверьте настройки DNS на самом сервере. Если команда ping не проходит для api.telegram.org именно с того сервера, где установлен 1C:Enterprise Server Agent, значит, у службы сервера нет доступа к внешним DNS или доступ заблокирован фаерволом.
  2. Разница контекстов: Помните, что код на сервере выполняется от имени учетной записи службы 1С. Настройки сетевого доступа, прокси-серверы и правила Firewall для этой учетной записи могут отличаться от настроек вашего пользователя Windows.
  3. Безопасность соединения: Всегда используйте Новый ЗащищенноеСоединениеOpenSSL(), так как API Telegram работает исключительно по протоколу HTTPS. Отсутствие или неисправность библиотек OpenSSL на сервере приведет к сбросу соединения.

Важные нюансы работы с текстом сообщений

При отправке текста через API важно учитывать кодировку и спецсимволы. Ранее существовало ограничение на использование Символы.ПС (перенос строки). В современных условиях при использовании POST-запросов и JSON правильнее использовать методы сериализации, которые корректно обрабатывают спецсимволы.

Если же вы используете GET-запросы (через URL), то для переноса строки рекомендуется использовать URL-кодированный символ %0A:

ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ПС, "%0A");

Таким образом, для стабильной работы мы рекомендуем следующий алгоритм действий:

Следуя этим рекомендациям, вы сможете успешно интегрировать 1С с Telegram, обойдя ограничения СистемаВзаимодействия и решив проблемы сетевого взаимодействия.

← На главную