Опишу реальный процесс настройки этой связки, работает у меня уже несколько месяцев без нареканий. Весь мануал будет разделен на три этапа – настройка бота в тг, написание скрипта в Микротике, добавление своих команд.
Перед тем, как приступать, необходимо активировать функцию Wake On Lane в биосе и системе. Под конкретную материнскую плату и систему всё индивидуально, но легко ищется.
Этап 1. Создание бота в telegram.
- Находим в глобальном поиске аккаунт с именем @botfather
- Запускаем бота кнопкой Start (в нижней части экрана)
- И пишем ему команду /newbot
- Бот задаст два вопроса
- Имя создаваемого бота - можно задать любое, пусть будет SysAdminTg
- Ник создаваемого бота - SysAdminTg_bot (должен обязательно оканчиваться на bot)
Если всё правильно сделано, бот выдаст вот такое сообщение. Нам из него надо скопировать токен бота, а именно строчку
1154187995:AAFUq2fa0DZBDz4gRcEnuW_Jqd7w5lyuCyI
Токен всё равно у всех отличается, и я палю его всю инструкцию, чтобы было понятно.
- Теперь надо найти нашего бота в глобальном поиске по имени SysAdminTg_bot, и запустить кнопкой Start.
- После запуска бота, нужно открыть браузер, и ввести эту строчку (вместо 11111111111 подставить свой скопированный токен из шага 4)
Откроется вот такая страница:
На этой странице надо найти параметр вида «chat»:{«id»:000000000 (под нулями ваши числа, чат id я буду писать всегда 000000000, либо замазывать, потому что этот параметр точно палить нельзя)
Для проверки можно перейти по такой ссылке в браузере:
- Итак, у нас есть вся информация для перехода ко второму этапу:
Токен нашего бота: 1154187995:AAFUq2fa0DZBDz4gRcEnuW_Jqd7w5lyuCyI
ID чата, куда он будет писать: 000000000
Этап 2. Написание скрипта в Микротике
- В ROS есть консольная утилита для копирования файлов через ftp или http/https, под называнием fetch. Она-то нам и нужна.
Открываем Winbox, слева New Terminal и вводим:
/tool fetch url=“https://api.telegram.org/bot1154187995:AAFUq2fa0DZBDz4gRcEnuW_Jqd7w5lyuCyI/sendmessage\?chat_id=000000000&text=testmicrotik” keep-result=no
Важно! Для MicroTik в ссылке необходим \ для экранирования знака " ? " в URL
И в бот нам падает сообщение, заданное в параметре chat_id=000000000&text=testmicrotik
- Теперь непосредственно к скриптам. Первым будет /check.
В winbox – system – scripts - жмём на плюсик и вписываем свои параметры.
По сути этот скрипт повторяет первый шаг. Но я его сделал для себя, чтобы при необходимости чекать буквально одной командой в тг, а есть ли у меня вообще инет дома.
Тело скрипта, и скрин, чтобы было понятно что куда.
(не забываем вписывать свои токен бота, id чата (этап 1 пункт 8))
/tool fetch url=“https://api.telegram.org/bot1154187995:AAFUq2fa0DZBDz4gRcEnuW_Jqd7w5lyuCyI/sendmessage\?chat_id=000000000&text=check ok” keep-result=no
-
Второй - /wolpc.
Тело скрипта:
(не забываем вписывать свои токен бота, id чата (этап 1 пункт 8))/tool wol interface=ether3 mac=00:00:00:00:00:00
/tool fetch url=“https://api.telegram.org/bot1154187995:AAFUq2fa0DZBDz4gRcEnuW_Jqd7w5lyuCyI/sendmessage\?chat_id=000000000&text=wol ok” keep-result=no
Важно!
Имя интерфейса в микротике, к которому подключен пк, может отличаться, у меня он называется ether3.
Вместо нулей надо вставить mac-адрес своего устройства, как его можно найти, на каждой конкретной системе, за несколько секунд ответит гугл))
После отправки на пк «магического пакета» скрипт так же сообщит нам, что он отработал. Кстати, можно уже проверить работу, нажав Run Script.
- Теперь самое интересное – задание, которое, если по-простому, будет постоянно опрашивать нашего бота на наличие новых команд. Скрипт актуален на 05.2020.
Даём имя, и вводим тело скрипта:
(не забываем вписывать свои токен бота, id чата (этап 1 пункт 8))
:delay 15
:global mtIdentity [/system identity get name];
:global “botID1154187995:AAFUq2fa0DZBDz4gRcEnuW_Jqd7w5lyuCyI" ;
:global myChatID “000000000” ;
: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 “https://api.telegram.org/$botID/getUpdates\?offset=$messageId&limit=1&allowed_updates=message&timeout=60”;
:tool fetch url=(“https://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=(“https://api.telegram.org/$botID/sendmessage\?chat_id=$chatId&text=$mtIdentity: Unknown command: $message”) keep-result=no
}
}
} on-error={}
};
Должно получиться примерно такое:
- Осталось вписать задание, созданное выше, в шедулер, который будет запускать скрипт при загрузке системы.
System – scheduler – на плюсик - создаём новое задание. Даём имя (я дал SysAdminTg), а в большое поле внизу пишем:
/system script run SysAdminTg
(SysAdminTg это имя скрипта, которое мы дали выше, в пункте 4)
И обязательно параметр Start Time поставить startup.
Сохраняем, закрываем.
Этап 3. Добавление своих команд.
- Дело осталось за малым. Переходим в телеграмме в @BotFather, где мы создавали бота, и пишем ему команду /setcommands
- Он спросит – какому боту мы хотим добавить команды, выбираем свой.
- И отправляем ему следующее.
wolpc – wake up pc
check – check status
- Переходим в бот, и видим, что команды добавились.
- Проверяем работоспособность))
Ну вот и всё. У меня прикручено больше десятка разных команд таким образом к боту. Если будет хороший фидбек, могу выпустить вторую часть, где расскажу на основе этого мануала, как настроить мониторинг сети, управление каждым портом такими командами.
Осилит путь идущий! Отдаю все свои должные.
…
Вторая часть: