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

11.08.22

Интеграция - Мессенджеры и боты

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Шпаргалка для новичков. Самый простой пример создания Telegramm бота и отправка сообщений из 1С :
.cfe 26,23Kb
29
29 Скачать (1 SM) Купить за 1 850 руб.

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

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.

telegrmm bot новичек.

См. также

Мессенджеры и боты Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция мессенджера WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

15600 руб.

23.06.2023    9484    58    12    

34

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 1С:Конвертация данных Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 руб.

27.12.2021    38199    108    161    

201

SALE! 25%

Мессенджеры и боты Системный администратор Программист Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С - конструктор чат-ботов в Телеграм.

15000 11250 руб.

18.06.2021    65567    312    272    

369

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    30270    35    49    

71

Мессенджеры и боты Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Данное расширение представляет собой интерфейс взаимодействия 1С с сервисом Wazzup. Данный сервис позволяет вести беседу с использованием номера телефона, привязанного к Whatsapp. Почитать о сервисе и его условиях использования можно по ссылке https://wazzup24.com/. На данный момент расширение поддерживает почти все доступные через API функции. Обновление от 19.05.2023, версия 2.1!

14400 руб.

30.11.2020    13595    8    13    

15

Мессенджеры и боты SMS рассылки Платформа 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Решение реализовано в виде расширения. Заменяет отправку смс на отправку в WhatsApp через Green-api. Отправка чека картинкой.

7800 руб.

15.05.2024    1544    3    6    

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

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


Поле объекта недоступно для записи (Параметры)
{ВнешняяОбработка.ЗадачиМне.Форма.Форма.Форма(9)}: Параметры=Новый Структура;
10. KVIKS 425 17.08.22 08:46 Сейчас в теме
(9)вместо переменной "параметры" придумайте свое название.
6. akR00b 24 15.08.22 15:30 Сейчас в теме
картинки из статьи не загружаются.
mihuilka; +1 Ответить
7. user613549_scratch_sv 16.08.22 10:19 Сейчас в теме
Ещё замечание.
Не стоит использовать Заголовок свойства дополнительного реквизита как идентификатор для поиска. Он не контролирует уникальность и разрешён для изменения пользователем.
Для это цели у Свойства есть Имя, которое заполняется на той же форме, что и Заголовок, в свёрнутой группе "Для разработчиков"
G_101689065488872646269; akR00b; +2 Ответить
8. KVIKS 425 16.08.22 11:10 Сейчас в теме
(7)Согласен, у меня был старый релиз УНФ, в котором еще нет этого реквизита.
11. KHoroshulinAV 174 20.04.23 18:25 Сейчас в теме
Коллеги можно ещё проще: отправлять уведомления в мобильном приложении. И другие данные и даже отчёты Дзен MIE
или публикация инфостарт Инфостарт MIE
12. EsaDyv 16 04.05.23 10:22 Сейчас в теме
В чем проблема может быть если Ответ.КодСостояния = 400
13. KVIKS 425 04.05.23 10:37 Сейчас в теме
(12)
КодСостояния = 400

код ответа, который означает, что сервер не смог обработать запрос. Возможно запрос собран не правильно или там неполадки на сервере
14. EsaDyv 16 04.05.23 10:51 Сейчас в теме
(13)
Возможно запрос собран не

А как можно проверить, что с запросом все нормально?
15. EsaDyv 16 04.05.23 10:54 Сейчас в теме
(14)
Вроде все подбирает и IDUser и TokenTelegramm
17. KVIKS 425 04.05.23 11:35 Сейчас в теме
(15)
может сам ресурс api.telegram.org не доступен у вас?
16. KVIKS 425 04.05.23 11:20 Сейчас в теме
(15)
У меня такая строка тестовая:
bot+ТОкен+/sendMessage?chat_id=+ID+&text= Привет, я новый бот, буду присылать сообщения.
Работает. может не тот токен или ID или вы не подключились в телеге к своему боту
18. aster-x 03.11.23 20:58 Сейчас в теме
А как можно вывести сообщение с кнопками и ловить нажатие на кнопки?
19. KVIKS 425 03.11.23 21:27 Сейчас в теме
(18)Рекомендую ознакомится с этим https://infostart.ru/1c/articles/1951756/
user624610_rt0107; +1 Ответить
20. user682398_paul_candle 2 02.04.24 10:02 Сейчас в теме
Нужно еще учитывать, что Телеграмм не дает отправлять больше 1 сообщения в секунду и не более 30 сообщений в минуту. Иначе не все сообщения дойдут.
21. user2064719 09.04.24 13:00 Сейчас в теме
А вместо IDUser нужно использовать ID телеграмм пользователя в строковом типе или числовом
У меня просто что то не получается
22. KVIKS 425 09.04.24 13:34 Сейчас в теме
23. user2064719 09.04.24 14:41 Сейчас в теме
IDUser = "5510585095";
Ресурс = "bot" + TokenTelegramm + "/sendMessage?chat_id=" + СтрЗаменить(Формат(IDUser, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text= " + "Hellow";
Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,ЗащищенноеСоединение);
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);

А
вот так должно работать?
24. user2064719 09.04.24 14:52 Сейчас в теме
у мен вот такая ошибка
{Документ.ЗаказПокупателя.Форма.ФормаСписка.Форма(303)}: Ошибка при вызове метода контекста (Получить)
Ответ = Соединение.Получить(Запрос);
по причине:
Ошибка работы с Интернет: Ошибка инициализации SSL-соединения
25. KVIKS 425 09.04.24 15:15 Сейчас в теме
(24) Это ошибка защищенного соединения, а код полностью рабочий, Проверил только что.
Попытка
			ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
			TokenTelegramm=ПолучитьTokenTelegramm(); 
			Ресурс = "bot" + TokenTelegramm + "/sendMessage?chat_id=" + СтрЗаменить(Формат(IDUser, "ЧДЦ=; ЧС=; ЧРГ=."), ".", "") + "&text= " + Текст;
			Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,ЗащищенноеСоединение);
			Запрос = Новый HTTPЗапрос(Ресурс);
			Ответ = Соединение.Получить(Запрос);  
			Если Ответ.КодСостояния=200 тогда
				Сообщить("ОК");
			КонецЕсли;	
		Исключение   
			Сообщить(ОписаниеОшибки());
		КонецПопытки;
Показать
26. user2064719 09.04.24 15:22 Сейчас в теме
(25) А что можно сделать чтоб исправить эту ошибку?
27. KVIKS 425 09.04.24 15:56 Сейчас в теме
(26) Вот что ИТС пишет
Ошибка инициализации SSL-соединения
Номер карточки: SD0004276
Ошибка инициализации SSL возникает в случае, когда платформа по каким-то причинам не может установить соединение с сервером. Соединение может блокироваться антивирусами, сетевыми экранами, прокси. Платформа не может повлиять на такие блокировки.

Проверить, что ошибка связана именно с невозможностью установить соединение можно с помощью WireShark - если соединение устанавливается, но при этом возникает ошибка протокола, то будут записи о доступе к серверу (минимум одна, а реально больше). Если такое соединение невозможно установить, то записей в логах не будет совсем.
28. user2064719 09.04.24 16:37 Сейчас в теме
(27)А если убрать строку с защищенном соединением то работать не будет?
29. Yury1001 1472 16.05.24 14:40 Сейчас в теме
Спасибо, работает отлично
Если кому нужно для 7.7 или любой другой программы, способной выполнить командную строку, вот:
curl --ssl-no-revoke -v -X POST --silent --output /dev/null https://api.telegram.org/bot111111111:AAHEyAAbz2RpGAAkYlaN7ACyAAAARfi21sU/sendMessage -d chat_id=111222333 -d text="Текст сообщения"
только токен и ID замените на свой
30. boldinov 29.09.24 15:06 Сейчас в теме
Не работает, пишет {"ok":false,"error_code":400,"description":"Bad Request: chat not found"}
31. KVIKS 425 29.09.24 17:36 Сейчас в теме
(30)
Bad Request: chat not found

Либо несуществующий chat_id передаёте, либо бот в этом чате (который передаете) не запущен. Если вы хотите отправить кому-то сообщение, кто знать не знает ничего про бота - ничего не выйдет. Первым общение начинает пользователь
32. boldinov 29.09.24 21:21 Сейчас в теме
(31) id получен из get my id, возращает не id чата, а пользователя, чат сделал отдельно добавил туда пользователя и бота, боту дал все права в чате, бот стратанул. Все равно никто никого не видит
33. KVIKS 425 29.09.24 21:56 Сейчас в теме
(32) В этом примере рассматривается отправка ботом пользователю напрямую, без всяких общих чатов и групп. Пользователь должен найти вашего бота и стартует его у себя, тогда бот сможет отправлять сообщения вашему пользователю.
34. boldinov 30.09.24 00:40 Сейчас в теме
(33) В том то и дело, что никак не работает, ни пользователю напрямую, никак либо по другому. Сделал все по инструкции плюс еще добавил чат и права боту, получил ошибку.
35. KVIKS 425 30.09.24 00:52 Сейчас в теме
(34) Значит все таки что то сделано не по инструкции.
вот свежий скрин, мне бот присылает данные с ozon.
Прикрепленные файлы:
Оставьте свое сообщение