Как программно отправить сообщение в Telegram из 1С:Предприятие 8.3?

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

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

Подготовительный этап: создание бота и получение токена

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

  1. Найдем в Telegram бота с именем @BotFather.
  2. Используем команду /newbot для создания нового бота.
  3. Следуем инструкциям: задаем имя бота и его уникальный логин (должен заканчиваться на "bot").
  4. После успешного создания BotFather пришлет нам API Token. Этот токен является ключом для доступа к API и его необходимо хранить в секрете.
  5. Чтобы бот мог отправить сообщение конкретному пользователю, нам нужно узнать ChatID. Проще всего это сделать, написав боту любое сообщение и выполнив запрос к методу getUpdates через браузер или средствами 1С, либо настроив WebHook для Telegram.

Реализация отправки сообщения средствами 1С

Для взаимодействия с Telegram API в 1С используются встроенные объекты HTTPСоединение и HTTPЗапрос, а для их проверки подойдет обработка для тестирования http сервисов. Проанализируем типичный алгоритм отправки текстового уведомления. Рассмотрим пример кода, который формирует POST-запрос к серверам Telegram.


Функция ОтправитьСообщениеВTelegram(Токен, ChatID, ТекстСообщения) Экспорт
    
    Сервер = "api.telegram.org";
    Ресурс = "bot" + Токен + "/sendMessage";
    
    // Формируем структуру параметров для передачи в теле запроса
    ПараметрыЗапроса = Новый Структура;
    ПараметрыЗапроса.Вставить("chat_id", ChatID);
    ПараметрыЗапроса.Вставить("text", ТекстСообщения);
    ПараметрыЗапроса.Вставить("parse_mode", "HTML"); // Позволяет использовать HTML-теги в тексте
    
    // Сериализуем структуру в строку JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    // Настраиваем защищенное соединение (SSL)
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
    
    Попытка
        Соединение = Новый HTTPСоединение(Сервер, 443,,,,, ЗащищенноеСоединение);
        
        Запрос = Новый HTTPЗапрос(Ресурс);
        Запрос.Заголовки.Вставить("Content-Type", "application/json");
        Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
        
        Ответ = Соединение.ОтправитьДляОбработки(Запрос);
        
        Если Ответ.КодСостояния = 200 Тогда
            Возврат Истина;
        Иначе
            ЗаписьЖурналаРегистрации("Telegram.Ошибка", УровеньЖурналаРегистрации.Ошибка,,, 
                "Код состояния: " + Ответ.КодСостояния + ". Ответ: " + Ответ.ПолучитьТелоКакСтроку());
            Возврат Ложь;
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("Telegram.КритическаяОшибка", УровеньЖурналаРегистрации.Ошибка,,, 
            ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        Возврат Ложь;
    КонецПопытки;

КонецФункции

Разбор ключевых объектов и методов

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

Обработка результата и типичные ошибки

Проанализируем ситуацию, когда сообщение не доходит до адресата. Основные причины могут быть следующими:

  1. Неверный Токен: Проверьте, не закрался ли лишний пробел при копировании токена из BotFather.
  2. Блокировка доступа: В некоторых случаях доступ к домену api.telegram.org может быть ограничен на уровне системного администратора или провайдера. В таких ситуациях может потребоваться использование прокси-сервера, который настраивается в параметрах объекта HTTPСоединение.
  3. Некорректный ChatID: Если пользователь еще не начал диалог с ботом, бот не сможет отправить ему сообщение первым. Пользователь должен нажать кнопку "Запустить" (команда /start).

Продвинутое форматирование сообщений

Рассмотрим подробнее использование параметра parse_mode. Если мы указываем значение HTML, то в тексте сообщения можно использовать базовые теги, такие как <b> для жирного текста, <i> для курсива или <code> для моноширинного шрифта. Это позволяет сделать уведомления из 1С более читабельными и профессиональными. Для этой задачи есть встроенный клиент Telegram для отправки печатных форм.

Посмотрим на пример формирования текста с форматированием:


Текст = "Внимание!" + Символы.ПС;
Текст = Текст + "Создан новый документ: " + ДокументОбъект.Ссылка + "" + Символы.ПС;
Текст = Текст + "Сумма: " + Формат(ДокументОбъект.СуммаДокумента, "ЧЦ=15; ЧДЦ=2") + "";

Заключение и рекомендации

Мы разобрали базовый принцип интеграции — для её реализации есть комплексная интеграция 1С с Telegram для рассылок. Для стабильной работы в высоконагруженных системах рекомендуется выносить отправку сообщений в Фоновые задания. Это позволит основному процессу (например, проведению документа) не ожидать ответа от сервера Telegram, что значительно повысит отзывчивость интерфейса для пользователя. Также важно помнить о лимитах Telegram API: не рекомендуется отправлять более 30 сообщений в секунду, чтобы избежать временной блокировки бота.

← На главную