Автоматизация настройки Telegram-оповещений на базе Power BI

Автоматизация настройки Telegram-оповещений на базе Power BI

Тема оповещений в Telegram на базе Power BI меня заинтересовала. В первой статье про телеграм-ботов я рассказал как настроить бота вручную и какие правила нужно соблюдать. Но писать или даже корректировать код вручную довольно сложно. Так что мне пришла идея сделать сервис, который сможет создавать ботов на базе Power BI автоматически.

Что хотелось реализовать? Во первых хотелось загружать в сервис уже готовые табличные запросы из отчётов Power BI (потому что они уже готовы). Во вторых хотелось вычислять на их основе переменные, считая сумму по столбцу (с использованием условий фильтрации). В третьих нужна была возможность создавать новые переменные на основе других (умножить, разделить, итд). 

Ну и конечно не обошлось без условий - никому не интересно получать одинаковое сообщение каждый день, хочется делать разный текст в зависимости от текущего значения переменной;)

То, что получилось, находится здесь: http://directprotools.ru/telegram. Я еще запишу подробное видео, но хочу рассказать как пользоваться сервисом уже сейчас. В настоящий момент сервис бесплатный, но со временем планируется как платный продукт.

Сервис поделён на 3 блока: 
- блок сообщения (расположен слева), 
- блок переменных (находится по центру),
- блок условий (справа).

Сообщение

В левом блоке вы по кусочком собираете текст сообщения, которое нужно отправить пользователю. Есть 3 типа элемента: текст, перенос строки и переменная. Перенос строки - тоже вид текста, но для удобства вынес его отдельно. Кстати можно делать одинарный, двойной и даже тройной переносы. Переменная - это уже число, переведённое в текст. Из этих трёх блоков и строится сообщение:

Переменные

Чтобы сообщение содержало полезную информацию, нам нужны переменные (в нашем примере переменная называется CPC - так обозначают стоимость клика). У переменных есть тоже 3 типа: из отчёта, из таблицы и расчётная переменная. 

Если вы хотите загрузить из отчёта табличные запросы и по ним считать разные переменные, это можно сделать с помощью переменной "Из отчёта". Выделяете в Power Query нужные запросы, нажимаете ctrl+С, переходите в поле "Из отчёта" и вставляете ctrl+V. 

После нажатия на кнопку "Извлечь" запросы будут подгружены в бота. 
Их можно использовать для расчёта переменных "Из таблицы". 

Приведу пример - у вас есть таблица с показами, кликами и расходами (таблица ЯндексДирект). К ней прилагается функция yandex, с помощью которой мы забираем данные по нашим показателям из Яндекс Директа.

Для расчёта каждого из этих показателей (Показы, Клики или Расход) нужно создать переменную "Из таблицы" и просуммировать выбранный столбец таблицы ЯндексДирект.

Затем можно добавить расчётную переменную, например для расчёта стоимости клика (CPC = Расход/Клики). И вот у нас уже есть табличка ЯндексДирект и несколько вычисляемых из неё переменных:

Если вам нужно посчитать Клики и Расход только для некоторых кампаний, тут подойдут стандартные фильтрационные выражения, которые обычно пишутся после each. Такой фильтр можно указать под переменной. Например, у меня есть столбец "Кампания" и я хочу учитывать кампании, содержащие "rsya":

При этом у каждой переменной есть округление: до целых, до 1-3 знаков после запятой или вообще без округления. Переменные из отчёта обычно не округляют, поскольку это таблицы. А вот переменные из таблиц или расчётные - как раз можно. Бывает нужно загрузить из отчёта числовую переменную - это тоже не проблема, её как раз можно округлить. 

Условия

Как отправлять разные сообщения в зависимости от значения переменных? Всё просто: вы создаёте условие, что стоимость клика больше 10 рублей и по этому условию отправляете определённый текст. А если условие не выполнилось - можно отправить другой текст или просто ничего не отправлять. В правом блоке как раз и задаётся набор условий:

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

Красный значок будет зажигаться только если стоимость клика больше 10 рублей, а зелёный - если она меньше.

Условие может быть комплексным, например мы хотим, CPC > 10 рублей И Расход >1000 рублей: 

Вместо И можно выставить ИЛИ если хотите. Но самое интересное - вы можете использовать условия в других условиях:

Запись Cond 1 = false будет означать, что условие 1 не выполнено. Но самое удобное, что слово false можно вообще не писать. Алгоритм поймёт вас и так, подставив false вместо пустого значения: 

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

Кнопки управления

Кнопки "По шагам" и "Скачать код" позволяют скачать файл с кодом готового бота. Кнопка "По шагам" бывает крайне полезна когда нужно пройтись по шагам и посмотреть что не работает, но пошаговый код не гарантирует онлайн-обновления. А вот кнопка "Скачать код" позволяет получить работающего бота, который должен корректно обновляться в Power BI Service. 

Полученный код можно вставить в отчёт и настроить его обновление в Power BI Service. Также можно выгрузить код в поток данных. В потоке обычно приходится создавать 2 запроса, чтобы всё работало - один со ссылкой на другой. Запрос бота существует только внутри потока, а вот ссылающийся на него запрос выгружается наружу. Это позволяет обойти проблемы с сохранением потока. 

Если вы сделали бота, выгрузили его, а через пару дней захотели что-то добавить - это возможно. Изначально сервис загружается пустым, но есть специальная кнопка "Из готового бота", которая позволяет восстановить все элементы из кода бота. Если у вас есть выгрузка бота, вам не придётся создавать его снова - можно загрузить последний вариант и доделать прямо в сервисе. 

Не забудьте указать ID пользователя, которому нужно отправлять сообщения (Собеседник), а также ID бота и его токен, которые вам выдаёт BotFather:

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

Буду рад вашим комментариям по сервису: http://directprotools.ru/telegram

Комментарии