Как отправить сообщение в Telegram из 1С, зная только номер телефона?

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

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

Почему нельзя просто отправить сообщение по номеру через Bot API?

Для начала проанализируем принцип работы официального Bot API. Telegram спроектирован так, чтобы защитить пользователей от спама. Официальный бот (созданный через @BotFather) физически не имеет метода, принимающего номер телефона в качестве адресата. Для отправки сообщения боту необходим уникальный числовой идентификатор — Chat ID.

Более того, бот не может инициировать диалог с пользователем, который никогда ему не писал. Пользователь должен первым нажать кнопку Start в чате с ботом. Только после этого бот получает доступ к Chat ID и право отправлять сообщения. Таким образом, задача «отправить по номеру» из 1С превращается в задачу «связать номер телефона с Chat ID и заставить пользователя начать диалог».

Решение 1: Инициация диалога через Deep Linking и QR-коды

Рассмотрим самый простой и надежный способ, который подходит для внутреннего использования в компании. Если нам нужно, чтобы сотрудники получали уведомления, мы должны помочь им зарегистрироваться в нашем боте. Разберем по шагам, как это реализовать:

  1. В справочнике Пользователи или ФизическиеЛица добавим дополнительный реквизит ТелеграмID (тип: Строка или Число).
  2. Создадим специальную ссылку формата https://t.me/ИмяВашегоБота?start=УникальныйКод.
  3. Сгенерируем QR-код с этой ссылкой и разместим его на рабочем столе пользователя в 1С или в личном кабинете.

Параметр start позволяет реализовать механизм автоматической привязки. Когда пользователь переходит по ссылке и нажимает «Старт», бот получает сообщение, содержащее этот УникальныйКод. Проанализируем пример обработки такого сообщения на стороне 1С (при использовании вебхуков или Long Polling):


Процедура ОбработатьВходящееСообщение(ТекстСообщения, ИдентификаторЧата)
    Если Лев(ТекстСообщения, 7) = "/start " Тогда
        КлючАктивации = Сред(ТекстСообщения, 8);
        // Ищем пользователя в базе по уникальному ключу
        ПользовательСсылка = Справочники.Пользователи.НайтиПоРеквизиту("КлючТелеграм", КлючАктивации);
        Если ЗначениеЗаполнено(ПользовательСсылка) Тогда
            ОбъектПользователь = ПользовательСсылка.ПолучитьОбъект();
            ОбъектПользователь.ТелеграмID = ИдентификаторЧата;
            ОбъектПользователь.Записать();
            ОтправитьОтвет(ИдентификаторЧата, "Регистрация прошла успешно!");
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Этот метод исключает ошибки ручного ввода и гарантирует, что Chat ID будет привязан именно к тому сотруднику, которому вы выдали ключ.

Решение 2: Использование Telegram API (MTProto) и Юзерботов

Если задача стоит жестко — «писать первым, зная только номер», то стандартный Bot API не поможет. В этом случае необходимо использовать Telegram API (MTProto). Это протокол, по которому работают обычные приложения (клиенты) Telegram. Аккаунт, работающий через этот протокол программно, называется «юзерботом».

Выясним причину, почему это сложно реализовать на чистом языке 1С: протокол MTProto требует сложного шифрования и постоянного бинарного соединения. Обычно для этого создается микросервис-посредник на языке Python (библиотеки Telethon или Pyrogram). Рассмотрим схему взаимодействия:

  1. 1С отправляет HTTP-запрос (через HTTPСоединение) к микросервису на Python, передавая номер телефона и текст.
  2. Микросервис, авторизованный под обычным мобильным номером, вызывает метод ImportContacts.
  3. Если пользователь с таким номером существует и его настройки приватности позволяют искать его по номеру, микросервис получает его Internal ID.
  4. Микросервис отправляет сообщение и возвращает результат в 1С.

Важно: Этот метод несет риски блокировки номера. Если ваш «юзербот» будет писать людям, у которых он не в контактах, и они нажмут кнопку «Спам», аккаунт будет заблокирован очень быстро. Для массовых рассылок клиентам этот метод категорически не рекомендуется.

Решение 3: Интеграция через Систему взаимодействия 1С

Проанализируем современный штатный механизм платформы 1С:Предприятие 8.3 — Систему взаимодействия. Начиная с последних релизов, в ней появилась встроенная интеграция с мессенджерами, включая Telegram.

В этом случае 1С сама выступает в роли бэкенда для бота. Настройка выполняется в разделе «Управление системой взаимодействия». Платформа берет на себя сопоставление пользователей системы и внешних пользователей мессенджера. Это наиболее «чистый» способ для корпоративного сектора, так как он поддерживается вендором и не требует написания сложных HTTP-обработчиков для JSON вручную. Работа ведется через объекты ИнтеграцияСистемыВзаимодействия.

Сравнение методов и рекомендации

Подведем итог и выберем оптимальный путь. Выясним, какой метод подходит под ваши задачи:

Если вы автоматизируете внутренние уведомления (для сотрудников): оптимально использовать Решение 1 (QR-коды и ссылки) или штатную Систему взаимодействия. Это бесплатно, надежно и не нарушает правила Telegram. Достаточно один раз заставить сотрудника «авторизоваться» в боте при приеме на работу.

Если вам нужно отправлять сообщения клиентам, которые не знают о вашем боте: здесь лучше рассмотреть использование сторонних шлюзов (агрегаторов). Существуют сервисы, которые предоставляют готовое API. Вы отправляете им запрос с номером телефона, а они через свои фермы «юзерботов» доставляют сообщение. Однако помните о безопасности данных — ваши сообщения будут проходить через сторонние сервера.

В любом случае, при работе с Telegram из 1С всегда помните о структуре хранения данных. Рекомендуется хранить Chat ID как основное поле для связи, а номер телефона — только как справочную информацию для первичного поиска или инициации процесса связки через MTProto.

Для реализации отправки сообщений через 1С используйте объект HTTPСоединение. Пример простого запроса к Bot API для отправки сообщения (когда ID уже известен):


Функция ОтправитьСообщение(ТокенБота, IDЧата, Текст)
    Сервер = "api.telegram.org";
    Ресурс = "bot" + ТокенБота + "/sendMessage?chat_id=" + Формат(IDЧата, "ЧГ=0") + "&text=" + КодироватьСтроку(Текст, СпособКодированияСтроки.URLКодирование);
    
    Соединение = Новый HTTPСоединение(Сервер, 443, , , , 10, Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос(Ресурс);
    Ответ = Соединение.Получить(Запрос);
    
    Возврат Ответ.КодСостояния = 200;
КонецФункции

Таким образом, хотя прямая отправка «по номеру» через ботов невозможна, грамотное сочетание инструментов 1С и понимание протоколов Telegram позволяет решить эту задачу эффективно и безопасно.

← На главную