Отправка сообщений через Telegram-бота из скрипта загрузки

В настоящий момент базовая версия Qlik Sense Enterprise имеет крайне небогатый функционал рассылки оповещений. А точнее, он вообще отсутствует.

В линейке продуктов присутствует такая вещь как Qlik Alerting, но он не везде подходит в виду своей стоимости и области применения (оповещения на основе данных из приложений). Поэтому для налаживания оперативных оповещений, нам придется использовать сторонние решения. Одно из них — боты Telegram.

Использование Telegram-ботов хорошо тем, что его можно начать без осваивания кликовского API, а также без установки дополнительных коннекторов. Поэтому, давайте начинать.

Создание Telegram-бота

Прежде всего, вам нужно добавить в Telegram в список контактов бота BotFather. Это служба, которая отвечает за создание новых ботов.

Пишем в чат с BotFather команду /newbot. После этого нас попросят указать имя нового бота. Оно должно заканчиваться на _bot (строчными буквами).

В случае успеха, вы увидите сообщение с токеном вашего бота (комбинацию цифр и букв). Она будет нужна для отправки сообщений через вашего бота.

Собственно, на этом все.

Отправка сообщений из скрипта

Для отправки сообщения из скрипта нужно использовать нижеприведенный код, и запустить загрузку данных.

set vTBot_Token=; //Токен бота
set vTBot_ChatID=; //ИД чата или получателя
set vWebConnection=; //Название любого подключения с типом Web-файл на сервере Qlik
set vTBot_Message=; //Текст сообщения, %0A - перенос строки

TG_Message:
LOAD
1
FROM [lib://$(vWebConnection)]
(url is [https://api.telegram.org/bot$(vTBot_Token)/sendMessage?chat_id=$(vTBot_ChatID)&text=$(vTBot_Message)&parse_mode=HTML]);

drop table TG_Message;

//Очистка переменных, чтобы не отображать их в визуальном слое
set vTBot_Token=;
set vTBot_ChatID=;
set vTBot_Message=;
set vTBot_Message=;

Чтобы обращаться к Telegram, вам потребуется создать подключение к данным с типом web-файл к любому адресу, хоть к https://yandex.ru. Т.к. URL для обращения мы будем передавать через параметр URL IS, в котором для коннекта к web-файлу можно указать совершенно любой адрес.

Забавный факт — обращение к URL не только приводит к загрузке данных из него, но и позволяет инициировать действия во внешней системе. Мы специально указываем цифру 1 как поле в загрузке таблицы TG_Message, чтобы Qlik мог выполнить обращение к адресу, ничего при этом из него не загружая.

Если вам интересно, то в ответ отдается Json-строка с информацией об отправленном сообщении. Но мы не будет тратить время на ее разбор.

Откуда взять ID чата или пользователя? Рекомендую использовать этого бота:

У него можно узнать собственный ИД. Чтобы узнать ИД чата, нужно добавить в него бота и обратиться с командой /getgroupid.

Интересный факт — в Telegram ИД чатов начинаются со знака «-«

Добавьте вашего бота себе в контакты, пропишите все необходимые параметры и запустите скрипт. Вы должны получить сообщение от бота.

Примеры использования

Мониторинг сбоев в заданиях обновления данных.

Создайте приложение с названием типа Task Control. В него разместите скрипт отправки сообщения с текстом типа «Сбой обновления данных, проверьте <ссылка на раздел тасков в QMC>».

Создайте для приложения Task Control задачу на обновление данных.

В качестве триггеров укажите неуспешные выполнения тасков, которые вы хотите мониторить. На каждый таск нужно создавать отдельный триггер, иначе клик будет проверять одновременный провал всех тасков в триггере. а этого не случатся, т.к. цепочка остановится после первого провала.

Прописываем таск для мониторинга в триггере
Создаем отдельный триггер для каждого таска

Теперь в случае завершения таска с ошибкой вы получите сообщение такого вида:

Это самый оперативный способ получения информации о сбое ровно в тот момент, когда он случится.

Мониторинг полноты данных в источнике

При работе с облачными сервисами распространена практика выгрузки данных через API в промежуточную базу, откуда они потом сохраняются в QVD-файл. Иногда API-механизмы сбоят, что может привести к наличию в промежуточной базе только части данных.

Дальнейшая загрузка этих данных приведет к недостоверной картине в аналитике, и бизнес пользователя начнут вам писать что-то вроде «ВАШ Qlik опять сломался».

Чтобы этого не происходило, можно перед перезаписью QVD-файла сравнивать кол-во записей в нем на данный момент, и кол-во данных в источнике. Если данных в источнике меньше чем X% от того что есть в QVD, то загрузка данных из источника пропускается. При этом, вы можете отправлять себе сигнальные сообщения об этих инцидентах.

Вот например как выглядела перезапись из медленного API данных с нуля. Первое число — сколько записей в QVD, второе — сколько записей в БД.

При этом пользователи продолжают работать с самой полной версией данных, хоть и слегка неактуальной.

Рассылка информации по списку пользователей

Несомненно, вы уже подумали об организации рассылок оповещений через Telegram. Это можно реализовать через скрипт, хотя и не очень удобно — ведь вам придется средствами скрипта сгенерировать полный текст сообщения для каждого получателя. А значит, придется делать кучу джойнов и агрегирований.

Однако для MVP оповещений это весьма удобной вариант, т.к. позволяет гарантированно получить результат в предсказуемые сроки (в отличие от поднятия доп. сервисов, API-интеграций и прочего шаманства).

В общем механика такая: вам сначала нужно будет собрать таблицу, в которой каждая строка — это текст сообщения и ИД получателя, а после пройтись по этой таблице скриптом отправки сообщения через цикл. Структура скрипта может быть примерно такой:

Т.е. у нас есть таблица Messages с сообщениями, где каждое сообщение пронумеровано по номеру строки, в поле M_ID.

Дальше идем в цикле по значениям этого поля, при этом в качестве переменных получателя и сообщения через функцию peek забираем значения этих полей в соответствующей M_ID строке. Внутри Peek() вычитаем единицу от M_ID, т.к. нумерация строк в этой функции начинается с 0.

Заключение

Как видите, с помощью оповещений через Telegram очень легко повысить свою осведомленность о состоянии дел на сервере Qlik. Обязательно используйте эту механику, чтобы узнавать о нужных событиях до того, как вам начнут жаловаться пользователи.

А также, предусматривайте в своих скриптах сценарии реакции на нештатные ситуации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *