Skip to content

Combined Telegram notification script & remote launch of Mikrotik scripts

Notifications You must be signed in to change notification settings

t0rik/MikrotikTelegramMessageHandler

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 

Repository files navigation

TLGRM - скрипт оповещения в Телеграм и удалённого запуска функций, скриптов и команд RouterOS.

Скрипт обеспечивает отправку (трансляцию) записей журнала устройств Mikrotik в заданную Telegram-группу и удалённый запуск скриптов/ функций/ команд RouterOS. В скрипте использованы идеи разных авторов, найденные на просторах интернета. Код скрипта не имеет зависимостей от сторонних функций и скриптов. Работосопособность скрипта проверялась на актуальных версиях RouterOS 6.49.++ и 7.16.++. Тело скрипта необходимо закинуть в 'System/Scripts' и настроить запуск по расписанию 'System/Scheduler' с периодом 1 минуту.

Во время работы скрипт взаимодействует с заданной Телеграм-группой и при этом:

  • реагирует на принятые команды из сообщений в группе
  • транслирует в группу потенциально интересные записи журнала устройства

Особенности работы скрипта:

  • формируемые скриптом сообщения дробятся по 4096 байтов
  • поддерживается отправка сообщений с кириллическими символами (CP1251)
  • сообщения, неотправленные из-за проблем с интернет-каналом, отсылаются после восстановления связи
  • обрабатывается только ПОСЛЕДНЯЯ команда, отправленная пользователем в ТГ-группу
  • поддерживается индивидуальная и групповая адресация команд пользователя
  • трансляция единственной записи журнала производится одной строкой с ID роутера (без разделителя) для возможности чтения сообщения в шторке уведомлений без разблокировки мобильного устройства
  • трансляция сообщений о подключении/отключении беспроводных клиентов производится в случаях, только когда для МАС-адреса из строки журнала:
    • отсутствует соответствующий IP-адрес в списке DHCP/Leases
    • назначен динамический IP-адрес в списке DHCP/Leases
    • назначен статический IP-адрес в списке DHCP/Leases и при этом комментарий к нему отсутствует
  • контроль работы скрипта доступен в терминале по команде: /system script run tlgrm (где 'tlgrm' - имя скрипта)
  • ID устройства должно состоять только из маленьких латинских букв и цифр

Отправка команды всем или одному конкретному роутеру, находящемуся в ТГ-группе, подразумевает отправку сообщения, подготовленного специальным образом. При этом скрипт должен быть запущен на всех роутерах, которым может быть адресовано сообщение. Для отправки команды необходимо сформировать сообщение в виде текстовой строки специального формата:

  • начало сообщения обозначается символом "/"
  • затем указывается ID устройства, которому адресовано сообщение (соответствует /system identity устройства). Отправка всем роутерам в ТГ-группе подразумевает указание в качестве адресата: forall. Для корректной работы имя устройства должно содержать ТОЛЬКО маленькие латинские буквы и цифры (!!!).
  • далее через символ подчеркивания или пробел указывается непосредственно команда. В качестве команды могут выступать: имя глобальной функции, имя скрипта или команда RouterOS.

Примеры строк с командами:

  /forall log warning [/system resource get uptime]
  /mikrotik system reboot
  /mikrotik1_wol
  /mikrot_ip_fir_fil_dis_[find_comment~"LAN"]

Настройки хранятся вначале скрипта и представляют собой преднастроенные переменные:

  • botID "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" - идентификатор бота
  • myChatID "-XXXXXXXXX" идентификатор чата
  • broadCast, где false = реакция на команды, предназначенные только этому устройству; true = реакция на все принятые команды
  • launchScr, где true = разрешение исполнения скриптов; false = запрет исполнения скриптов
  • launchFnc, где true = разрешение использования глобальных функций; false = запрет использования функций
  • launchCmd, где true = разрешение выполнения команд RouterOS; false = запрет выполнения команд RouterOS
  • sysInfo, где true = разрешение трансляции в ТГ-чат подозрительных событий журнала устройства; false = запрет трансляции событий журнала устройства
  • userInfo, где true = разрешение трансляции в ТГ-чат сообщений, сформированных по условиям пользователя; false = запрет трансляции пользовательских сообщений

Минимальная настройка скрипта сводится к указанию идентификаторов бота и группы: botID и myChatID


Для формирования списка команд в Телеграм-группе через бота BotFather необходимо выполнить ряд действий с BotFather -> ввести и отправить команду: /setcommands, указать целевого бота, после чего появится подсказка:

    command1 - Description
    command2 - Another description

По сути это шаблон с указанием формата ввода команд, в котором каждая команда должна быть оформлена отдельной строкой. В каждой строке слева от дефиса находится команда в виде слова, которое будет отправлено в ТГ-группу при выборе этой команды. В каждой строке справа от дефиса обязательно должно присутствовать краткое описание команды. Необходимо обратить внимание на важные детали при формировании текстовых строк с командами:

  • текст команды (слева от дефиса) может состоять ТОЛЬКО из цифр, маленьких латинских букв и знака подчёркивания (заглавные буквы, пробелы, спецсимволы и кириллица недопустимы).
  • текст описания (справа от дефиса) может содержать любые символы. Текст обязательно должен быть.
  • при добавлении новых команд, старые команды нужно вбивать вновь... Другими словами: все команды нужно вводить одним списком.

Ввести и отправить команду по шаблону: 'имямикротик_имяскрипта - текст с описанием.' Если всё сделано правильно, будет получен ответ: 'Success! Command list updated.'

Обратите внимание! При вводе списка предустановленных команд BotFather требует, чтобы слева от дефиса находилось только одно слово - сама команда, а для работы TLGRM необходимо, чтобы команда содержала в себе ID устройства и имя скрипта/функции/команды ROS разделённые пробелом. Для обхода этой нестыковки TLGRM считает тождественными пробелы (' ') и знаки подчёркивания ('_'). В таком варианте получается, что строка 'имямикротик_имяскрипта' для BotFather выглядит как одно слово, а для TLGRM выглядит как разные слова. Таким образом BotFather тянет за собой зависимость -> ID устройств и названия скриптов ОБЯЗАНЫ состоять только из маленьких латинских букв и цифр (заглавные буквы, пробелы, знаки подчёркивания, спецсимволы и кириллица недопустимы!!!). После формирования списка предустановленных команд BotFather, нажав на кнопку "/" в своём чате с ботом можно видеть этот список, и при желании выбрать нужную команду на исполнение.


Для корректного отображения скриптом 'username' отправителя, в настройках Телеграм должно быть заполнено поле "Имя пользователя", бот должен быть подключен к ГРУППЕ (групповому чату), а не к КАНАЛУ. Опытным путём выяснено, что предпочтителен групповой чат Телеграм с id БЕЗ префикса '-100', в таком чате сообщения от ГРУППЫ роутеров не теряются.

Список литературы:

Используете скрипт - отметьте это звездочкой, Вам не сложно, а мне приятно!

About

Combined Telegram notification script & remote launch of Mikrotik scripts

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • RouterOS Script 100.0%