На Infostart`е множество статей по интеграции 1С и мессенджера Telegram. В них описано как отправить пользователю сообщения/кнопки/файлы, но нигде нет примера по отправке стикера.
Немного оживим задачу:
Пусть у нас существует бот, который оповещает пользователей о необходимости согласовать документ, т.е. в момент поступления документа на согласование пользователю приходит сообщение следующего вида: "Прошу согласовать документ заявка на расход 1 от 15.07.208 на сумму 100 руб." с двумя кнопками (клавиатура типа "inline_keyboard") "Согласовать" и "Не согласовать". По нажатию на кнопку "Согласовать" пользователю должно приходить сообщение "Спасибо, документ успешно согласован!" и посылаться произвольный стикер.
Вот как это должно выглядеть на практике:
Покопавшись в Telegram Api (https://core.telegram.org/bots/api), было обнаружено, что для отправки стикера существует метод "/sendSticker":
Получается, чтобы отправить стикер нужно знать chat_id и sticker, первый параметр это идентификатор чата нашего бота с конкретным пользователем, а второй это адрес стикера на сервере telegram. Чтобы получить эти параметры нужно один раз послать необходимые нам стикеры нашему боту.
Затем создать обработку и выполнить в ней следующий код по чтению этих сообщений:
&НаКлиенте
Процедура ПолучитьИдентификаторы(Команда)
Идентификаторы.Очистить();
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
//Запрос обновлений сообщений
ТекстЗапросаHTTP = "bot" + ТокенБота + "/getUpdates";
Запрос = Новый HTTPЗапрос(ТекстЗапросаHTTP);
Ответ = Соединение.Получить(Запрос);
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
//Чтение ответа
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
МассивСообщений = Результат.result;
Для каждого СтруктураСообщения из МассивСообщений Цикл
Сообщение = СтруктураСообщения.message;
Если Сообщение.Свойство("sticker") Тогда
ИдентификаторЧата = Формат(Сообщение.chat.id, "ЧГ=");
//Строка ИД чата
НоваяСтрокаИдентификатора = Идентификаторы.Добавить();
НоваяСтрокаИдентификатора.ИмяПользователя = Сообщение.from.first_name + " " + Сообщение.from.last_name;
НоваяСтрокаИдентификатора.ИдентификаторЧата = ИдентификаторЧата;
Стикер = Сообщение.sticker;
НоваяСтрокаИдентификатора.Стикер = Стикер.emoji;
НоваяСтрокаИдентификатора.АдресСтикера = Стикер.file_id;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
В ответ на http запрос telegram вернет нам JSON массив следующего формата (адрес стикера это его file_id):
Получив адрес стикера, можно легко его отправить, используя следующий код:
&НаКлиенте
Процедура ОтправитьСтикерПользователю(АдресСтикера, ИдентификаторЧата)
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());
//Параметры запроса
ПараметрыЗапроса = "?chat_id=" + Формат(ИдентификаторЧата, "ЧГ=0") + "&sticker=" + АдресСтикера;
ТекстЗапросаHTTP = "bot" + ТокенБота + "/sendSticker" + ПараметрыЗапроса;
Запрос = Новый HTTPЗапрос(ТекстЗапросаHTTP);
Запрос.УстановитьТелоИзСтроки(ПараметрыЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
КонецПроцедуры
Для удобства получения параметров chat_id и sticker была создана обработка по их получению и отправки стикеров:
Обработка находится во вложении к данной публикации, однако весь её код приведен выше.
Обработка тестировалась на конфигурации "Бухгалтерия предприятия, редакция 3.0 (3.0.63.20)", но она также будет работать на любой конфигурации на управляемых формах
HTTPСоединение(«api.telegram.org»
«api.telegram.org» — этот адрес точно работает?
(1) Должен работать, если Ваш провайдер не заблокировал его по требованиям РКН
Может кто сталкивался: отправляю клавиатуру «bot******/sendMessage?chat_id=******&text=Меню&reply_markup={«inline_keyboard»:[[{«text»:»1″,»callback_data»:»1″},{«text»:»2″,»callback_data»:»2″}]]}», она приходит пользователю, тот нажимает на не, но через «getUpdates» не приходит ответ что он нажал. Куда копать?
(3)в ответ когда будете дергать getUpdates там должно быть поле
callback_data что такое и там будет индентификатор вашего callback_data (1 или 2)