На эту реализацию меня подтолкнул Александр Корюкин GeXoGeN с его публикацией» Удаленно включите компьютер бесплатно, без СМС и без облаков, с помощью Микротика ".
И комментарий в одной из групп ВК Кирилла Казакова:
Да, это совсем не безопасно.Я решил написать такого бота.Я бы предпочел написать телеграм-бота, который принимает команды активации только от моего аккаунта.
Итак, первое, что вам нужно сделать, это создать бота в телеграмме.
- Находим в поиске аккаунт с именем @botfather
- Нажмите кнопку «Пуск» в нижней части экрана.
- Затем пишем ему команду /newbot
- Первый вопрос - имя создаваемого бота МойМикротикРОутер
- Второй вопрос - никнейм создаваемого бота (должен заканчиваться на bot) MikrotikROuter_bot
Затем вам нужно найти нашего бота в поиске по названию.
@MikrotikROuter_bo t и нажмите кнопку «Пуск».
После этого вам необходимо открыть браузер и ввести следующую строку:
Где XXXXXXXXXXXXXXXXXX — токен вашего бота.https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Откроется страница, подобная следующей:
Находим на нем следующий текст:
"чат":{"id": 631290 ,
Итак, у нас есть вся необходимая информация для написания скриптов для Микротика, а именно:
Токен бота: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Идентификатор чата, куда ему следует написать: 631290
Для проверки мы можем зайти через браузер: https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessageЭchat_id=631290&text=test
Вы должны получить результат:
Для нашего удобства сразу добавим команды для бота:
Поиск учетной записи по имени @botfather
Затем пишем ему команду /setcommands
- Он спросит, какой бот
- Привет, мир< — Test message on chat 1
- itworking — Тестовое сообщение в чате 2
- wolmypc - разбуди мой компьютер
Теперь перейдем к МикроТику.
В RouterOS есть консольная утилита для копирования файлов по ftp или http/https, утилита называется fetch, ею мы и воспользуемся.
Открытие Терминал и введите: /tool fetch url=" https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage\Эchat_id=631290&text=test " keep-result=no
Обратите внимание, что требуется MikroTik" \ «чтобы избежать знака» ? " в URL-адресе.
Вы должны получить результат:
Теперь перейдем к скриптам: Привет, мир system script add name="helloworld" policy=read source={/tool fetch url=" https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage\Эchat_id=631290&text=Hello,world ! " keep-result=no}
работает system script add name="itsworking" policy=read source={/tool fetch url=" https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage\Эchat_id=631290&text=Test OK, it's Working " keep-result=no}
wolmypc system script add name="wolmypc" policy=read source="/tool wol mac= XX:XX:XX:XX:XX:XX interface=ifname\r\
\n/tool fetch url=\" https://api.telegram.org/boXXXXXXXXXXXXXXXXXXX\\Эchat_id=631290&text=wol OK\" keep-resul\
t=no"
Не забудьте указать правильный mac и имя интерфейса, а также бот-токен и чат_id.
Теперь немного объясню, что они делают:
Скрипт «helloworld» отправляет сообщение: «Привет, мир!» в наш чат с ботом.
Скрипт «itsworking» отправляет сообщение: «Тест ОК, все работает!» в наш чат с ботом.
Эти скрипты предназначены для демонстрации работы.
Я добавил скрипт «wolmypc» как одну из возможных реализаций.
Как только скрипт будет завершен, бот напишет в чат «wol OK».
Фактически вы можете запустить абсолютно любой скрипт.
Создайте задачу:
Telegram.src /system scheduler
add interval=30s name=Telegram on-event=":tool fetch url=(\" https://api.telegr\
am.org/\".
\$botID.\"/getUpdates\
") ;\r\
\n:global content [/file get [/file find name=getUpdates] contents] ;\r\
\n:global startLoc 0;\r\
\n:global endLoc 0;\r\
\n\r\
\n:if ( [/file get [/file find name=getUpdates] size] > 50 ) do={\r\
\n\r\
\n:set startLoc [:find \$content \"update_id\" \$lastEnd ] ;\r\
\n:set startLoc ( \$startLoc + 11 ) ;\r\
\n:local endLoc [:find \$content \",\" \$startLoc] ;\r\
\n:local messageId ([:pick \$content \$startLoc \$endLoc] + (1));\r\
\n:put [\$messageId] ;\r\
\n:#log info message=\"updateID \$messageId\" ;\r\
\n\r\
\n:set startLoc [:find \$content \"text\" \$lastEnd ] ;\r\
\n:set startLoc ( \$startLoc + 7 ) ;\r\
\n:local endLoc [:find \$content \",\" (\$startLoc)] ;\r\
\n:set endLoc ( \$endLoc - 1 ) ;\r\
\n:local message [:pick \$content (\$startLoc + 2) \$endLoc] ;\r\
\n:put [\$message] ;\r\
\n:#log info message=\"message \$message \";\r\
\n\r\
\n:set startLoc [:find \$content \"chat\" \$lastEnd ] ;\r\
\n:set startLoc ( \$startLoc + 12 ) ;\r\
\n:local endLoc [:find \$content \",\" \$startLoc] ;\r\
\n:local chatId ([:pick \$content \$startLoc \$endLoc]);\r\
\n:put [\$chatId] ;\r\
\n:#log info message=\"chatID \$chatId \";\r\
\n\r\
\n:if ((\$chatId = \$myChatID) and (:put [/system script find name=\$messa\
ge] != \"\")) do={\r\
\n:system script run \$message} else={:tool fetch url=(\" https://api.teleg\
ram.org/\".
\$botID.\"/sendmessage\\\Эchat_id=\".
\$chatId.\"&text=I
can't t\
alk with you. \") keep-result=no} ;\r\
\n:tool fetch url=(\" https://api.telegram.org/\".
\$botID.\"/getUpdates\\\?\
offset=\$messageId\") keep-result=no; \r\
\n} \r\
\n" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-date=nov/02/2010 start-time=00:00:00
Теги: #Сетевые технологии #Системное администрирование #mikrotik #скрипт #telegram боты
-
Что Такое Ecc-Память?
19 Oct, 24 -
Миграция Животных
19 Oct, 24 -
Чемпионат #Pghack. Платформа
19 Oct, 24 -
Первое Заседание Клуба Инноваторов В Москве
19 Oct, 24