Интеграция 1С с мессенджерами давно стала стандартом для современного бизнеса. Однако при работе с Telegram разработчики часто сталкиваются с фундаментальным ограничением Bot API: бот не может написать пользователю первым, если тот не запустил его командой /start. Это создает серьезные препятствия для CRM-систем, где менеджер должен иметь возможность оперативно связаться с клиентом. В этой статье мы разберем, как обойти это ограничение, используя возможности Telegram Business, и как правильно настроить обмен данными в 1С.
При попытке отправить сообщение через стандартный метод sendMessage бот часто возвращает ошибку: {"ok":false,"error_code":403,"description":"Forbidden: bot can't initiate conversation with a user"}. Это происходит потому, что политика безопасности Telegram защищает пользователей от спама. Бот рассматривается как программный интерфейс, доступ к которому пользователь должен разрешить явно.
Однако современный Telegram предлагает решение в виде бизнес-аккаунтов. Подключив бота к бизнес-аккаунту в качестве ассистента, мы получаем возможность отправлять сообщения от имени этого аккаунта тем пользователям, с которыми у владельца аккаунта уже есть существующий диалог в мессенджере. Это ключевое отличие: бот теперь выступает не как самостоятельная единица, а как «рука» пользователя.
Прежде чем писать код в 1С, необходимо выполнить предварительные настройки в самом Telegram:
Bot Settings) и включите Business Mode.Для того чтобы 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.
Теперь, когда у нас есть 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С (как в мессенджере), нужно учитывать несколько технических моментов:
business_connection_id, могут не всегда возвращаться в ваш вебхук как «исходящие», рекомендуется записывать факт отправки в отдельный регистр сведений в 1С сразу после успешного HTTP-ответа от Telegram.sendChatAction с параметром action = "typing". Вызывайте его в 1С, когда пользователь начинает вводить текст в форме ответа.reply_to_message_id. Это позволит клиенту видеть, на какую именно его реплику отвечает менеджер из 1С.Рассмотрим важные ограничения, о которых нужно знать программисту 1С:
429 Too Many Requests и делайте паузу, указанную в поле retry_after.Таким образом, использование Telegram Business API в связке с 1С позволяет создать полноценное рабочее место оператора, где переписка ведется от имени официального профиля компании, а вся история сохраняется в базе данных для дальнейшего анализа и контроля качества.