Если вы планируете использовать множество скриптов на вашем устройстве MikroTik и отправлять их результаты в Telegram. Писать процедуру отправки сообщения в каждом крипте не очень рационально, оптимальным способом будет размещение функции «отправить сообщение в Телеграм» в отдельный скрипт. И обращение к этому скрипту по мере необходимости.
Теперь изменять параметры Тelegram уведомления придется всего в одном скрипте.
? Для работы скрипта вы должны иметь Токен Телеграм бота и ID чата или персональный ID. Создание Telegram бота и получение необходимых ID не является темой этой статьи.
Статья на других языках:
?? — MikroTik Scripts: Sending a message to Telegram (function)
?? — MikroTik Scripts: Enviar un mensaje a Telegram (función)
?? — Scripts MikroTik: Envoi d’un message à Telegram (fonction)
?? — MikroTik-Skripte: Senden einer Nachricht an Telegram (funktion)
?? — MikroTik-scripts: een bericht naar Telegram sturen (functie)
Скрипт «Отправка сообщения в Telegram»
В скрипте используется html разметка, какие варианты разметки использует Telegram можно прочитать — здесь.
Скрипт принимает на вход переменную MessageText, содержащую текст сообщения. MessageText не может быть пустым.
Если скрипт выполнен без ошибок в лог MikroTik записывается информация о отправке сообщения и текст.
Так как скрипт будет выполняться из другого скрипта, установка разрешений на выполнение скрипта не требуется.
[System] -> [Scripts] -> [+] -> [Name: MyTGBotSendMessage] -> [Don't Require Permissions]
Код скрипта:
:local BotToken "987654321:AAFJIVTAWodBwzGX2CLne6-PK4RFNSy-8OY";
:local ChatID "987654321";
:local ParseMode "html";
:local DisableWebPagePreview True;
:local SendText $MessageText;
:local tgUrl "https://api.telegram.org/bot$BotToken/sendMessage?chat_id=$ChatID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview";
/tool fetch http-method=get url=$tgUrl output=none;
:log info "Send Telegram Message: $MessageText";
Вызов скрипта «Отправка сообщения в Telegram» из другого скрипта
[System] -> [Scripts] -> [+] -> [Name: SendMessageToTelegram]
Для отправки сообщения вы должны передать параметр MessageText в скрипт MyTGBotSendMessage.
Код скрипта:
:local DeviceName [/system identity get name];
:local MessageText "\F0\9F\9F\A2 <b>$DeviceName:</b> <i>italic</i> <code>inline fixed-width code</code> plain text <a href=\"https://mhelp.pro/\">More Scripts</a>";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
Если при вызове скрипта вы получаете syntax error или ошибку failure: closing connection: <400 Bad Request> проблема может быть в использовании в тексте сообщения служебных символов MikroTik, для проверки попробуйте отправить обычный текст без специальных символов или символов разметки, на английском языке.
? В этой статье обсуждалось создание скрипта Отправка сообщения в Telegram из Mikrotik. Я надеюсь теперь использование отправки сообщений в Telegram из устройств MikroTik стало понятней. Однако, если вы столкнетесь с каким-то проблемами при настройке, не стесняйтесь написать в комментариях. Я постараюсь помочь.
К примеру у вас несколько MikroTik, создать супергруппу, добавить боты и добавить ветви (ветки), чтобы каждый MikroTik писал в свою ветку.
Добавить номер ветки (message_thread_id):
:local ThreadID «Х»;
Заменить на:
:local tgUrl «https://api.telegram.org/bot$BotToken/sendMessage?chat_id=$ChatID&message_thread_id=$ThreadID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview»;
Добрый день! А у кого-нибудь есть скрипт о потери связи с устройством и вычислением времени которое он был подключен к сети?
Ваши скрипты работают в 7й версии?
Скрипты работают, проверено на RouterOS v7.5 MikroTik CRS328-24P-4S+
строке /tool fetch http-method=get url=»https://api.telegram.org/bot$BotToken/sendMessage\?chat_id=$ChatID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview» output=none;
нужно поставить знак «\»перед «?»
вот так /tool fetch http-method=get url=»https://api.telegram.org/bot$BotToken/sendMessage\?chat_id=$ChatID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview» output=none;
Здравствуйте. Подскажите а отправку txt файлов из микротика возможно сюда прикрутить? Спасибо
Благодарю за статью!
Как можно сделать что бы микротик сканировал устройства по близости и если устройство с нужным Мак адресом оказалось по близости то слал уведомление?
Именно поблизости, без подключения к самому Микротик?
Дружище, спасибо тебе огромное, воспользовался твоим методом у себя на Микроте, всё работает как часы. Крутяк, когда народ делиться подобными вещами, на таких людях в принципе мир и держится :). С наступающим праздником.
Николай, большое спасибо за приятный отзыв, Вам тоже всего хорошего в новом году!
При отправке сообщения на диск пишется файл с ответом сервера telegram. Чтобы не забивать диск, лучше использовать output=none здесь:
/tool fetch http-method=get url=$tgUrl output=none;
Большое спасибо, упустил этот момент. 🙂
В одном из скриптов добавлено keep-result=no;, это тоже стоит добавить ? Но у меня почему то с ним не работает.
Про комбинацию с дудкой бы! Такую же доходчивую статью.
Здравствуйте, спасибо за отзыв. Что за «комбинацию» с Dude? (насколько я понял)