Интеграция 1С с мессенджером Telegram через штатную Систему взаимодействия (сервис 1C:Dialog) — это мощный инструмент, позволяющий организовать общение с клиентами или сотрудниками непосредственно в интерфейсе программы. Однако на практике разработчики часто сталкиваются с ситуацией, когда сообщения из 1С успешно уходят в Telegram, а вот входящие сообщения от бота в 1С не отображаются. Разберем детально причины этой проблемы и рассмотрим способы её решения.
Для начала проанализируем, как работает «коробочное» решение. Когда мы настраиваем интеграцию в 1С, платформа через сервис 1C:Dialog регистрирует Webhook на стороне серверов Telegram. Это означает, что Telegram сам «стучится» к серверам 1С, когда боту приходит новое сообщение. Если эта цепочка прерывается, входящие сообщения исчезают.
Рассмотрим основные причины, по которым штатная интеграция может не работать:
Webhook и getUpdates (Long Polling). Если вы параллельно с Системой взаимодействия используете какую-либо внешнюю обработку или другой сервис, который опрашивает этого же бота через getUpdates, Telegram автоматически удаляет регистрацию вебхука для 1С.Privacy Mode. Если он включен, бот будет видеть только команды, начинающиеся со знака /. Проанализируем настройки: отправим команду /setprivacy в BotFather и установим значение Disabled.Выясним, корректно ли настроен вебхук на стороне 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 секунд). Это обеспечит приемлемую скорость реакции бота для пользователя.
Если ваша компания использует локальный Сервер взаимодействия (не облачный 1C:Dialog), требования к инфраструктуре существенно возрастают. Проанализируем список необходимых условий для работы входящих сообщений:
Штатная интеграция через Систему взаимодействия — это удобный способ «быстрого старта», но она имеет ряд ограничений (отсутствие кнопок, сложности с файлами). Если сообщения не приходят, в первую очередь проверим getWebhookInfo и настройки Privacy Mode в BotFather. Если же требуется отказоустойчивость и богатый функционал, наиболее надежным решением остается использование регламентных заданий с прямым обращением к Telegram API, что позволяет гибко управлять диалогами и гарантирует доставку сообщений вне зависимости от настроек облачных сервисов 1С.