Уведомления из сценариев Loginom при помощи Telegram
При разработке проектов часто возникает потребность в механизме уведомлений, т.е. оповещений о том или ином событии. В статье расскажем об одном из способов простой реализации механизма уведомлений в платформе Loginom при помощи чат-бота Telegram.
При реализации проектов часто возникает потребность в реализации механизма уведомлений, т.е. оповещения о том или ином событии. Типичный кейс выглядит следующим образом. Есть сценарий загрузки данных в хранилище из множества источников. При этом нет уверенности, что все данные будут загружены корректно. Это может происходить по множеству причин, например, из-за временно не работающего веб-сервиса или не сделанной вовремя выгрузки файлов.
Обычно проблемой является не столько отсутствие данных в хранилище, сколько незнание пользователей о возникшей ситуации. Если аналитик будет заранее оповещен о том, что при загрузке возникли проблемы, он сможет учитывать это в процессе принятия решений или отложить анализ до момента сбора всех данных. Если же пользователь в неведении относительно корректности загрузки, то он может принимать неверные решения на основе неполных данных, не зная о наличии проблемы.
Потребность в уведомлениях возникает часто, вот некоторые примеры:
- время выполнения процесса вышло за допустимые границы;
- модель машинного обучения была перестроена;
- складские остатки достигли минимально допустимых значений;
- резко возросло количество случаев мошенничества.
В подобных случаях правильно спроектированная система принятий решений должна оповещать пользователей о наличии проблемы. Лучше всего, чтобы это происходило без участия человека. Один из вариантов оповещения — автоматическая отправка заинтересованным лицам сообщения по электронной почте. Но в последние годы появился более удобный вариант — оповещение через мессенджеры.
Об одном из способов простой реализации механизма уведомлений в платформе Loginom при помощи чат-бота Telegram будет рассказано далее.
Схема работы
Для реализации этой механики необходимо выполнить следующие действия:
- Создать чат-бот
- Создать группу в Telegram
- Добавить в эту группу созданный бот и всех заинтересованных лиц
- Дать чат-боту права администратора в группе
- Настроить сценарий в Loginom, отправляющий через бот сообщение в группу при наступлении отслеживаемого события
Всё это можно реализовать без единой строчки кода. Для настройки потребуется только смартфон с Telegram и платформа Loginom. Причем всё, что будет описано далее можно реализовать даже в бесплатной редакции платформы.
Пройдем по шагам этот путь и покажем, как можно за пару минут настроить удобный механизм уведомлений.
Создание чат-бота
В Telegram находим BotFather и получаем описание доступных команд.
Бот для создания ботов
Выбираем команду /newbot и задаем название нового бота и уникальное имя (username), которое обязательно должно заканчиваться на «_bot».
Название бота — LoginomTest, уникальное имя (username) — loginom_bot
Необходимо сохранить токен, указанный в сообщении. В данном случае это «1944318437:AAErr0K4JSQ03ePdVdOpuikkTVjxsDyBzVA». Он нам в будущем потребуется.
Внимание! Не публикуйте нигде токен, он дает доступ к данным бота. Любой, у кого есть токен, сможет читать и отправлять сообщения от имени бота.
Создание группы
Далее необходимо создать группу, добавить в неё бот и тех пользователей, которые должны получать оповещения.
Последний шаг — сделать бота администратором группы.
Бот — администратор группы
Далее необходимо отправить любое сообщение в эту группу, например, «Hello bot» и набрать в строке браузера строку следующего вида:
https://api.telegram.org/bot<ТОКЕН>/getUpdates .
В нашем случае это строка
https://api.telegram.org/bot1944318437:AAErr0K4JSQ03ePdVdOpuikkTVjxsDyBzVA/getUpdates .
В результате будет получен ответ следующего вида:
В ответе интересует код -420930972 — это идентификатор группы, куда будут отправляться оповещения. Его необходимо сохранить для последующего использования в сценариях.
На этом подготовительная работа заканчивается. Далее необходимо настроить сценарий в Loginom.
Настройка сценария в Loginom
Нужно создать пакет в Loginom, перейти в подключения и создать подключение REST-сервис «Telegram REST-сервис».
В поле URL сервиса ввести строку вида:
https://api.telegram.org/bot<ТОКЕН>/sendMessage
что в нашем случае
https://api.telegram.org/bot1944318437:AAErr0K4JSQ03ePdVdOpuikkTVjxsDyBzVA/sendMessage
выбрать метод POST и content-Type запроса «application/json».
Перейдем в сценарий и перенесем на workflow узел Калькулятор (переменные). И создадим в нем 2 выражения:
| Имя | Метка | Тип | Значение |
|---|---|---|---|
| chat_id | ID чата | Строковый | «-420930972» |
| message | Сообщение | Строковый | «<""chat_id"": """ + chat_id + """, ""text"": ""Внимание событие""'>« |
В переменной message сформируется сообщение, которая будет отправляться в чат. В данном случае это «Внимание событие».
Т.к. обработчик REST-запрос принимает данные только в виде таблицы, надо использовать обработчик переменные в таблицу и выбрать вариант «в столбцы» — это способ преобразования по умолчанию.
Следующий шаг — перетащить обработчик REST-запрос и подать на вход ранее настроенное подключение к REST сервису и узел «Переменные в таблицу». Активизировать подключение «Telegram REST-сервис», запустить мастер настройки обработчика REST-запрос и связать поле «Сообщение» и полем «request/».
Полученный сценарий выглядит очень просто.

Сценарий интеграции Loginom с Telegram-ботом
Всё! Если выполнить этот сценарий, то в чате появится сообщение от бота.
Полученное сообщение от бота
В качестве примера можно рассмотреть типичный кейс использования подобного бота — оповещение о том, что загрузка данных прошла успешно.
Для этого рассмотрим простой сценарий:
- Импорт данных из источника
- Группировка
- Выгрузка результата в файл
- Отправка сообщения в чат
Сценарий выглядит следующим образом.

Выгрузка данных с последующим оповещением
В данном сценарии надо обратить внимание на пунктирную связь между узлом «Excel файл» и «REST-запрос». По умолчанию все сценарии в Loginom выполняются параллельно и поэтому, если явно не указывать последовательность выполнения, то отправка сообщения в чат будет осуществлена вне зависимости от того, завершится ли выгрузка в Excel или нет.
В Loginom есть возможность задать порядок выполнения сценария, связав узел «Excel файл» и «REST-запрос». В результате запрос будет отправлен только в случае, если корректно завершится выгрузка в файл.
Важно принимать во внимание следующее:
- Запрос к чат-боту будет отправляться с того компьютера, на котором выполняется сценарий, т.е. либо с рабочей станции, где установлен Loginom Desktop, либо с Loginom Server. Необходимо, чтобы на этой машине были открыты соответствующие порты и не было наложено каких-либо других ограничений на отправку REST-запросов.
- На работу чат-бота накладываются ограничения, например — не более одного сообщения в секунду и не более 20 сообщений в минуту в одну и ту же группу. Подробнее об ограничениях можно почитать в Bots FAQ.
Готовый компонент
Для облегчения работы с чат-ботом создан производный компонент — Telegram-bot. Принимающий на вход 3 переменные: token, chat_id и message_text. Для его применения достаточно всего лишь получить token, chat_id, как было продемонстрировано выше и написать сам тест сообщения.
Использование готового компонента интеграции Loginom с Telegram
Для применения надо подключить пакет к разработанному сценарию и воспользоваться готовым компонентом интеграции. Главное, не забыть получить token, chat_id и указать их значения во входных переменных.
Sending messages with Telegram bot
In this tutorial, we’re going to build a telegram bot ,and send messages to a group with a simple HTTP request.
to get start lets create a new telegram bot with, it’s own API Botfather.
One Bot To Rule Them All
so go to telegram app on your phone, or log in with telegram web
and then search for bot father.
create a new bot /newbot

now follow along with instructions.
type a name for your bot
I had a hard time finding a username

now you’ll get a token to authenticate with your bot. 
keep the access token securely. Anyone with access token can manipulate your bot
alright, now we have the access token. The next question is how to send messages with the bot.
we will create a group with our bot. And then our bot will massage to that group
it’s simple as that
now let’s create a new group in telegram and add the bot to that group.
search with the username of your bot

add our bot to the group

after adding give admin permission to our bot, to give access to the bot to send messages to the group (not all the permissions are necessary but I will give because this is a demo group and nothing harmful will happen ).

now everything is set in this end.
The next thing we need is to get our group chat id to send messages to the group.
to get it we need to interact with the telegram API.
i hope yall have postman ready. if not you can download postman , since it is a useful tool in web dev.
or alternatively, you can use postwoman which is a great way to build requests online.
before we sending requests, make sure to send some messages to our newly created group.
after that let’s fire up postman
send a POST request to the following telegram API endpoint.
replace with your access token we previously got from bot father
if you get something like this, try few more times. I don’t know the exact cause, but it sometimes returns empty arrays.(make sure you have some messages in the group)
Bot API v3. Автоматизируем работу в группах
С момента публикации предыдущего урока и по состоянию на момент написания этого, Telegram выпустил одно крупное обновление Bot API (3.0), а также несколько мелких (3.1-3.3). Сразу отмечу, ни отправка видеосообщений, ни платежи (по ним есть отличный пример в репозитории pyTelegramBotAPI), ни работа со стикерами рассмотрены не будут.
Удаляем сообщения
Начнём с того, что научим нашего бота в группе удалять сообщения, в которых есть ссылки. Добавим бота в группу и назначим его администратором с правом удаления и блокировки (пригодится позже).
Выдача прав боту
Дабы избежать неприятных ситуаций, нам необходимо определить две вещи: в какой именно группе он будет удалять сообщения и как отличить сообщения с ссылками от всех остальных? Для начала узнаем и запишем куда-нибудь ID нашей группы. А что делать с ссылками? Неужели нам придётся использовать регулярные выражения, создавая себе ещё одну проблему? Конечно, нет! Все «особые» элементы, будь то ссылки, @юзернеймы, команды ботов и т.д. складываются в массив entities в объекте Message , нам остаётся лишь проверить тип объекта и решить, удалять конкретное сообщение или нет. За последнее отвечает метод delete_message , принимающий на вход два аргумента: ID чата и ID сообщения.
Перейдём непосредственно к коду. Дабы упростить себе жизнь, зададим нужные условия срабатывания (нужный ID чата и непустой массив entities) сразу в хэндлер, это сэкономит нам несколько лишних проверок.
Запустим бота и попробуем отправить сообщение с ссылкой. Если вы всё сделали правильно, оно мгновенно исчезнет и в разделе «Недавние действия» (Recent Actions) появится запись об удалённом сообщении.
Сообщение удалено
Точно так же можно сделать удаление чего угодно: стикеров, репостов из неугодных каналов, матерных сообщений и т.д. Возможности (почти) безграничны!
Read-Only и прочие «мягкие» наказания
Представьте, что у вас есть группа, например, “Международный клуб любителей мяса”, в котором люди на разных языках делятся своими впечатлениями от поедания свинины, говядины, баранины и т.д.
Конечно, время от времени в чатик будут приходить вегетарианцы и высказывать недовольство, но так как мы терпеливые люди, не будем банить веганов, а просто запретим им писать сообщения некоторое время, дабы они успокоились и вели дискуссию в рамках тематики чата. Усложним себе задачу и будем оповещать пользователей о временном ограничении прав, исходя из их языковой принадлежности.
Начиная с Telegram 4.1, у администраторов групп появилась возможность точечно настраивать права и ограничения пользователей. В Bot API за операцию ограничения ответственен метод restrict_chat_member , принимающий на вход ID чата, ID юзера, список ограничений, а также параметр until_date со значением времени (Unix Time), до которого эти ограничения действуют, причём если указать время с разницей меньше 30 секунд или больше 366 дней от текущего, Telegram воспринимает это, как «навсегда». В нашем случае Read-Only режим будет выдаваться на 10 минут, т.е. 600 секунд.
Давайте теперь разберёмся, на каком языке отвечать пользователю. В объекте User есть поле language_code , содержащее языковую метку пользователя. Не всё так просто, ведь в зависимости от настроек системы и местоположения пользователя, его языковая метка может быть ru , en-GB , en-US или вообще какой-нибудь nan-Hant-TW . Подробно о строении таких меток можно прочесть здесь. В нашем случае задача немного упрощается, т.к. нам нужен только первый элемент (сам язык), независимо от региона (будем считать, к примеру, что «английский» английский и американский английский для нас одинаковы). Напишем наипростейшую определялку языка, которая будет возвращать ru для русского языка и en для всех остальных. В реальной жизни, конечно, стоит сделать поддержку большего числа языков.
И подготовим небольшой JSON со строками:
Теперь напишем обработчик, который будет реагировать на набор фраз, выдавать режим Read-Only пользователю на 10 минут и уведомлять его на родном языке. Не забудьте импортировать метод time из одноимённого модуля!
Запустим бота и попросим людей с разными language_code выступить в роли противников мяса:
Бот-полиглот
Заключение
В этом уроке мы кратко ознакомились с новыми фишками третьей версии Telegram Bot API, научились удалять сообщения, если они соответствуют одному из заданных критериев и научились «мягко» ограничивать пользователей, не удаляя их из группы. Помимо restrict_chat_member существует метод promote_chat_member для наделения пользователя определёнными администраторскими правами, он остаётся для самостоятельного изучения.