По работе я столкнулся с задачей отправки сообщения в группу Telegram.
В организации уже был Telegram-бот и настроена рассылка сообщений пользователям с помощью этого бота, поэтому статья рассчитана на тех, кто с ботом работать уже умеет. Если не умеете, то на Infostart есть обработки и статьи, но это другая - отдельная тема.
На Infostart я простых материалов для отправки сообщений в группу Telegram не нашел. То, что было, было очень длинно и предлагалось изучить api Telegram. Но хотелось сделать это "малой кровью".
Так вот отправить сообщение в группу все-таки оказалось просто. Сначала я сумел сделать это с помощью утилиты curl. А поскольку сделать мне это удалось, то переделать отправку с помощью curl на 1С не составило большого труда. Нужен был всего лишь опыт работы с post-запросом.
Итак, что потребовалось сделать:
1. Создать бота-телеграм для отправки сообщений.
2. Добавить этого боту в группу.
3. Соответственно подписаться на этого бота, но подписать надо группу, а не конкретных пользователей.
4. Бота надо сделать администратором группы, чтобы он получил доступ к сообщениям.
5. Сам пример отправки сообщения с помощью curl из командной строки выглядит так:
curl -X POST "https://api.telegram.org/bot1641633011:AAHkAXbdj1RKTJYHCnJF7dZ8u9LMyWL8ba7/sendMessage" -d "chat_id=-1001222395108&text=my sample text"
Здесь:
1) 1641633011:AAHkAXbdj1RKTJYHCnJF7dZ8u9LMyWL8ba7 - токен моего бота
2) -1001222395108 - id группы, куда я отправлял ботом сообщение. id группы начинается с символа "-" в отличии от id пользователя, например.
3) my sample text - текст тестового сообщения
Потом я просто переписал это для 1С. Код не самодостаточный, но рассчитано на то, что код работы с ботом у вас уже есть. Вот пример кода:
// Это для сообщения в группу от чат-бота служебных сообщений
&НаСервере
Функция ОтправитьСлужебноеСообщениеTelegramВГруппу(ИдентрификаторЧата,ТекстСообщения) Экспорт
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("chat_id",ИдентрификаторЧата);
ПараметрыЗапроса.Вставить("text",ТекстСообщения);
Ответ = ОтправитьЗапросСлужебныеСообщенияВГруппу("sendMessage",ПараметрыЗапроса);
Если Ответ <> Неопределено и Ответ.КодСостояния = 200 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Функция ОтправитьЗапросСлужебныеСообщенияВГруппу(Команда,ПараметрыЗапроса)
#Область Проверки
ТокенТелеграм = Константы.ТокенТелеграмСлужебныеСообщения.Получить();
СерверТелеграм = Константы.СерверТелеграм.Получить();
Если Не ЗначениеЗаполнено(ТокенТелеграм) Тогда
Сообщить("Не заполнен токен");
Возврат Неопределено;
КонецЕсли;
Если Не ЗначениеЗаполнено(СерверТелеграм) Тогда
Сообщить("Не заполнен сервер телеграм");
Возврат Неопределено;
КонецЕсли;
Прокси = ПолучитьПрокси();
Соединение = Новый HTTPСоединение(СерверТелеграм,443,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL());
Если Соединение = Неопределено Тогда
Сообщить("Не удалось установить соединение");
Возврат Неопределено;
КонецЕсли;
#КонецОбласти
#Область Запроса
ТекстЗапроса = "bot" + ТокенТелеграм + "/"+Команда;
Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда
ПервыйПараметр = Истина;
Для каждого Эл Из ПараметрыЗапроса Цикл
Если ПервыйПараметр Тогда
ТекстЗапроса = ТекстЗапроса+"?";
ПервыйПараметр = Ложь;
Иначе
ТекстЗапроса = ТекстЗапроса+"&";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса+Эл.Ключ+"=-"+Эл.Значение;
КонецЦикла;
КонецЕсли;
Запрос = новый HTTPЗапрос(ТекстЗапроса);
Ответ = Соединение.ВызватьHTTPМетод("POST", Запрос);
#КонецОбласти
Если Ответ.КодСостояния <> 200 Тогда
Ответ = Неопределено
КонецЕсли;
Возврат Ответ
КонецФункции