Skip to content

Combined Telegram notification script & remote launch of Mikrotik scripts

Notifications You must be signed in to change notification settings

pantigon/Mikrotik-Bot-Telegram

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 

Repository files navigation

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

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

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

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

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

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

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

  • начало сообщения обозначается символом "/"
  • затем указывается 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%