Связка 1С и Telegram. Отправка стикеров

Публикация № 877921

Программирование - Практика программирования

32
В качестве факультатива сейчас изучаю возможности связки 1С и мессенджера Telegram. И возник вопрос, как помимо сообщений, посылать в ответ на действия пользователя произвольный стикер? Решению этой мини задачи и посвящена данная статья.

На 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)", но она также будет работать на любой конфигурации на управляемых формах

32

Скачать файлы

Наименование Файл Версия Размер
Пример отправки стикеров из 1С в Telegram
.epf 7,34Kb
31.07.18
4
.epf 7,34Kb 4 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. Aspirant 3 02.08.18 12:58 Сейчас в теме
HTTPСоединение("api.telegram.org"

"api.telegram.org" - этот адрес точно работает?
2. Skin123 133 02.08.18 15:13 Сейчас в теме
(1) Должен работать, если Ваш провайдер не заблокировал его по требованиям РКН
3. stako8 18.01.19 08:22 Сейчас в теме
Может кто сталкивался: отправляю клавиатуру "bot******/sendMessage?chat_id=******&text=Меню&reply_markup={"inline_keyboard":[[{"text":"1","callback_data":"1"},{"text":"2","callback_data":"2"}]]}", она приходит пользователю, тот нажимает на не, но через "getUpdates" не приходит ответ что он нажал. Куда копать?
Оставьте свое сообщение