Отправка текстового файла при помощи чат-бота в Telegram (JavaScript)

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

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

В данном примере использованы статистические данные по регионам за несколько лет. Регионы обозначены при помощи кода ГАИ.

Примечание: Демопример имеет ограничение демонстрации всех возможностей при запуске на демостенде (Запустить демо). Рекомендуем установить пример локально.

Запустить демо

Установить локально

Начальная подготовка

Подготовка в Telegram
  1. В Telegram необходимо найти BotFather и получить описание доступных команд.

  2. Выбрать команду /newbot и задать название нового бота и уникальное имя (username), которое обязательно должно заканчиваться на «_bot».

  3. Cохранить токен, указанный в сообщении. В данном случае это 5********5:A*********************************M. Он потребуется на следующих этапах.

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

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

  5. Выдать боту роль администратора группы.

  6. Отправить любое сообщение в эту группу, например, «Hello bot», и набрать в браузере строку следующего вида:

    https://api.telegram.org/botТОКЕН/getUpdates.

    В данном примере это строка:

    https://api.telegram.org/bot5********5:A**********************************M/getUpdates.

    В результате будет получен ответ:

    {"ok":true,"result":[{"update_id":4*******5, "message":{"message_id":*,"from":{"id":2********0,... ... ...},"chat":{"id":-6*******6,"title": ... ... ... "all_members_are_administrators":true},"date":1********1,"text":"hello bot"}}]}

    В ответе интересует код -6*******6 — это идентификатор группы, куда будут отправляться оповещения. Его необходимо сохранить для последующего использования в сценариях.

Описание алгоритма

1. Задание значений переменных

Полученные токен и идентификатор группы задаются в качестве значений переменных в порту Переменные пользователя. Там же задаются Коды регионов, данные по которым требуется отправить в виде текстового файла. Значение переменной Коды регионов задается строкой, через запятую, в виде кодов регионов по классификации ГАИ.

Имя Метка Значение
 token Tокен 5********5:A*********************************M
 chat_id Идентификатор чата -6*******6
 region_code Коды регионов 2,53,66

2. Импорт данных

Загрузка данных

В подмодели Импорт данных по регионам осуществляется импорт данных из двух Excel-файлов: Все регионы — справочник, который содержит наименования регионов и код ГАИ и Данные по годам — статистическая выборка данных по годам для ряда регионов.

К данным статистической выборки по годам присоединяются поля из справочника регионов. В мастере настройки узла Слияние заданы следующие параметры:

  • Тип операции - Левое соединение
  • Ключевое поле - Код ГАИ

3. Подготовка данных

Подготовка данных

В подмодели Подготовка данных происходит преобразование данных переменной Коды регионов из строки в табличный вид. Операция осуществляется при помощи узла Разделитель строк (переменные) из библиотеки Loginom Silver Kit и узла Параметры полей.

На входном порту узла Разделитель строк (переменные) установлено соответствие полей Коды регионов и Входная строка, а также задана запятая в качестве разделитея.

При помощи узла Параметры полей исключается ненужное далее поле – ID части строки.

При помощи узла Слияние выполняется Левое соединение двух результирующих таблиц по ключевому полю Коды регионов (Код ГАИ).

Таким образом, формируется таблица с данными по интересующим нас регионам.

4. Экспорт данных и отправка файлов в Telegram

Отправка в Telegram нескольких файлов с данными по регионам возможна только после настройки механизма отправки файла по одному региону.

а) Отправка данных по региону

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

Отфильтрованные данные подаются на вход подмодели Отправка по одному региону.

В узле Таблица в переменные происходит отбор названия региона и его кода. Эти данные используются далее в узле Калькулятор (переменные) для формирования переменных: file_name, path, а также message_text.

  • Переменная file_name формируется при помощи строковой функции Concat из текущей даты (на момент запуска сценария), кода региона, наименования региона и расширения .txt. Если регион по заданному коду не был найден, то вместо наименования региона происходит подстановка строки "Регион не найден".
  • Переменная path формируется аналогичным образом: Concat("Reports\",file_name), где "Reports\" - файловая директория, куда необходимо сохранить отчет. Таким образом, готовые отчеты помещаются в папку Reports. При необходимости можно изменить путь, по которому будет произведен экспорт.
  • Переменная message_text формируется следующим образом: Concat("Отчет: ", Naimenovanie_subyekta, " ", region_code).

Переменные подаются на узел Экспорт данных и определяют имя и путь сохранения файла. Также они необходимы для работы узла Отправка файла, в котором реализован скрипт отправки файла в Telegram на языке JavaScript.

Чтобы отправка файла выполнялась только после завершения экспорта в текстовый файл, между узлами Экспорт данных и Отправка файла настроена Последовательность выполнения при помощи Портов порядка выполнения.

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

Примечание: Запрос к чат-боту будет отправляться с того компьютера, на котором выполняется сценарий, т.е. либо с рабочей станции, где установлен Loginom Desktop, либо с Loginom Server. Необходимо, чтобы на этой машине были открыты соответствующие порты и отсутствовали какие-либо другие ограничения на отправку REST-запросов. Также на работу чат-бота накладываются ограничения, например, не более одного сообщения в секунду и не более 20 сообщений в минуту в одну и ту же группу. Подробнее об ограничениях можно почитать в Bots FAQ.

б) Множественная отправка

Для отправки нескольких файлов использован компонент Цикл, настроенный на выполнение подмодели Отправка по одному региону.

Параметры настройки Цикла:

  • Вид цикла - Групповая обработка
  • Вид групповой обработки - Разбиение по уникальным значениям полей (выбрано поле Коды регионов)

5. Отправка итогового отчета

Отправка итогового отчета

Принцип работы аналогичен подмодели Отправка по одному региону. Данная подмодель выгружает один итоговый файл с данными по всем регионам, выбранным для анализа.

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


Уведомления в Loginom при помощи чат-бота Telegram

Скачайте и откройте файл в Loginom. При необходимости Loginom CE можно скачать бесплатно

Скачать демопример

Минимальные требования к системе:

  • Операционная система: Windows 10 и выше
  • CPU x64: 2 core 1
  • Оперативная память: 4 GB
  • Жесткий диск: 10 GB

1 Поддерживается работа на x64 процессорах Intel Core, AMD FX и более новых, содержащих инструкции SSE4.2 (POPCNT, LZCNT).