Ramos и Telegram. Робот – диспетчер

Предисловие «Джек и бобовый стебель»

В одной из предыдущих статей я как-то краем касался нашей системы диспетчеризации Conteg Ramos. Чехи сделали неплохое решение (хотя если копнуть глубже, то окажется, что они его нагло слизали у другой компании), но не озаботились подробными мануалами на некоторые её функции. Ну оно и понятно, системы диспетчеризации – не основной вид деятельности компании, а писать грамотные мануалы часто сильно сложнее, чем выпустить сам прибор. Так или иначе, если уметь работать протезом мозга головой, и иметь правильный радиус кривизны рук, то можно разобраться и самому. Благо в поисковиках ещё никого не забанили. А если Вы, дорогие мои читатели, нашли эту статью – это ещё раз подтверждает данный тезис.

И так, после запуска нового комплекса в нашем маленьком телевидении прошло пару лет. За это время комплекс обрастал нужными плюшками, переделывался, модернизировался и адаптировался под местные условия. Эта участь не обошла и его часть диспетчеризации.

Conteg pro server

Она так же подминала под себя всё больше узлов и точек контроля и всё больше людей нужно было извещать о состоянии этих точек. И вот, в один прекрасный день, отрыгнул GSM модем. Ну как… Не то, что бы он совсем испустил волшебный дым, на котором работает вся электроника, но начал пропускать отправку СМС. Немного покурив логи, понимание проблемы не пришло. То ли очередь из более чем двух сообщений валилась, то ли USB похрюкивал, не ясно. Но стало ясно другое: интернета сейчас много быстрого да с резервированием, мессенджеров на любой вкус и цвет… Пора переходить в кибер пространство. Тем более что к тому времени у нас уже была группа в Телеграм для технического персонала и процентов 70-80 технарей её осилили. Ну что же, значит Ramos переезжает туда.

Глава 1 «Автоматон и телега»

Почитав эти наши интернеты, я выяснил, что для осуществления столь хитрого плана нам потребуется телеграм бот. Такой своего рода виртуальный аккаунт привязанный к хозяину, т.е. нашему аккаунту.
Из документации телеграм:

«Боты — специальные аккаунты в Telegram, созданные для того, чтобы автоматически обрабатывать и отправлять сообщения. Пользователи могут взаимодействовать с ботами при помощи сообщений, отправляемых через обычные или групповые чаты. Логика бота контролируется при помощи HTTPS запросов к нашему API для ботов.»


Ну ок, тут всё просто: идем в телегу и разыскиваем там @BotFather.

Botfather

Это так называемый БотОтец. Он создает БотСынов. Он ими же и управляет (при помощи ботаДуха наверное), а при случае и убить может. Хм… знакомая концепция. Ну да ладно, находим папаню и начинаем с ним чат:

  • (/newbot) О великий и могучий БотОтец, создай мне БотСына по образу и подобию?
  • Какое имя ты выберешь для него?
  • Я нареку его %name% (следует придумать имя)
  • Хорошо, а как к нему будут обращаться другие? Учти, что название должно оканчиваться на “bot”.
  • Пусть называется он %username_bot% (по сути это логин бота).
  • Да будет так! Вот тебе токен для общения с ботом! (созданный токен нужно скопировать, спрятать и никому не показывать).

Так же, если обратиться к папкеБоту с командой «/mybots», то можно редактировать и управлять своим детищем. Поставить аватарку там или описание добавить и т.д. По сути для работы этого достаточно. Подробные описания и команды можно почитать в документации.

Глава 2 «Устами немого младенца…»

Хорошо, бот у нас есть. Но он глух и нем. Что бы научить его говорить, я создал тестовый чат и добавил его туда, чтобы не спамить в рабочем чате. Для начала попробуем засунуть руку в зад этой кукле обратиться к API и сказать что-то её устами. Но с начала нам нужно выяснить в какой секте состоит ID чата, в котором бот добавлен. Для этого можем просто в браузере ввести строку:

браузер должен выдать нам много мишуры, среди которой будет строчка “chat”:{“id”:123456789 … вот этот номер нам и нужен.
Теперь достаточно в той же строке браузера набрать нечто вроде

и бот возвестит в чате «Привет мир!».

Офигенно! Но всё ещё бесполезно. А знаете почему? Правильно, наш Conteg Pro Server не умеет ходить по ссылкам в качестве оповещения. А умеет она выполнять «скрипты». В кавычках, потому что скрипт в понимании Ramos – просто консольный BAT файл. И как ходить по ссылкам через консоль? Для этого потребуется маленький, но очень полезный «костыль» в виде утилиты cURL.

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


Качаем утилиту, распаковываем её куда-нибудь и создаем в той же папке файл send.bat с содержанием типа:

bat file

и пробуем его вызвать из консоли строкой

переменная в конце bat файла %* должна подставить весь наш текст и скормить эти пироги в cURL, который переправит всё в наш чат устами бота. а команда @echo off  вначале, нужна что бы не сыпать ничего лишнего в строку. Если всё получилось, то мы молодцы и можно переходить к вязке нашего бота к диспетчеризации.

Глава 3 «Система и робот на костылях»

Закончив со всей этой теологией, экзорцизмом и черной магией, можем переходить к серверу Ramos, открывать оболочку управления Conteg Pro Server и творить ещё немного магии. Заходим в раздел “Actions” и нажимаем “create action”.

Conteg pro server

Выбираем “custom script” жмём далее.

Conteg pro server

Называем наше действие как ни будь понятно, жмём “add new script” и выбираем созданный нами ранее bat файл send.bat. Не забываем выбрать его потом в выпадающем списке Script File. В разделе “Arguments” пишем текст, который будет отправляться при срабатывании данного действия. Можно выбрать различные переменные из раздела “Macro Description”. В “Execut timeout” нужно указать с какой частотой можно вызывать данный скрипт. Если вызывать его слишком часто, можно получить осечки в виде ошибок. 2-5 секунд обычно достаточно, для стабильной работы. “Expect code” – это то, что ожидает наш сервер от скрипта в благополучном итоге получить. Ставим «0» т.к. в скрипте ранее мы поставили @echo off в начале. Если bat’ник выполнится успешно, то придет «0». А если нет, то в ответ прилетит некая ошибка, что за ноль уже ну никак не пройдёт, а значит сервер будет знать, что скрипт не выполнен. Всё.

Далее мы сохраняем наше действие, нажимаем для проверки кнопку “Test Action” и… нифига! Т.е. вообще нифига! «Да как так то???» спросите вы меня. А всё потому, что мы забыли про наш костыль cURL! Всё дело в том, что нужно добавить его в сервер Conteg Pro Server.

Не много теории: после долгих изысканий выяснилось, что все скрипты, что мы добавляем, Conteg Pro Server сохраняет к себе в папку

И казалось бы, вот оно! Подсунуть туда же нашу утилитку и всё? Да, но нет. Мы снова получаем в жбан граблями от Ramos! Оказалось, что выполняются наши скрипты из другой папки. Из

Вот суда то нам и нужно скопировать наш cURL, прямо в корень. Теперь, если мы нажимаем “Test Action” – наш бот начинает вещать тарабарщину в чат.

После тестов, нужно добавить бота в общий «боевой» чат, узнать его ID (как мы проделывали выше) и заменить этот ID в нашем BAT файле уже на сервере по пути

Вот теперь можно привязывать наше созданное действие к оповещениям в разделе “notification rule”.

Conteg pro server

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

telegram bot

Заключение

На самом деле не так страшен чёрт, как его малютка. Таким не сильно сложным образом можно сэкономить на СМС рассылках и получить не кислую порцию гибкости системы диспетчеризации, мониторинга и оповещения.

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

ИСХОДНИКИ

4 комментария для “Ramos и Telegram. Робот – диспетчер

  1. Ну и почему бы просто не добавить путь к curl’у в системный PATH или не захардкодить прямо в батнике?

    1. Потому что это лишние строки/символы в bat’нике.
      Потому что я не очень силен в системных настройках.
      Потому что я не очень умный.
      Выбери сам почему?)))) Я вот смог победить его так. Но я ж понимаю, что это не единственный способ.

    1. Я к нему ещё и дни рождения прикрутил. Теперь он поздравляет сотрудников по утрам 🙂

Добавить комментарий для UA3REO Отменить ответ

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

* Все комментарии проходят предмодерацию.