Отправка Push-уведомлений из Mikrotik RouterOS прямо на мобильный при помощи Telegram

06 май 2018 61 428 35
Ранее в блоге я уже писал о том, как можно осуществлять удаленное управление устройствами Mikrotik под управлением RouterOS при помощи SMS-команд. Тогда же мы рассматривали возможность отправки SMS-уведомлений администратору при отключении основного интернет канала и переключении на 3G-модем.

У меня, как и ранее, нет свободного времени, чтобы адаптировать скрипт «Advanced Failover» под свежие версии RouterOS, так что за это я извиняюсь. По возможности в свободное время займусь.

Сегодня мне бы хотелось поговорить об альтернативе классическим SMS-уведомлениям. В частности, о варианте с отправкой Push-уведомлений прямо на смартфон, планшет или даже ПК (PC, Mac, macOS, Linux). Все это без использования платных сервисов-посредников с минимальными затратами времени.
Если Вы хотите научиться настраивать MikroTik, предлагаем пройти онлайн обучение. Более подробную информацию Вы можете найти в конце данной публикации.
В данном варианте реализации речь пойдет о сервисе Telegram у которого есть удобный API для управления ботами. На данный вариант я наткнулся чисто случайно, т.к. до недавнего времени про сам Telegram я, конечно же, слышал, но только в общих чертах и сам с ним не сталкивался.

Начинаем работу с Telegram

Первым делом качаем официальное мобильное приложение Telegram, создаем аккаунт. Все ссылки вы можете найти на официальном сайте.

После того, как аккаунт создан, при помощи поиска необходимо найти контакт «BotFather» – это главный бот, при помощи которого можно создавать новых ботов и управлять уже существующими. При желании, боту можно будет поменять имя, а также загрузить для него аватар.

Дальнейшее «общение» с ботом будет происходить в виде текстовых команд. Для создания нового бота, выполните команду:
/newbot

После ввода и отправки данной команды, главный бот запросит отображаемое имя, в нем допускаются пробелы и произвольный формат самого названия.

После указания имени, бот запросит желаемый %username%. При выборе %username% обязательным условием является суффикс «bot» в конце имени, например MikrotikBot или Mikrotik_bot.

Если всё прошло успешно, бот-отец ответит сообщением, содержащим специальный token для доступа к API. Сам токен состоит из двух частей, разделенных двоеточием, например:
12558568:Hgsgf74tv7efcdfvhdvhfvcbn65imghmj

Следующим шагом рекомендуется проверить доступность API для вашего бота, делается это в браузере, путем открытия специального URL:
https://api.telegram.org/bot<ваш_токен>/getMe

Система возвращает ответы в формате JSON, в коде ответа должен присутствовать параметр «ok: true», если он есть – API доступен.
Собственно бот почти готов, осталось только научить Mikrotik отправлять сообщения, используя API Telegram.

Перед тем, как приступить к настройке RouterOS, необходимо узнать ID чата. При помощи мобильного приложения отправляем нашему боту команду:
/start 

После чего, в браузере открываем специальный URL:
https://api.telegram.org/bot<ваш_токен>/getUpdates

В ответе нас интересует параметр message=>chat=>id, в нем хранится уникальный идентификатор чата между вами и созданным ботом. По сути, это ваш идентификатор как пользователя, он будет идентичен для всех ботов в рамках одного аккаунта.

Отправка тестового Telegram-сообщения

Теперь у нас есть все необходимое для того, чтобы отправлять сообщения при помощи API. Отправка сообщений осуществляется при помощи браузера, по специально сформированной ссылке, которая имеет следующий вид:
https://api.telegram.org/bot<ваш_токен>/sendMessage?chat_id=<id_чата>&text=<сообщение>

Параметры:
  • <ваш_токен> – ваш уникальный токен для доступа к API, полученный ранее;
  • <id_чата> – уникальный идентификатор чата, в который будет отправлено сообщение;
  • <сообщение> – текст сообщения;
Текст сообщения может быть как на английском, так и на русском. Для сообщения на латинице, пробелы следует заменять на «%20», точно так же, как это делается в обычных URL.
Для того, чтобы отправить сообщение кириллицей, предварительно текст необходимо конвертировать при помощи urlencode, это встроенная функция PHP. Наиболее простой вариант – воспользоваться любым онлайн сервисом, конвертацию выполняем в кодировку UTF-8.

Отправляем сообщения из Mikrotik RouterOS

Отправить сообщение из RouterOS не составит особых трудностей. Для этого можно воспользоваться следующим кодом:
tool fetch url="https://api.telegram.org/bot<ваш_токен>/sendMessage?chat_id=<id_чата>&text=<сообщение>" dst-path=telegram.txt

Для отладки, вы можете воспользоваться стандартными возможностями System – Scripts. Вот собственно и все, остальное за вами.
Как вариант, данную систему уведомлений можно комбинировать с USB-модемом. Например, при отключении основного интернет-канала, Mikrotik может отправить уведомление, используя резервный канал. При этом данный метод совершенно бесплатен, в отличие от обычных SMS, за которые оператор взымает плату. Единственное ограничение – доступ к Интернет на самом Mikrotik и конечном устройстве с приложением Telegram (для отправки и получения).

Лично я использую Telegram API в связке со встроенным инструментом Netwatch, он предельно прост в использовании и настройке.

Параметры Netwatch:
  • Host – пингуемый узел;
  • Interval – интервал в секундах между попытками проверки, по-умолчанию 1 минута;
  • Timeout – таймаут ожидания, по-умолчанию 1000 мс;
Во вкладках UP и DOWN пишется код, который необходимо выполнить, когда хост доступен или не доступен. Команды (скрипт) выполняются только при смене статуса с up на down или наоборот.

Вариантов применения данного метода существует большое количество, если у вас есть интересная идея или реализация – можете поделиться ею в комментариях.

Видеокурс «Настройка оборудования MikroTik» (аналог MTCNA)

Учитесь работать с MikroTik? Рекомендую видеокурс «Настройка оборудования MikroTik». В курсе разобраны все темы из официальной учебной программы MTCNA и много дополнительного материала. Курс сочетает теоретическую часть и практику – настройку маршрутизатора по техническому заданию. Консультации по заданиям курса ведет его автор Дмитрий Скоромнов. Подойдет и для первого знакомства с оборудованием MikroTik, и для систематизации знаний опытным специалистам.

Комментарии:

Добавить
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
  1. Руслан
    Руслан Гости 14 мая 2022 11:59
    + 0 -
    Здравствуйте, хотелось бы получать сообщения когда идёт переключения между двумя провайдерами.
    Где это прописать , там же где скрипт для переключения между провайдерами или как?
  2. Игорь
    Игорь Гости 21 апреля 2021 18:07
    + 0 -
    У кого <404 Not Found> 149.154.167.220:443 (4)

    Текст сообщение пишите используя URL-коды символов (пробел это %20 и тд.)
  3. Toss7
    Toss7 Гости 14 марта 2021 12:42
    + +1 -
    Все у кого вылазит failure: closing connection: <404 Not Found> 149.154.167.220:443 (4)
    Добавьте знак \

    Для удобства, ниже я приведу 2 варианта кода, первый – для скриптов, второй – для написания сообщений при помощи окна терминала.

    /tool fetch url=”https://api.telegram.org/bot153358077:AAF4qYdUNIcWfp-SLtduVR18DuzqtXwEQAs/sendMessage?chat_id=-175202495&text=Vazhniy_tunnel_DOWN”
    /tool fetch url=”https://api.telegram.org/bot153358077:AAF4qYdUNIcWfp-SLtduVR18DuzqtXwEQAs/sendMessa[b]ge\?ch[/b]at_id=-175202495&text=Vazhniy_tunnel_DOWN”


    Отличаются они только экранированием знака ? в URL.
  4. Владислав Майструк
    Владислав Майструк Посетители 29 июня 2020 16:27
    + +5 -
    обратите внимание Message\?chat_id

    иначе вылезет сообщение failure: closing connection: <404 Not Found> 149.154.167.220:443 (4)

    tool fetch url="https://api.telegram.org/botXXXXXXXXXXXXX/sendMessage\?chat_id=XXXXXXXXXXX&text=test" dst-path=telegram.txt
  5. KvAnT
    KvAnT Гости 9 марта 2020 22:25
    + 0 -
    С компа и телефона трафик идёт через впн и все работает, а с самого микротика почему то идёт через провайдера и соответственно не работает, куда смотреть подскажите плз
  6. DmitryAVET
    DmitryAVET Создатель 9 февраля 2020 10:41
    + 0 -
    В таком случае это вопрос к вашему провайдеру
  7. Григорий Гальванэску
    Григорий Гальванэску Посетители 8 февраля 2020 16:16
    + -1 -
    Не работает ни в одном боаузере
  8. DmitryAVET
    DmitryAVET Создатель 7 февраля 2020 19:59
    + 0 -
    сайт вообще открывает с обычного браузера?
  9. Григорий Гальванэску
    Григорий Гальванэску Посетители 7 февраля 2020 19:50
    + +1 -
    При попытке проверить доступность api получаю ответ
    Сайт api.telegram.org не позволяет установить соединение.
  10. DmitryAVET
    DmitryAVET Создатель 13 сентября 2019 22:04
    + 0 -
    Для кириллицы следует использовать URL Encode. Сгенерируйте текст через urlencoder.org или аналогичный сервис, это самый простой вариант.
  11. Гость Виталий
    Гость Виталий Гости 12 сентября 2019 16:21
    + -2 -
    А как получилось отправлять сообщения с кириллицей? если ввожу после text= сообщение на русском, то ничего не происходит.
  12. Сергей
    Сергей Гости 9 апреля 2019 15:37
    + +3 -
    Спасибо за полезную статью!
    Подскажите, как сделать так, чтобы сообщения от созданного бота приходили не только мне, но и избранным контактам?
    Если у другого человека ищу поиском бота – нахожу, но сообщения ему не приходят... Пробовал создать группу и добавить нужных людей и бота – все равно сообщения приходят только мне.
  13. Игорь
    Игорь Гости 6 декабря 2018 04:12
    + +1 -
    Спасибо за статью - завтра будет чем заняться :)
  14. Алексей
    Алексей Гости 7 ноября 2018 11:01
    + 0 -
    Хорошая статья, спасибо Вам. Единственным сюрпризом оазалось, что в терминале микротика нельзя набрать "?" иза этого скрипт поначалу не работал. Нужно его прописывать в Netwacth и все заработает.
  15. Богдан
    Богдан Гости 3 ноября 2018 22:46
    + +1 -
    Подскажите как настроить такие уведомления, но только для подключений или отключений клиентов сети? Требуется для работы, чтобы понимать удалённо, кто сейчас на работе, а кто нет? Обычно когда работник приходит на работу его телефон, будь то ноутбук подключается к нашей точке доступа.
  16. Art
    Art Гости 28 августа 2018 09:30
    + 0 -
    Тестил отправку сообщений через терминал прежде чем вписать в нетвоч. и получал стабильно ошибку 404. Оказалось что символ "?" не может быть использован в терминале, в нетвоче все пошло по маслу.
    1. Гость Alex
      Гость Alex Гости 9 июля 2020 01:14
      + 0 -
      вставляется так - \?
  17. Михаил
    Михаил Гости 27 августа 2018 16:49
    + 0 -
    из браузера сообщение уходит все ок а микротик выдает ошибку
    <404 Not Found> 149.154.167.220:443 (4)
    1. DmitryAVET
      DmitryAVET Создатель 27 августа 2018 20:17
      + 0 -
      404 обозначает "страница не найдена", иными словами, URL сформирован неверно и ведет на несуществующую страницу.
  18. Александр Соловьев
    Александр Соловьев Гости 7 июня 2018 13:48
    + 0 -
    При попытке отправить тестовое сообщение через терминал микротика выдает ошибку: "failure: invalid url protocol" подскажите что это
  19. Дмитрий
    Дмитрий Гости 10 мая 2018 17:21
    + 0 -
    Сначала пишет connecting а потом вот:
    status: failed

    failure: closing connection: <404 Not Found> 149.154.167.220:443 (4)
    Подскажите, пожалуйста, что я не так делаю). Спасибо.
    1. DmitryAVET
      DmitryAVET Создатель 10 мая 2018 22:01
      + -2 -
      Неправильно формируете URL, система же отдает вам ответ 404.
    2. Арсений
      Арсений Посетители 27 августа 2018 17:58
      + +1 -
      в обновленных версиях ROS надо синтаксис команды изменить
      чтобы отправлялось во первых проверьте что роутер видит api.telegram.org
      далее текст запроса
      /tool fetch url="https://api.telegram.org/botXXXXXXX:AAFZJtaHT_of7tV9IPEyK9R9XXXXFtk9_Ap-Pvk/sendMessage\?chat_id=XXXXXX&text=[TimeAndDate] Nodo: [Device.Name], Status: [Service.Status]" keep-result=no
      1. DmitryAVET
        DmitryAVET Создатель 27 августа 2018 20:15
        + 0 -
        вполне корректно работает с тем кодом, который я привел. Перепроверил на 6.42.7 - уведомления приходят.
  20. Dimon “DimonW” Wek
    Dimon “DimonW” Wek Посетители 6 мая 2018 21:56
    + +1 -
    :global temp1
    :set temp1 40
    :global temp2 [/system health get temperature]
    :if ($temp2 > $temp1) do= {/tool fetch url=("https://api.telegram.org/bot<ваш токен>/sendmessage\?chat_id=IDIDIDID&text=Warning!!! $temp2 temperature. ") keep-result=no}

    на некоторых микротиках есть датчик температуры, таким образом мы можем получать уведомлениеесли в помещении стало жарковато :)
    1. DmitryAVET
      DmitryAVET Создатель 6 мая 2018 23:19
      + -1 -
      у hAP ac2 рабочая от 40 градусов) а под нагрузкой и целых 52 набирает)))
      1. Dimon “DimonW” Wek
        Dimon “DimonW” Wek Посетители 7 мая 2018 18:13
        + 0 -
        в помещении с кондиционером таких температур не будет :)
        1. DmitryAVET
          DmitryAVET Создатель 7 мая 2018 22:54
          + 0 -
          При 23 в помещении греется 45 легко
  21. Алексей
    Алексей Гости 6 мая 2018 16:16
    + 0 -
    Всё встало в самом начале, на абзаце "Следующим шагом рекомендуется проверить доступность API для вашего бота, делается это в браузере, путем открытия специального URL..."

    все браузеры пишут "Не возможно отобразить страницу". Где затык?
    1. DmitryAVET
      DmitryAVET Создатель 6 мая 2018 16:57
      + 0 -
      Проверяли по ссылке?
      https://api.telegram.org/bot<ваш_токен>/getMe

      Где <ваш_токен> меняется на ваш токен.
      Уверен, вы где-то допустили ошибку.
      1. Алексей
        Алексей Гости 7 мая 2018 04:13
        + 0 -
        Через VPN зашёл. Но не так как у вас на картинке - не такая красивая и цветная, - строго текст с информацией. Скорей всего связанно с борьбой Роскомнадзора и Telegram... На нормальной работе бота будет также это отражаться?
        Вот так у меня в браузере, чисто строка с текстом вверху страницы (в одну строку всё):
        {"ok":true,"result":{"id":583514311,"is_bot":true,"first_name":"Mikrotik_blablabla","username":"blablabla_bot"}}
        1. DmitryAVET
          DmitryAVET Создатель 7 мая 2018 09:18
          + 0 -
          Не имеет значения, цветное или нет, просто мой браузер поддерживает json-формат и выполняет подсветку синтаксиса. Ваш либо не поддерживает, либо данная возможность отключена.

          В РФ телеграм заблокирован, насколько я знаю, так что для работы уведомлений необходимо, чтобы у роутера был доступ к сервису Telegram. Как вы это реализуете - без разницы.

          Само собой разумеется, на смартфоне у вас также должен быть доступ к Telegram.
      2. Олег
        Олег Гости 30 сентября 2018 23:47
        + 0 -
        .....getMe показала

        .....getUpdates показала всего лишь

        Перепробовал другие браузеры, результат тот же.
        1. DmitryAVET
          DmitryAVET Создатель 1 октября 2018 09:08
          + 0 -
          пробуйте Firefox, он структурирует и подсвечивает синтаксис
        2. Додя
          Додя Гости 7 декабря 2022 12:27
          + 0 -
          Вы не запустили бота, перефдите в бот в телеграмме и нажмите /start .
          После напишите что нибудь ему в боте и перейдите на гетапдейтс
          будет вам результат.

Обновление Mikrotik RouterOS 6.45.1: важные исправления безопасности и

20 июня компания Mikrotik опубликовала в своем блоге короткую заметку , имеющую отношение к уязвимостям CVE-2019-11477, CVE-2019-11478 и...

Начиная с RouterOS 6.43, Winbox будет использовать безопасное соединение с

Тем, кто пользуются устройствами Mikrotik RouterBOARD на уровне более продвинутых пользователей, хорошо известна утилита под названием Winbox. По...

Автоматическая проверка обновлений RouterOS, уведомление о новых версиях при

Ранее мы уже неоднократно говорили о необходимости своевременного обновления программного обеспечения Mikrotik. Иногда в RouterOS встречаются...

Управление Mikrotik удаленно при помощи SMS

В двух предыдущих публикациях я уже рассказывал, как можно очень просто подключить 3G-модем к маршрутизаторам Mikrotik и настроить автоматическое...

Mikrotik Advanced Failover: автоматическое переключение между основным каналом

В рамках вводной публикации, опубликованной ранее, были изложены основные моменты подключения 3G-модема к маршрутизатору Mikrotik, на примере Huawei...

Построение сети HotSpot на Mikrotik: Часть 2. Настройка CAPsMAN, удаленное

Чуть ранее мы опубликовали инструкцию по созданию и настройке HotSpot на маршрутизаторах Mikrotik под управлением операционной системы RouterOS. В...

авторизация на сайте

Забыли пароль?