В современной разработке на платформе 1С:Предприятие 8.3 часто возникает задача оперативного оповещения пользователей или ответственных лиц о важных событиях в системе. Одним из наиболее эффективных и популярных способов является интеграция с мессенджером Telegram (примером реализации может служить чат-бот для парикмахерской). В рамках данной статьи мы подробно разберем, как настроить взаимодействие между 1С и Telegram с использованием механизмов HTTP-сервисов и организацией центра оповещений.
Прежде чем приступать к написанию кода в 1С, нам необходимо зарегистрировать нашего бота в Telegram и получить уникальный идентификатор (токен) — для этой задачи подойдёт визуальный конструктор Telegram-ботов для 1С. Разберем этот процесс по шагам:
@BotFather./newbot для создания нового бота.BotFather пришлет нам API Token. Этот токен является ключом для доступа к API и его необходимо хранить в секрете.ChatID. Проще всего это сделать, написав боту любое сообщение и выполнив запрос к методу getUpdates через браузер или средствами 1С, либо настроив WebHook для Telegram.Для взаимодействия с 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.КритическаяОшибка", УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат Ложь;
КонецПопытки;
КонецФункции
Выясним причину использования конкретных объектов в приведенном выше примере:
ЗащищенноеСоединениеOpenSSL, так как API работает исключительно по протоколу HTTPS (порт 443).Content-Type: application/json критически важна для корректной интерпретации данных сервером Telegram.УстановитьТелоИзСтроки с кодировкой UTF8 гарантирует корректную передачу кириллицы.Проанализируем ситуацию, когда сообщение не доходит до адресата. Основные причины могут быть следующими:
BotFather.api.telegram.org может быть ограничен на уровне системного администратора или провайдера. В таких ситуациях может потребоваться использование прокси-сервера, который настраивается в параметрах объекта HTTPСоединение./start).Рассмотрим подробнее использование параметра parse_mode. Если мы указываем значение HTML, то в тексте сообщения можно использовать базовые теги, такие как <b> для жирного текста, <i> для курсива или <code> для моноширинного шрифта. Это позволяет сделать уведомления из 1С более читабельными и профессиональными. Для этой задачи есть встроенный клиент Telegram для отправки печатных форм.
Посмотрим на пример формирования текста с форматированием:
Текст = "Внимание!" + Символы.ПС;
Текст = Текст + "Создан новый документ: " + ДокументОбъект.Ссылка + "" + Символы.ПС;
Текст = Текст + "Сумма: " + Формат(ДокументОбъект.СуммаДокумента, "ЧЦ=15; ЧДЦ=2") + "";
Мы разобрали базовый принцип интеграции — для её реализации есть комплексная интеграция 1С с Telegram для рассылок. Для стабильной работы в высоконагруженных системах рекомендуется выносить отправку сообщений в Фоновые задания. Это позволит основному процессу (например, проведению документа) не ожидать ответа от сервера Telegram, что значительно повысит отзывчивость интерфейса для пользователя. Также важно помнить о лимитах Telegram API: не рекомендуется отправлять более 30 сообщений в секунду, чтобы избежать временной блокировки бота.