Удалённое включение скриптов Mikrotik из Telegram v 2.0

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Всех с прошедшим праздником. Данная тема является более лучшей версией того, что я писал в далеком 2016 тут habr.com/ru/post/314108.

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор – официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.

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

Закидываем скрипт в Mikrotik, меняем BotID и ChatID на свои и создаем на него schedule. Ставим параметр «Start Time» на startup (Запуск скрипта при старте.)
«Interval»: 00:00:00
В остальном все как и было.


Telegram-v2
:delay 10
:global mtIdentity [/system identity get name];
:global botID «botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX»;
:global myChatID «YYYYYY»;
:local chatId 0;
:local messageId 0;

:local parse do={
:local startLoc ([:find $content $variable -1] + [:len $variable] + 2);
:local commaLoc ([:find $content "," $startLoc] — 1 + 1);
:local braceLoc ([:find $content "}" $startLoc] — 1 + 1);
:local endLoc $commaLoc;
:local startSymbol [:pick $content $startLoc]
:if ($braceLoc != 0 and ($commaLoc = 0 or $braceLoc < $commaLoc)) do={
:set endLoc $braceLoc;
};
:if ($startSymbol = "{") do={
:set endLoc ($braceLoc + 1);
};
:if ($quotas = true) do={
:set startLoc ($startLoc + 1);
:set endLoc ($endLoc — 1);
}
:if ($endLoc < $startLoc) do={
:set endLoc ($startLoc + 1);
};
:local message [:pick $content $startLoc $endLoc]
#:log info $message;
:return $message;
}

:while ( true ) do={
:do {
#:log info «api.telegram.org$botID/getUpdates\?offset=$messageId&limit=1&allowed_updates=message&timeout=60»;
:tool fetch url=(«api.telegram.org$botID/getUpdates\?offset=$messageId&limit=1&allowed_updates=message&timeout=60») dst-path=«getUpdates»;
:local content [/file get [/file find name=getUpdates] contents];
#:log info $content;
:if ([:len $content] > 30) do={
:set messageId ([$parse content=$content variable=«update_id»] + 1)
:local message [$parse content=$content variable=«text» quotas=true]
:local chat [$parse content=$content variable=«chat»]
:local chatId [$parse content=$chat variable=«id»]

:if (($chatId = $myChatID) and ([/system script find name=$message] != "")) do={
:system script run $message;
} else={
:tool fetch url=(«api.telegram.org$botID/sendmessage\?chat_id=$chatId&text=$mtIdentity: Unknown command: $message») keep-result=no
}
}
} on-error={}
};


За пару лет пользования был выявлен баг, по непонятным причинам слабенькие Mikrotik почему то останавливают скрипт, на более мощных работает без остановок.

Для этих целей накидал костыль WatchDog. тут меняем имя скрипта на то какое указывали выше. и ставим интервал перезапуска 5 минут. Каждые 5 минут наша «смотрящая собака» будет проверять скрипт, и если он не работает, то запустит его.

WatchDogT.me
:global scriptname «t.me»
:if ([:len [/system script job find script=$«scriptname»]] > 0) do={
:log info "$scriptname Already Running — killing old script before continuing"
:foreach counter in=[/system script job find script=$«scriptname»] do={
/system script job remove $counter
}
}
/system script run $scriptname


Ну и на десерт, скрипт взят с форума Mikrotik.
Отправляет важные топики из лога нам в телегу.
Закидываем скрипт в schedule и указываем интервал перезапуска каждые 5 минут, меняем BotID и ChatID на свои.

Notify-log
:global lastTime
:global output
:global mtIdentity [/system identity get name];
:global botID «botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX»;
:global myChatID «YYYYYY»;

:local LogGet [ :toarray [ /log find topics~«critical» || message~«login failure» || message~"[Ff]ailure" ] ];
:local LogtLineCount [ :len $LogGet ];
if ($LogtLineCount > 0) do={
:local currentTime "$[ /log get [ :pick $LogGet ($LogtLineCount -1) ] time ]";
:if ([:len $currentTime] = 10 ) do={
:set currentTime [ :pick $currentTime 0 10 ];
}
:set output "$currentTime — $[/log get [ :pick $LogGet ($LogtLineCount-1) ] message ]";
:if (([:len $lastTime] < 1) || (([:len $lastTime] > 0) && ($lastTime != $currentTime))) do={
:set lastTime $currentTime;
:tool fetch url=(«api.telegram.org$botID/sendmessage\?chat_id=$myChatID&text=\»$mtIdentity\": $output") keep-result=no
}
}

Получим результат:
image

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор – официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
Источник: https://habr.com/ru/post/482802/


Интересные статьи

Интересные статьи

Не самая частая задача на устройствах MikroTik - одномоментное создание большого количества VPN/PPP  пользователей. Но когда она возникает, это превращается в очень ...
Разбираем скриптом внутренний журнал событий MikroTik отбирая уведомления вход/выход пользователей на устройство. Отправляем события на почту или Telegram. Написать свой ...
С приходом коронавируса мир сошел с ума и появилась куча ограничений, которые полностью поменяли нашу жизнь. Меня зовут Эмиль Фролов, я руковожу разработкой команды внутренних сервисо...
Приветствую читатели, в этой статье хотел бы поделиться опытом настройки внутренней сети яндекс облака и маршрутизацией в интернет через RouterOS MikroTik. Есть VPC которая администр...
Доброго времени суток, Habr'овчане. В поисках различной информации по разработке бота для чата Telegram в сети Интернет обнаружил, что все tutorial'ы хоть и достаточно полны различными механик...