Простой пример работы с Telegram из дополнительной обработки. Реализована отправка сообщений ботом с датой и номером заказа в указанный чат или группу в Telegram.
Настройка:
1. Необходимо зарегистрировать нового телеграмм бота, используя @BotFather, инструкция: core.telegram.org/bots/tutorial
2. Создаем группу в телеграмм, в которую добавляем бота и сотрудников, которым необходимо отправлять сообщения. Если хотите, чтобы бот мог считывать сообщения, необходимо дать ему разрешение (для работы обработки это не нужно). Отправляем тестовое сообщение в группу, по нему можно потом идентифицировать чат в настройках.
3. Регистрируем внешнюю обработку, указываем, в каких документах хотим использовать команду
4. Открываем любой из указанных документов, вызываем команду "Параметры Telegram"
5. В открывшейся форме указываем токен вашего бота, после чего вызываем "Обновить список чатов". В списке должны отобразится ИД групп и чатов в которых есть новые сообщения, при необходимости список можно отредактировать. Настройка закончена, при закрытии настройки сохранятся автоматически.
6. Вызываем команду "Отправить оповещение", в группу должно прийти сообщение следующего вида:
Основные функции, используемые в обработке:
Функция ПолучитьСоединениеТелеграмм()
Возврат Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
КонецФункции
Функция GetUpdates(Знач AccessToken) Экспорт
Результат = Неопределено;
АдресURL = СтрШаблон("/bot%1/getUpdates", AccessToken);
Попытка
СоединениеHTTP = ПолучитьСоединениеТелеграмм();
ПрочитатьВСоответствие = Истина;
Результат = GetJson(АдресURL, СоединениеHTTP, ПрочитатьВСоответствие);
Исключение
Результат = ОписаниеОшибки();
КонецПопытки;
Возврат Результат;
КонецФункции
Функция SendMessage(Знач AccessToken, Знач ИДЧата, Знач ТекстСообщения) Экспорт
Результат = Неопределено;
АдресURL = СтрШаблон("/bot%1/sendMessage?chat_id=%2&text=%3", AccessToken, Формат(ИДЧата,"ЧДЦ=0; ЧГ=0"), ТекстСообщения);
Попытка
СоединениеHTTP = ПолучитьСоединениеТелеграмм();
ПрочитатьВСоответствие = Истина;
Результат = GetJson(АдресURL, СоединениеHTTP, ПрочитатьВСоответствие);
Исключение
Результат = ОписаниеОшибки();
КонецПопытки;
Возврат Результат;
КонецФункции
04.12.2023 Изменена работа с хранением настроек, теперь настройки сохраняются в хранилище настроек внешней обработки.
Процедура СохранитьНастройки(СтруктураНастроек, ОбъектСсылка) Экспорт
ДополнительнаяОбработкаОбъект = ОбъектСсылка.ПолучитьОбъект();
ДополнительнаяОбработкаОбъект.ХранилищеНастроек = Новый ХранилищеЗначения(СтруктураНастроек);
ДополнительнаяОбработкаОбъект.Записать();
КонецПроцедуры
Функция ПолучитьСтруктуруНастроек() Экспорт
СтруктураНастроек = Новый Структура("AccessToken", "");
СтруктураНастроек.Вставить("Настройки", ЭтотОбъект.Настройки.Выгрузить());
СтруктураНастроек.Настройки.Очистить();
Возврат СтруктураНастроек;
КонецФункции
Функция ПолучитьНастройки(ОбъектСсылка) Экспорт
СтруктураНастроек = Неопределено;
Если ЗначениеЗаполнено(ОбъектСсылка) Тогда
СтруктураНастроек = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектСсылка, "ХранилищеНастроек").Получить();
КонецЕсли;
Если СтруктураНастроек = Неопределено Тогда
//Вернём пустые настройки
СтруктураНастроек = ПолучитьСтруктуруНастроек();
КонецЕсли;
Возврат СтруктураНастроек;
КонецФункции
Платформа предприятия 8.3.22.
Протестировано на релизах:
- КА 2.5.9
- УТ 11.5.9
Исходный код открыт.