Нашел список скриптов, которые уведомляют вас через Telegram или E-mail о различных событиях произошедших в вашей сети, на маршрутизаторе(Микротик).
Первые два скрипта отвечают непосредственно за отправку сообщений в Телеграм или на почту, остальные нумерованные просматривают лог, подготавливают сообщение и передают информацию первым двум. Такая логика работы призвана упростить внесение изменений в случае смены реквизитов Телеграм-бота или почтового сервера.
- Failed login attempt notification
- Device Login Notification
- Bandwidth excess notification
- Bulk create VPN users from a file
- Device processor overload notification
- Device overheating notification
- Notification when the external IP address of the router changes
- Notification of device connection to the network
- Discover Unknown DHCP Server on the Network
- Sending power on notification to Telegram
Процесс настройки отправки сообщений в Телеграм состоит из 2х этапов:
1) создания и настройки Бота в Телеграм. Нам понадобится TokenID(ключ для отправки сообщенийй от имени бота) и ChatID(идентификатор того чата, в который вы хотите чтобы бот отправлял сообщения),
2) непосредственно прописывания скриптов на маршрутизаторе и привязке каждому из них в расписании(DHCP тригере) времени(периода) запуска.
1. Создаем бота
Находим в Телеграме пользователя @BotFather(он создает ботов):

Пишем ему сообщение(команду) /newbot:

следуя подсказкам создаем бота и получаем его TokenID
Создаем группу в Телеграм, добавляем туда нашего бота. В итоге сообщения от ботов(с разных маршрутизаторов) объединим в одной группе.
Теперь узнаем ChatID нашей группы, куда мы добавили бота. В адресную строку браузера копируем:
https://api.telegram.org/bot1854512345:AAEZC5eocQGosZUOuGirnWL1eTCphvgEzLw/getUpdates
браузер должен отобразить информацию, среди который будет ChatID нужной нам группы:

2. Настройка микротика
Создаем первый скрипт(System -> Script), чтобы он работал нужно задать ему следующие права:
[System] -> [Scripts] -> [+] -> [Name: CheckPowerOn] -> [Policy: read, write, policy, test]
Пишем ему Имя, Права задаем, вставляем сам Скрипт, меняем значения TokenID ChatID на свои и жмем ОК:

Код скрипта:
# Func: Telegram send message :local TGSendMessage do={ :local tgUrl "https://api.telegram.org/bot$Token/sendMessage?chat_id=$ChatID&text=$Text&parse_mode=html"; /tool fetch http-method=get url=$tgUrl keep-result=no; } # Constants :global RebootStatus; :local TelegramBotToken "987654321:AAFJIVTAWodBwzGX2CLne6-PK4RFNSy-8OY"; :local TelegramChatID "987654321"; :local DeviceName [/system identity get name]; :local TelegramMessageText "\F0\9F\9F\A2 <b>$DeviceName:</b> start after Power Off."; # Program :if ($RebootStatus != true) do={ $TGSendMessage Token=$TelegramBotToken ChatID=$TelegramChatID Text=$TelegramMessageText; :set RebootStatus true; :log info "Script CheckPowerOn send Telegram message." }
Добавляем строку для запуска нашего скрипта в планировщик
Чтобы скрипт планировщика работаел ему также нужно проставить следующие права: read, write, policy, test.
[System] -> [Schedule] -> [+] -> [Name: CheckPowerOn script] - > [Interval: 00:05:00] -> [Policy: read, write, policy, test]
Добавляем следующую команду, которая будет каждые 5минут запускать наш скрипт:
/system script run CheckPowerOn

Теперь каждые 5 минут микротик будет проверять свой лог на наличие записи о перезагрузке роутера, и в случае обнаружения таковой отправит вам в чат сообщение.
Логика скрипта
Помимо параметров время события, текст события, MikroTik использует уникальный параметр id события, который мы будем использовать (.id уникален до перезапуска устройства, потом отчет начинается заново, с 0).
- Обозначаем глобальную переменную ParseLogAccountEndArrayID — хранит последний проверенный .id сообщения;
- Собираем в массив IDsEventsAccount все .id сообщений, в теме которых встречается «account» — (события: успешный вход на устройство, завершение сессии пользователя). Стандартное ограничение журнала лога 1000 строк, это не вызовет значимой нагрузки на устройство;
- Получаем LenArrayIDs — количество элементов массива, StartArrayID — номер элемента с которого начнем перебор (это как раз ID последнего запуска), и EndArrayID — номер последнего элемента массива минус 1(массив начинается с элемента с индексом 0).
- Если последний элемент .id массива (IDsEventsAccount) не равен последнему проверенному .id (ParseLogAccountEndArrayID) (т.е. появились новые события «account») и последний элемент (ParseLogAccountEndArrayID) — не пустой (первый запуск/в журнале нет событий авторизации) начинаем формировать и отправлять сообщения;
- Если в журнале присутствуют необработанные события «account», начинаем перебор ключей в массиве (IDsEventsAccount) по их номерам, начиная с «последнего +1» (чтобы не отправлять вновь предыдущее последнее событие) до «последнего -1» (т.к. индекс начинается с 0);
- Получаем .id сообщения (IDMessage) по его номеру в массиве;
- Формируем текст email, записывая новой строкой сообщение журнала MikroTik;
- Формируем текст Telegram сообщения, используя %0D%0A для переноса строки;
- Отправляем сформированное сообщение на email;
- Отправляем сформированное сообщение в Telegram;
- Записываем в ParseLogAccountEndArrayID последний ID сообщения с темой «account» (EndArrayID).
Возможные темы сообщений в журнале устройства, можно увидеть попытавшись создать правило Logging:
[System] -> [Logging] -> [Rules] -> [+] -> [Topics]
Для парсинга текста сообщений используйте регулярные выражения и команду вида:
[/log find where message ~ «log»]
Установив более частое время проверки скрипта, вы можете выполнить дополнительные действия при входе/выходе пользователя, например автоматическое создание резервной копии (для тех кто любит править Firewall в пятницу вечером, забывая устанавливать MikroTik Safe Mode) или что еще подскажет воображение.
Мой скрипт выглядит проще, чем что я находил в интернете и доступен к оптимизации, если вы любите оптимизировать код в минимальное количество строк.
Если вы используете множество скриптов на вашем устройстве, указывать параметры почты и Telegram бота, в каждом из скриптов нерационально, особенно если возникнет необходимость изменить параметры. Я использую в своих скриптах вызов скриптов функций: «Отправить Email» и «Отправить сообщение Telegram«, возможно и Вам это тоже будет полезно, упрощая управление устройством MikroTik.
Работа скрипта проверена на: hAP ac lite, RouterOS 6.47.8 (stable), 951UI.
UPD 11.12.2020: Выставляйте права на запуск скрипта в Scheduler и на сам скрипт, как указано в статье: read, write, test, policy. Излишние права (выставляются по умолчанию новому скрипту) могут привести к появлению ошибки «could not run script ParseLogAccountEvents: not enough permissions«. Проверяйте журнал устройства.
Источник: https://mhelp.pro/tag/mikrotik-scripts/
https://habr.com/ru/post/532086/