Почему не приходят сообщения из Telegram в 1С через Систему взаимодействия и как это исправить?

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

Интеграция 1С с мессенджером Telegram через штатную Систему взаимодействия (сервис 1C:Dialog) — это мощный инструмент, позволяющий организовать общение с клиентами или сотрудниками непосредственно в интерфейсе программы. Однако на практике разработчики часто сталкиваются с ситуацией, когда сообщения из 1С успешно уходят в Telegram, а вот входящие сообщения от бота в 1С не отображаются. Разберем детально причины этой проблемы и рассмотрим способы её решения.

Анализ механизма работы Системы взаимодействия

Для начала проанализируем, как работает «коробочное» решение. Когда мы настраиваем интеграцию в 1С, платформа через сервис 1C:Dialog регистрирует Webhook на стороне серверов Telegram. Это означает, что Telegram сам «стучится» к серверам 1С, когда боту приходит новое сообщение. Если эта цепочка прерывается, входящие сообщения исчезают.

Рассмотрим основные причины, по которым штатная интеграция может не работать:

  1. Конфликт способов получения сообщений. У Telegram API есть два взаимоисключающих метода получения данных: Webhook и getUpdates (Long Polling). Если вы параллельно с Системой взаимодействия используете какую-либо внешнюю обработку или другой сервис, который опрашивает этого же бота через getUpdates, Telegram автоматически удаляет регистрацию вебхука для 1С.
  2. Настройки приватности бота. Если вы планируете использовать бота в группах, необходимо через BotFather проверить параметр Privacy Mode. Если он включен, бот будет видеть только команды, начинающиеся со знака /. Проанализируем настройки: отправим команду /setprivacy в BotFather и установим значение Disabled.
  3. Ошибки регистрации в 1C:Dialog. Иногда процесс связки токена бота и сервиса 1С проходит с ошибками на стороне облака. В этом случае рекомендуется полностью удалить настройку интеграции, подождать несколько минут и создать её заново.

Проверка статуса Webhook через браузер

Выясним, корректно ли настроен вебхук на стороне Telegram. Для этого не обязательно заходить в 1С, достаточно отправить прямой запрос к API Telegram через любой браузер. Рассмотрим этот шаг подробнее. Вставьте в адресную строку следующую ссылку, заменив ТОКЕН_ВАШЕГО_БОТА на реальный токен:

https://api.telegram.org/botТОКЕН_ВАШЕГО_БОТА/getWebhookInfo

Если в поле url вы видите адрес, отличный от серверов 1C:Dialog, или поле пустое — значит, 1С не смогла перехватить управление ботом. Если же адрес верный, но есть ошибки в поле last_error_message, проблему нужно искать в доступности серверов 1С или версии платформы.

Альтернативное решение: Использование регламентных заданий

Если штатная Система взаимодействия продолжает работать нестабильно, разберем альтернативный и зачастую более надежный метод — реализацию собственного механизма опроса Telegram через Регламентные задания. Этот способ позволяет полностью контролировать логику обработки сообщений, поддерживать кнопки, файлы и сложное форматирование.

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


Функция ПолучитьОбновленияОтТелеграм(Токен, ПоследнийИдентификатор)
    Соединение = Новый HTTPСоединение("api.telegram.org", 443,,,,, Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос("bot" + Токен + "/getUpdates?offset=" + Формат(ПоследнийИдентификатор + 1, "ЧГ=0"));
    
    Попытка
        Ответ = Соединение.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            Возврат Ответ.ПолучитьТелоКакСтроку();
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("Telegram.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
    КонецПопытки;
    Возврат Неопределено;
КонецФункции

Проанализируем структуру кода. Мы используем объект HTTPСоединение с обязательным использованием ЗащищенноеСоединениеOpenSSL, так как Telegram работает только по протоколу HTTPS. Параметр offset критически важен: он сообщает Telegram, что все сообщения до этого идентификатора уже обработаны, и их не нужно присылать повторно.

Обработка полученных данных

После того как мы получили строку в формате JSON, её необходимо десериализовать. В современных версиях 1С (начиная с 8.3.6) для этого используется объект ЧтениеJSON. Разберем, как извлечь текст сообщения:


Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();

Если Данные.Свойство("result") Тогда
    Для Каждого Обновление Из Данные.result Цикл
        ИдентификаторСообщения = Обновление.update_id;
        Если Обновление.Свойство("message") Тогда
            ТекстСообщения = Обновление.message.text;
            ЧатID = Обновление.message.chat.id;
            // Здесь вызываем логику обработки сообщения
            ОбработатьВходящееСообщение(ЧатID, ТекстСообщения);
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Важный момент: при использовании такого подхода (Long Polling) необходимо обеспечить работу регламентного задания в цикле или с очень коротким интервалом (например, каждые 3–5 секунд). Это обеспечит приемлемую скорость реакции бота для пользователя.

Особенности использования собственного сервера взаимодействия (On-premise)

Если ваша компания использует локальный Сервер взаимодействия (не облачный 1C:Dialog), требования к инфраструктуре существенно возрастают. Проанализируем список необходимых условий для работы входящих сообщений:

Подведем итоги

Штатная интеграция через Систему взаимодействия — это удобный способ «быстрого старта», но она имеет ряд ограничений (отсутствие кнопок, сложности с файлами). Если сообщения не приходят, в первую очередь проверим getWebhookInfo и настройки Privacy Mode в BotFather. Если же требуется отказоустойчивость и богатый функционал, наиболее надежным решением остается использование регламентных заданий с прямым обращением к Telegram API, что позволяет гибко управлять диалогами и гарантирует доставку сообщений вне зависимости от настроек облачных сервисов 1С.

← На главную