Шпаргалка для новичков. Самый простой пример создания Telegram бота и отправка сообщений из 1С

Публикация № 1709618 11.08.22

Интеграция и обмен данными - Боты

telegrmm bot новичек.

Пошаговая инструкция, как создать бота и отсылать пользователям сообщения из 1С.

Создание телеграм ботов - тема не новая и уже далеко убежала вперед, а новичкам сложно с чего-то начать. Начнем с этой статьи.

1. Первое, что нам нужно, это сам Бот. Открываем Telegram на своем телефоне и в поисковике ищем BotFather - это помощник создания бота. Заходим, запускаем и пишем команду /newbot.  В ответ придет сообщение на английском (кому влом переводить: "Хорошо, новый бот. Как будем его называть? Впишите имя своего бота"). Пишем произвольно, что-то типа МояОрганизация. В ответ опять придет сообщение на английском (кому опять влом переводить: "Хорошо. Теперь придумай ник для своего бота, ник обязательно должен заканчиваться на слово "bot""). Пишем что-то типа МояОрганизация_bot. В ответ опять придет сообщение (переводить не буду). В нем нам надо сохранить токен, выглядит он в сообщении так  

Use this token to access the HTTP API:
5519894407:AAHE***********kYlaN7AC*************

Вот эта вторая строка и есть наш токен.

2. Для каждого пользователя, которому мы хотим что-то отправить, надо знать его ID. Чтобы его узнать, опять в телеграмме находим бота Get My ID  и запускаем, в ответ он пришлет вам ваш ID. Сохраняем его.

3. Переходим к 1С. Сама отправка сообщения достаточно проста:
 

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
TokenTelegramm=ПолучитьTokenTelegramm(); //"111111111:AAHEyAAbz2RpGAAkYlaN7ACyAAAARfi21sU"; 
Ресурс = "bot" + TokenTelegramm + "/sendMessage?chat_id=" + СтрЗаменить(Формат(IDUser, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text= " + Текст;
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);  
Если Ответ.КодСостояния=200 тогда
     Сообщить("Успешно");
Иначе
     Сообщить("Ошибка");
КонецЕсли;

В переменную TokenTelegramm надо записать наш Токен, В переменную IDUser указываем ID Пользователя, ну и Текст - всё, что хотим отправить пользователю.

Осталось только придумать, где хранить в базе TokenTelegramm и IDUser для каждого пользователя. Вы можете использовать для этого регистры сведений, справочники, дописать реквизиты в уже имеющиеся справочники и т.д.  В этом примере, чтобы не создавать новые объекты и реквизиты, использую встроенный механизм дополнительных реквизитов. Итак, в карточке организации добавляем новый доп.реквизит  с названием TokenTelegramm, тип реквизита строка (кто не в курсе: на форме справа сверху нажимаем ЕЩЕ и Изменить состав дополнительных реквизитов).


 

В карточке организации появится новый реквизит, в него и запишем наш токен.


 

Аналогично в справочник Пользователи добавим доп.Реквизит TelegrammID, тут будем хранить ID каждого пользователя. 

Осталось только обернуть все это в процедуру. Создадим общий модуль TG_Server и пропишем:
 

Процедура ОправитьСообщение(Текст,Получатель="") Экспорт 
	Мас=Новый Массив;
	Если ЗначениеЗаполнено(Получатель) тогда 
		Мас.Добавить(получатель);
	Иначе 
		Запрос=Новый Запрос("
		|ВЫБРАТЬ
		|	ПользователиДополнительныеРеквизиты.Значение КАК Значение
		|ИЗ
		|	Справочник.Пользователи.ДополнительныеРеквизиты КАК ПользователиДополнительныеРеквизиты
		|ГДЕ
		|	ПользователиДополнительныеРеквизиты.Свойство.Заголовок = ""TelegrammID""
		|	И НЕ ПользователиДополнительныеРеквизиты.Значение = """"
		|");
		Рез=Запрос.Выполнить().Выбрать();
		
		ПОка рез.Следующий() Цикл
			Мас.Добавить(СокрЛП(Рез.Значение));
		КонецЦикла;
	КонецЕсли;	
	
	Для Каждого IDUser из Мас Цикл	
		Попытка
			ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
			TokenTelegramm=ПолучитьTokenTelegramm(); //"111111111:AAHEyAAbz2RpGAAkYlaN7ACyAAAARfi21sU"; 
			Ресурс = "bot" + TokenTelegramm + "/sendMessage?chat_id=" + СтрЗаменить(Формат(IDUser, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text= " + Текст;
			Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,ЗащищенноеСоединение);
			Запрос = Новый HTTPЗапрос(Ресурс);
			Ответ = Соединение.Получить(Запрос);  
			Если Ответ.КодСостояния=200 тогда
				рег=РегистрыСведений.TG_ОтправленныеСообщения.СоздатьМенеджерЗаписи();
				Рег.TelegrammID=IDUser;
				рег.Сообщение=Текст;
				Рег.Записать(Истина);
			КонецЕсли;	
		Исключение   
			//Сообщить(ОписаниеОшибки());
		КонецПопытки;
	КонецЦикла;	
КонецПроцедуры	

Функция ПолучитьTokenTelegramm()
	Запрос=Новый Запрос("
	|ВЫБРАТЬ
	|	ОрганизацииДополнительныеРеквизиты.Значение КАК Значение
	|ИЗ
	|	Справочник.Организации.ДополнительныеРеквизиты КАК ОрганизацииДополнительныеРеквизиты
	|ГДЕ
	|	ОрганизацииДополнительныеРеквизиты.Свойство.Заголовок = &Заголовок
	|");      
	Запрос.УстановитьПараметр("Заголовок","TokenTelegramm");
	Рез=Запрос.Выполнить().Выбрать();
	
	Если Рез.Следующий() тогда 
		Возврат Рез.значение;
	иначе 
		Возврат "";
	КонецЕсли;	
		
	
КонецФункции	

Думаю, тут все понятно, но поясню: в процедуру передается текст сообщения и пользователь получатель, если получатель не указан, сообщение уйдет всем. Из доп. реквизитов вытаскиваем Токен и ID получателей.

Ну и еще процедура для завершения. При записи нового заказа клиента идет оповещение в телеграм

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	Если ЭтоНовый() Тогда 
		TG_Сервер.ОправитьСообщение("Оформлен новый заказ №"+ЭтотОбъект["Номер"], Пользователи.ТекущийПользователь());
	КонецЕсли;	
КонецПроцедуры

Готово. Теперь можете сами придумать, откуда и какие сообщения рассылать.

И последнее, в телеграмме находим своего бота через поиск МояОрганизация_bot и подключаемся к нему.

В приложении  расширение с данным решением для УНФ 1.5.4.34 Тестировалось на платформе 8.3.20.1613.

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

Наименование Файл Версия Размер
Шпаргалка для новичков. Самый простой пример создания Telegramm бота и отправка сообщений из 1С :

.cfe 26,23Kb
3
.cfe 26,23Kb 3 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. USR1CV8 12.08.22 04:13 Сейчас в теме
В картинках замазал токен, а в тексте нет.
3. KVIKS 176 12.08.22 09:31 Сейчас в теме
2. aleksey2 81 12.08.22 07:02 Сейчас в теме
как отправить список задач из формы "Задачи мне"
или список текущие дела из формы "Текущие дела" ?
4. KVIKS 176 12.08.22 09:32 Сейчас в теме
(2)Надо вытащить эти записи из регистра, сформировать сообщение и отправить, пример позже могу набросать
5. KVIKS 176 12.08.22 10:54 Сейчас в теме
(2)Вот например Так для УТ 11.4
Параметры=Новый Структура;                                     
АдресРезультата=ПоместитьВоВременноеХранилище(Неопределено);
ТекущиеДелаСлужебный.СформироватьСписокТекущихДелПользователя(Параметры,АдресРезультата); //Вызываем процедуру которая получит список Дел
ТЗ = ПолучитьИзВременногоХранилища(АдресРезультата);  Получим Таблицу из результата и переберем ее в цикле сформировав общий текст.
Текст="";
Для Каждого Стр из ТЗ Цикл
	Текст=Текст+Стр.Представление+Символы.ПС;
КонецЦикла;	
TG_Сервер.ОправитьСообщение(Текст, Пользователи.ТекущийПользователь());

Показать
sapervodichka; +1 Ответить
9. aleksey2 81 17.08.22 07:38 Сейчас в теме
(5)
Параметры=Новый Структура;


Поле объекта недоступно для записи (Параметры)
{ВнешняяОбработка.ЗадачиМне.Форма.Форма.Форма(9)}: Параметры=Новый Структура;
10. KVIKS 176 17.08.22 08:46 Сейчас в теме
(9)вместо переменной "параметры" придумайте свое название.
6. akR00b 21 15.08.22 15:30 Сейчас в теме
картинки из статьи не загружаются.
mihuilka; +1 Ответить
7. user613549_scratch_sv 16.08.22 10:19 Сейчас в теме
Ещё замечание.
Не стоит использовать Заголовок свойства дополнительного реквизита как идентификатор для поиска. Он не контролирует уникальность и разрешён для изменения пользователем.
Для это цели у Свойства есть Имя, которое заполняется на той же форме, что и Заголовок, в свёрнутой группе "Для разработчиков"
8. KVIKS 176 16.08.22 11:10 Сейчас в теме
(7)Согласен, у меня был старый релиз УНФ, в котором еще нет этого реквизита.
Оставьте свое сообщение

См. также

Обмен данными между базами 1С посредством передачи сообщений

Обмен между базами 1C Боты Платформа 1С v8.3 Абонемент ($m)

Разбор примера демо-реализации группового чата с использованием стороннего сервиса. Цель, - знакомство с некоторыми функциями платформы DESP. Вопросы эффективности и безопасности не затрагиваются. Исполняемый код серверной части платформы не представлен в данной публикации, но выполняется в "облаке", в демо-режиме.

1 стартмани

12.07.2022    1042    0    kodkraft    0    

Внешняя компонента на C# для парсинга страниц через Phantom JS на сервере 1С х32,х64

Инструментарий разработчика Разработка внешних компонент WEB-интеграция Боты Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

PhantomJS - это браузер без окна, используемый для автоматизации взаимодействия с веб-страницами. PhantomJS предоставляет JavaScript API, обеспечивающий автоматическую навигацию, снимки страницы, эмуляции поведение пользователя, что делает его распространенным инструментом, используемым для запуска модульных тестов на основе браузера в автономной системе, такой как среда непрерывной интеграции . PhantomJS основан на WebKit, что делает его похожей на Safari и Google Chrome средой просмотра. Это программное обеспечение с открытым исходным кодом, выпущенное под лицензией BSD.

1 стартмани

06.08.2020    9008    6    DrZombi    7    

Чат (Управляемое приложение 1С 8.2)

Работа с интерфейсом Боты Платформа 1С v8.3 Управляемые формы Россия Абонемент ($m)

Просто чат для 1С 8.2. Поставляется в виде самостоятельной конфигурации. Можно использовать как подсистему для своей конфигурации. Полная совместимость с конфигурациями, разработанными с применением библиотеки стандартных подсистем.

1 стартмани

08.11.2010    38888    869    Armando    39