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

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

Интеграция 1С с мессенджерами давно стала стандартом для современного бизнеса. Однако при работе с Telegram разработчики часто сталкиваются с фундаментальным ограничением Bot API: бот не может написать пользователю первым, если тот не запустил его командой /start. Это создает серьезные препятствия для CRM-систем, где менеджер должен иметь возможность оперативно связаться с клиентом. В этой статье мы разберем, как обойти это ограничение, используя возможности Telegram Business, и как правильно настроить обмен данными в 1С.

Анализ проблемы: почему возникает ошибка 403 Forbidden

При попытке отправить сообщение через стандартный метод sendMessage бот часто возвращает ошибку: {"ok":false,"error_code":403,"description":"Forbidden: bot can't initiate conversation with a user"}. Это происходит потому, что политика безопасности Telegram защищает пользователей от спама. Бот рассматривается как программный интерфейс, доступ к которому пользователь должен разрешить явно.

Однако современный Telegram предлагает решение в виде бизнес-аккаунтов. Подключив бота к бизнес-аккаунту в качестве ассистента, мы получаем возможность отправлять сообщения от имени этого аккаунта тем пользователям, с которыми у владельца аккаунта уже есть существующий диалог в мессенджере. Это ключевое отличие: бот теперь выступает не как самостоятельная единица, а как «рука» пользователя.

Шаг 1: Настройка Telegram Business и бота

Прежде чем писать код в 1С, необходимо выполнить предварительные настройки в самом Telegram:

  1. Откройте BotFather и создайте нового бота или выберите существующего.
  2. Перейдите в настройки бота (Bot Settings) и включите Business Mode.
  3. В основном приложении Telegram на мобильном устройстве перейдите в Настройки -> Telegram Business -> Чат-боты.
  4. Добавьте вашего бота в этот раздел. Теперь бот имеет право просматривать сообщения бизнес-аккаунта и отвечать на них.

Шаг 2: Получение идентификатора бизнес-подключения (business_connection_id)

Для того чтобы 1С могла отправить сообщение от имени бизнес-аккаунта, методу sendMessage необходимо передать специальный параметр — business_connection_id. Этот идентификатор уникален для связки «Бот + Бизнес-аккаунт».

Разберем, как получить этот ID программно в 1С через механизм Webhook. Нам нужно проанализировать структуру JSON, которую Telegram присылает на наш HTTP-сервис при взаимодействии бота с аккаунтом. Рассмотрим пример кода функции обработки входящего запроса:


Функция Webhook(Запрос)
    Ответ = Новый HTTPСервисОтвет(200);
    Попытка
        Тело = Запрос.ПолучитьТелоКакСтроку();
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(Тело);
        ДанныеОбмена = ПрочитатьJSON(ЧтениеJSON);
        
        // Поиск идентификатора в структуре сообщения
        Если ДанныеОбмена.Свойство("business_connection") Тогда
            БизнесID = ДанныеОбмена.business_connection.id;
            // Сохраните этот ID в константу или справочник настроек
        ИначеЕсли ДанныеОбмена.Свойство("business_message") Тогда
            БизнесID = ДанныеОбмена.business_message.business_connection_id;
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("Telegram.Ошибка", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
    КонецПопытки;
    Возврат Ответ;
КонецФункции

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

Шаг 3: Реализация отправки сообщений из 1С

Теперь, когда у нас есть business_connection_id, мы можем отправить сообщение пользователю. Проанализируем формирование HTTP-запроса. Главное изменение по сравнению со стандартной отправкой — добавление параметра в строку запроса или в тело JSON.


Процедура ОтправитьСообщениеЧерезБизнесАккаунт(ТокенБота, ЧатID, ТекстСообщения, БизнесID)
    
    Ресурс = "bot" + ТокенБота + "/sendMessage";
    ПараметрыЗапроса = Новый Структура;
    ПараметрыЗапроса.Вставить("chat_id", ЧатID);
    ПараметрыЗапроса.Вставить("text", ТекстСообщения);
    ПараметрыЗапроса.Вставить("business_connection_id", БизнесID); // Ключевой параметр
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
    ТелоЗапроса = ЗаписьJSON.Закрыть();
    
    Соединение = Новый HTTPСоединение("api.telegram.org", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
    ЗапросHTTP = Новый HTTPЗапрос(Ресурс);
    ЗапросHTTP.Заголовки.Вставить("Content-Type", "application/json");
    ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапроса);
    
    Ответ = Соединение.ОтправитьДляОбработки(ЗапросHTTP);
    
    Если Ответ.КодСостояния <> 200 Тогда
        Сообщить("Ошибка отправки: " + Ответ.ПолучитьТелоКакСтроку());
    КонецЕсли;
    
КонецПроцедуры

Интерактивный чат в 1С: как сделать работу оператора удобной

Чтобы реализовать полноценный интерфейс чата внутри 1С (как в мессенджере), нужно учитывать несколько технических моментов:

  1. Хранение истории: Поскольку сообщения, отправленные через business_connection_id, могут не всегда возвращаться в ваш вебхук как «исходящие», рекомендуется записывать факт отправки в отдельный регистр сведений в 1С сразу после успешного HTTP-ответа от Telegram.
  2. Статус «Печатает...»: Для имитации живого общения используйте метод sendChatAction с параметром action = "typing". Вызывайте его в 1С, когда пользователь начинает вводить текст в форме ответа.
  3. Ответы на конкретные сообщения: Используйте параметр reply_to_message_id. Это позволит клиенту видеть, на какую именно его реплику отвечает менеджер из 1С.

Ограничения и безопасность

Рассмотрим важные ограничения, о которых нужно знать программисту 1С:

Таким образом, использование Telegram Business API в связке с 1С позволяет создать полноценное рабочее место оператора, где переписка ведется от имени официального профиля компании, а вся история сохраняется в базе данных для дальнейшего анализа и контроля качества.

← На главную