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