Сегодня телеграм предоставляет возможность создавать ботов. Создадим такого и научим управлять его микротиком.
Создается бот, у него есть уникальный id с помощью которого к боту можно обращаться.
Когда ты пишешь кому-то в телеграм, то принимающая сторона понимает что ты это ты по служебному полю chat, id которого так же уникален. Это нам поможет научить бота слушаться только тех кому разрешено командовать.
На микротике создаются скрипты, которые будут запускаться из телеграм. Например, создадим скрипты с именами "disable" и "enable", которые будут выключать и включать l2tp сервер.
На микротик заливается скрипт, который запускается при старте системы и повторяется каждые 10 или 30 сек. Он проверяет новые сообщения у бота, в которых ищет команды. Если в чат пришел текст, который содержит имя исполняемого скрипта (например текст "disable"), то внутри микротика выполнится этот одноименный скрипт.
1. Ищем в телеге бота @BotFather, Пишем ему /start и получаем список его команд.
2. Создаем нового бота командой /newbot, имя должно оканчиваться на "bot". Если имя имеет правильное окончание и не занято, то получаем сообщение с токеном нового бота. Выглядит примерно так 5310275458:AFWSZIqo2henSpN02VO-jJSW9jCgDF1MDdw
3. Получаем id моего с ботом чата. Для этого пишем ему что-нибудь и открываем в браузере ссылку https://api.telegram.org/bot5310275458:AFWSZIqo2henSpN02VO-jJSW9jCgDF1MDdw/getUpdates. Там увидим сообщение полученное ботом и все служебные поля.
4. Добавляем нашему боту меню командой /setcommands.
Результат выглядит вот так. Команды можно писать от руки или пользоваться кнопкой.
Пишем скрипты управления L2TP сервером
Вот таким образом создадим скрипты на микротике.
ВАЖНО! Имя скрипта должно соответствовать буква-в-букву той команде, которую мы задали в меню бота. Если мы делали команду disable, то и имя скрипта должно быть такое же.
Скрипт "disable"
:global botID;
:global myChatID;
:local content [/interface l2tp-server server set enabled=no];
:tool fetch url=("https://api.telegram.org/".$botID."/sendmessage\?chat_id=".$myChatID."&text=Link disabled.") keep-result=no ;
Аналогичным образом создаем скрипт для запуска L2TP сервера, называем его "enable".
:global botID;
:global myChatID;
:local content [/interface l2tp-server server set enabled=yes];
:tool fetch url=("https://api.telegram.org/".$botID."/sendmessage\?chat_id=".$myChatID."&text=Link enabled.") keep-result=no ;
Пишем скрипт опроса бота
Теперь создаем 2 служебных скрипта. Первый загонит в оперативку микротика глобальные переменные. Второй будет опрашивать бота и реагировать на команды.
Обращаю внимание, что права на эти 2 служебных скрипта должны быть полные.
Скрипт "telegram-vars"
botID - токен бота
myChatID - chat id, можно через точку с запятой указать несколько id, если ботом нужно управлять с нескольких аккаунтов телеграма.
#Schedule run at startup.
#Telegram API keys for use in another scripts.
:global botID "bot5310275458:AFWSZIqo2henSpN02VO-jJSW9jCgDF1MDdw" ;
:global myChatID "12332112;98778998" ;
За помощь с этими скриптами спасибо https://gist.github.com/l0ser140
Настраиваем автозапуск скриптов
telegram-vars-startup - выполняется единоразово при загрузке с задержкой 10 сек.
telegram-main-startup - выполняется при загрузке + запускается каждые 10 секунд.
Микротик не может обратиться к имени скрипта, только к его порядковому номеру. Чтобы узнать порядковый номер скрипта нужно открыть терминал и набрать команду /system script print