Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    Создание скрипта для отправки SMS

    Создание скрипта для отправки SMS

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Создание скрипта для отправки SMS, RouterOS
     
    ludycro
    Guest
    #1
    0
    10.01.2024 11:08:00
    Привет! Я только что получил свой Chateau 5G и нужна помощь. Не найдётся ли добрый человек, который мог бы написать для меня скрипт? Я никогда не пользовался оборудованием Mikrotik, поэтому буду очень признателен за помощь. У моего провайдера есть тариф без ограничений по трафику, но чтобы его активировать, нужно отправлять SMS после каждых 10 ГБ трафика. Возможно ли настроить скрипт, который отправит SMS после прохождения 9 ГБ? Мне нужно отправить SMS с текстом «NASTAVI» (без кавычек) на номер 13880. Кто-нибудь, пожалуйста, может написать этот скрипт? Интерфейс, как я понимаю, называется lte1. Огромное спасибо заранее!
     
     
     
    rextended
    Guest
    #2
    0
    25.02.2024 11:39:00
    Поскольку SMS бесплатны, отправляйте по одному сообщению каждые 12 часов... или вы используете больше 60 ГБ каждые 12 часов? https://telemach.hr/poslovni/mobilna-telefonija

    Настоящая проблема в том, что 5G не был задуман как замена оптоволоконным линиям, об этом и говорят, но при этом каждая компания так или иначе пытается помешать тем, кто этим пользуется, как вы двое и пытаетесь сделать.
     
     
     
    hafte
    Guest
    #3
    0
    25.02.2024 06:08:00
    Я на той же стороне. Кто-нибудь может помочь нам обойти это ограничение провайдера в 10 ГБ? Нужно как-то отслеживать использование данных на LTE-интерфейсе и отправлять SMS, когда квота исчерпана.
     
     
     
    hafte
    Guest
    #4
    0
    02.03.2024 16:08:00
    Спасибо, @optio, я готов. Всё настроено, буду наблюдать за поведением в ближайшие дни. Ещё раз спасибо за все подсказки и помощь.
     
     
     
    Dezoteck55
    Guest
    #5
    0
    12.04.2024 02:36:00
    Привет! После довольно тяжёлого старта — сломанного Webfig, неотвечающего модема — я наконец стал более-менее врубаться. Я вообще новичок в Mikrotik, и мой первый опыт с RouterOS был на ATL LTE18 Kit. Короче говоря, оказалось, что обновлённая версия RouterOS идёт с вполне приличной базовой конфигурацией, которая начинает работать сразу после ввода PIN-кода SIM-карты. Потом я добавил ещё несколько своих настроек.

    Я хорошо подготовился, много читал онлайн-руководства, вникал в тему LTE и мобильных технологий, изучал, как работают базовые станции, смотрел cellmapper.net, разбирался с частотами и так далее. Потом возникла проблема с удалённым управлением — кто-то более опытный объяснил, что дело в CGNAT, и что нужно связываться с провайдером. Шансы, что провайдер пойдёт навстречу с исключениями, отключением или пробросом — минимальны. Сначала провайдер предложил включить статический IP, о котором я даже не знал, что для мобильных сетей это возможно. Я привык к статике дома, и там тоже была долгая история с Carrier-Grade NAT и переговорами, но в итоге оказалось, что у этого провайдера/оператора, если включить статический IP, CGNAT просто выключается, и проблема решается быстро. Кстати, сам ISP мало что знает про CGNAT и о том, что он автоматически отключается со статикой.

    Я вернулся сюда, чтобы разобраться с одним серьёзным ограничением: нужно отправлять SMS-подтверждения провайдеру, чтобы продлить интернет-сессию или, точнее, обнулить счётчики трафика. Оператор Telemach в Словении даёт лимит 30 ГБ в сутки, после чего скорость сбрасывается до минимальных 64/64 Кбит/с. Но счётчики сбрасываются автоматически через 24 часа или при переподключении сессии. Пользователям выключать и включать антенну «по-быстрому» — плохо, им тогда придётся постоянно звонить мне, если что-то пойдёт не так с ATL. А входить в управление и самому ковыряться в админке, чтобы отправить SMS через WinBox или SSH — это уже последний вариант, наверное.

    Вот что я думал: теперь, когда я начинаю работать с SMS, было бы здорово сделать так, чтобы ATL отправлял SMS провайдеру при получении от меня с телефона команды — например, с помощью функции run script, которая требует «Secret». Это, конечно, не полностью автомат, но будет куда проще для пользователей, если я дам им инструкции, как отправить SMS с их телефона. Провайдер говорит, что автоматический ежедневный сброс не гарантируется, а после всех тестов и повседневного использования я три раза превышал лимит, даже не замечая этого.

    В RouterOS, наверное, можно настроить предупреждение при получении SMS, да? Наверняка есть правило логирования, которое можно настроить. Потом, когда я разберусь получше, может быть, сделаю скрипт, который будет отправлять SMS на один из моих телефонов при получении любых сообщений на модем от определённого номера, например от провайдера.

    Ещё хорошо, что SMS от провайдера всё равно приходят, хоть в дефолтной конфигурации «Receive» и не настроен, а мои тестовые SMS с телефона вообще не отображаются.

    Пока что мне нужно закончить первоначальные настройки, чтобы можно было установить антенну. Лимит в 30 ГБ, наверное, не станет проблемой для базовых операций, но у меня есть планы по ТВ и системе безопасности — и это всё сложится в большую нагрузку, так что, наверное, всё-таки может стать проблемой.

    Отпишусь позже, может, самостоятельно допилю скрипт, но это последнее, что собираюсь делать.

    П.С. Временная отметка в SMS-входящих малоинформативна — часть сообщений с более поздним временем отображается, как будто пришли раньше. Провайдер шлёт длинные сообщения о квотах, которые разбиты на 2–3 части, и у них у всех одинаковые временные метки. Возможно, временные метки просто не могут быть более точными в рамках всей сотовой сети и стандарта SMS, и тогда уже ничего с этим Mikrotik не сделает?
     
     
     
    optio
    Guest
    #6
    0
    25.02.2024 14:33:00
    @ludycro, @hafte Вы можете использовать один из этих двух скриптов в событии планировщика (при старте с некоторым интервалом, например, 5 минут).

    Скрипт с интерфейсом rx/tx байт с сохранением данных в комментарии интерфейса:  
    local smsSendThresholdMiB 9216  
    local smsNumber "13880"  
    local smsMessage "NASTAVI"  
    local wanIf "lte1"

    /interface  
    if ([get $wanIf disabled] || ![get $wanIf running]) do={ :return [:nothing] }
    local rx [get $wanIf rx-byte]
    local tx [get $wanIf tx-byte]
    if ($rx = 0 && $tx = 0) do={ :return [:nothing] }
    reset-counters $wanIf  
    local bts ($rx + $tx + [:tonum [get $wanIf comment]])

    if (($bts / 1048576) > $smsSendThresholdMiB) do={  
       set $wanIf comment=0  
       /tool/sms/send phone-number=$smsNumber message=$smsMessage  
    } else={  
       set $wanIf comment=$bts  
    }

    Скрипт с интерфейсом rx/tx байт с сохранением данных в файле:  
    local smsSendThresholdMiB 9216  
    local smsNumber "13880"  
    local smsMessage "NASTAVI"  
    local wanIf "lte1"  
    local bytesFile "flash/$wanIf_bytes.txt"

    /interface  
    if ([get $wanIf disabled] || ![get $wanIf running]) do={ :return [:nothing] }
    local rx [get $wanIf rx-byte]
    local tx [get $wanIf tx-byte]
    if ($rx = 0 && $tx = 0) do={ :return [:nothing] }
    reset-counters $wanIf

    local lastBytes 0  
    /file  
    if ([find name=$bytesFile] != "") do={
       set lastBytes [:tonum [get $bytesFile contents]]
    } else={  
       add name=$bytesFile contents=0  
    }

    local bts ($rx + $tx + $lastBytes)

    if (($bts / 1048576) > $smsSendThresholdMiB) do={  
       set $bytesFile contents=0  
       /tool/sms/send phone-number=$smsNumber message=$smsMessage  
    } else={  
       set $bytesFile contents=$bts  
    }

    Если к устройству подключен USB-диск, можно изменить путь bytesFile на путь к USB-диску вместо flash.

    P.S. Скрипт не знает, сколько трафика было до первого запуска планировщика, поэтому лучше сбросить счётчики интерфейса ( /interface/reset-counters lte1 ) и вручную отправить SMS, чтобы калибровать квоту при создании планировщика. В общем, чтобы откалибровать скрипт, если он уже работал — просто очистите комментарий интерфейса или удалите файл с байтами (в зависимости от того, какой скрипт используете), сбросьте счётчики интерфейса и вручную отправьте SMS, предполагая, что провайдер сразу сбросит квоту при отправке SMS.
     
     
     
    hafte
    Guest
    #7
    0
    26.02.2024 06:30:00
    @option спасибо. Реализовал вариант 1, похоже, работает. Буду следить за этим в ближайшие дни. У меня LTE RBLHGGR, который не поддерживает USB, и использование команды с байтами предотвращает сброс при перезагрузке роутера. Другой вариант — отправлять СМС каждые 4-6 часов, не беспокоясь о трафике. Всем спасибо.
     
     
     
    optio
    Guest
    #8
    0
    26.02.2024 10:41:00
    Просто будь осторожен с этим и не используй короткие интервалы планировщика, так как у флеша ограниченное количество циклов записи секторов. Настраивай запись комментариев на флеш и также при использовании файлов по пути flash/*. Использование USB-накопителя — альтернатива, чтобы избежать износа флеша, ведь USB-накопитель легче поменять при износе (по той же причине для контейнеров рекомендуется использовать USB-накопитель).
     
     
     
    hafte
    Guest
    #9
    0
    28.02.2024 16:33:00
    Скрипт в целом работает, но с ним сложно синхронизироваться, и со временем он всё равно выходит из синхронизации, потому что подсчет трафика у провайдера и локальный считаются по-разному. Было бы полезнее, если при получении SMS о достижении квоты скрипт отправлял бы SMS провайдеру.  
    Как найти конкретное слово в тексте SMS и сделать что-то? Например, если в сообщении есть «10 GB» и «1237», выполнить /tools/sms/send.  
    Мой провайдер использует кириллицу в сообщениях, но основная часть текста отображается в виде ???. Это совсем не помогает.

    0  Vivacom-LTE   1237  2024-02-28 18:01:44+02:00  ??? ??? ??? 10 GB ??? ???, ??? ?? ???  
    1  Vivacom-LTE   1237  2024-02-28 18:01:44+02:00  ? ?? ??? 10 GB ??? ?? ??? ?? ??? 1237.
     
     
     
    optio
    Guest
    #10
    0
    28.02.2024 16:49:00
    Ты уверен, что провайдер не сбрасывает квоту сразу после достижения лимита, а не сразу после отправки СМС, что и вызывает рассинхронизацию? В таком случае сначала нужно будет достичь лимита квоты, а потом калибровать скрипт, но всё равно понадобится небольшое изменение в скрипте — добавить разницу между лимитом квоты и порогом по байтам после сброса.

    Что касается резервного варианта — мониторить папку входящих СМС и отправлять СМС при получении такого сообщения — это возможно реализовать, но потребует дополнительной работы над скриптом, чтобы следить за входящими сообщениями. Сейчас я занят написанием этой дополнительной логики. В твоём случае это сложнее, потому что ROS не умеет работать с не ASCII-кодировками (UCS-2) из SMS PDU, а для точного сравнения текста СМС нужен отдельный скрипт для правильного декодирования. Вот мой скрипт именно для этого — чтобы правильно читать СМС (он также склеивает сообщения длиной более 160 символов в одну запись, чего в ROS SMS inbox нет) без использования инструмента ROS /tool/sms/inbox: sms-read.rsc (33.7 KB).

    P.S. Что касается правильного декодирования текста СМС, думаю, есть мало шансов, что в теле полученного сообщения для другой цели появится фраза «10 GB», так что можно просто по регулярному выражению искать такое сообщение, без необходимости использовать правильное кодирование через /tool/sms/inbox для мониторинга СМС в скрипте.
     
     
     
    hafte
    Guest
    #11
    0
    28.02.2024 18:57:00
    Привет, @optio, спасибо за скрипт, но он слишком сложный для моих знаний. Мне нужно что-то простое и понятное. Я добился небольшого прогресса, что поможет мне и выглядит просто, но нужна помощь, чтобы всё заработало. По крайней мере, команда find работает и возвращает положительный результат, если SMS содержит 1237, чего должно быть достаточно, чтобы установить переменную в true.

    :put [/tool sms inbox find where message ~“1237”] *49;
    Это то, что я начал писать в качестве идеи, но мои знания очень базовые.  

    ###################################  

    :global smsMessageRequired  
    :if [/tool sms inbox find where message ~“1237”] do={
       :set $smsMessageRequired=True  
       :if $smsMessageRequired=true do={  
           /tool/sms/send Vivacom-LTE phone-number=1237 type=class-1 status-report-request=no message=traffic  
           :set $smsMessageRequired=false  
           /tool sms inbox remove [ find where message ~“1237”];
       }  
       :log warning (“Sent SMS 10GB Trafic Reset”);  
    }  

    ##################################
     
     
     
    optio
    Guest
    #12
    0
    28.02.2024 20:12:00
    Если это вам подходит, отлично, если WAN-сеть не блокируется между интервалами планировщика (провайдер даёт небольшой запас по трафику или времени до отправки SMS, когда квота достигнута)… или вы хотите встроить эту функцию в логику уже существующего скрипта? Если нужно лучше очищать сообщения, лучше ориентироваться на «10 GB», потому что, судя по всему, это одиночное разделённое сообщение, и тогда удалятся оба записи, если только вы не получаете другие сообщения с текстом «10 GB». Для команды отправки SMS, если хотите уменьшить размер скрипта, status-report-request=no (это даже не документировано) и type=class-1 не нужны, так как, насколько я знаю, это значения по умолчанию.
     
     
     
    hafte
    Guest
    #13
    0
    29.02.2024 08:16:00
    WAN-сеть не заблокирована, но ограничена до 64 Кбит, в основном работает только пинг. У меня нет скрипта, но приведённый выше пример — моя отправная точка. Мне как-то нужно его доработать и заставить работать, но с моими знаниями это будет настоящая битва «истина или ложь».
     
     
     
    optio
    Guest
    #14
    0
    29.02.2024 13:55:00
    Я имел в виду, используешь ли ты эту проверку SMS вместе с логикой из моего предыдущего скрипта, который ты пробовал, но который по какой-то причине сбивается с синхронизации... Но если хочешь просто проверить входящие SMS, то с первого взгляда твой скрипт, возможно, нуждается в исправлениях, но что-то подобное можно запустить через планировщик задач. Может быть, на выходных у меня будет время его пересмотреть, а пока можешь попробовать проверить сам, работает ли он, и исправлять ошибки, изучая руководство по скриптам и мои советы из предыдущего поста.
     
     
     
    hafte
    Guest
    #15
    0
    02.03.2024 10:37:00
    С некоторыми вопросами "Верно или неверно" ниже, кажется, всё работает:

    :global smsMessageRequired  
    :if [/tool sms inbox find where message ~"1237"] do={
     :set $smsMessageRequired value=true  
    } else={  
     :set $smsMessageRequired value=false  
    }  
    :if ($smsMessageRequired = false) do={:return [:nothing]}
    :if ($smsMessageRequired = true) do={  
     /tool/sms/send Vivacom-LTE phone-number=1237 status-report-request=no message=traffic  
     :set $smsMessageRequired value=false  
     :log info "Отправлено SMS для сброса Traffic"  
     /tool sms inbox remove [find];
    }

    Единственная проблема в том, что не все SMS удаляются из входящих, чтобы подготовиться к следующему циклу. Возникает ошибка: Vivacom-LTE, удаление SMS, AT prefered (#=7) не удалось: +CMS ERROR: unknown error (6), и удаляется только одно из SMS. Вероятно, это связано с тем, что SMS на кириллице и разбиты на три отдельных сообщения.

    Но как заставить их удалить полностью? Может, стоит команду удаления выполнять, например, 10 раз?  

    /tool sms inbox remove [find];
    /tool sms inbox remove [find];
    /tool sms inbox remove [find];
    /tool sms inbox remove [find];
    /tool sms inbox remove [find];
     
     
     
    optio
    Guest
    #16
    0
    02.03.2024 13:07:00
    Не могу понять, где именно проблема с удалением SMS, попробуйте обновить ROS до версии 7.14, там есть исправление, связанное с удалением SMS:  
    *) modem – исправлено удаление SMS (введено в версии 7.13);  

    Вот скрипт, который пытается удалить SMS в рекурсии, пока не получится без ошибки, с максимальным числом попыток 10, контролируемым переменной maxRetry:  

    :local removeAllSMS do={  
     :do {  
       /tool/sms/inbox/remove [find]
     } on-error={  
       :if ($retryCnt < $maxRetry) do={  
         $removeAllSMS removeAllSMS=$removeAllSMS retryCnt=($retryCnt + 1) maxRetry=$maxRetry  
       }  
     }  
    }  

    :global sendingSMS  
    :if (!$sendingSMS && [/tool sms inbox find where message ~"1237"]) do={
     :set sendingSMS true  
     :do {  
       /tool/sms/send Vivacom-LTE phone-number="1237" status-report-request=no message=traffic  
     } on-error={  
       :set sendingSMS false  
       :local errMsg "Отправка SMS для сброса трафика не удалась"  
       :log error $errMsg  
       :error $errMsg  
     }  
     :log info "Отправка SMS для сброса трафика"  
     $removeAllSMS removeAllSMS=$removeAllSMS retryCnt=1 maxRetry=10  
     :set sendingSMS false  
    }
     
     
     
    infabo
    Guest
    #17
    0
    01.07.2024 10:45:00
    Открыл заявку в службу поддержки с просьбой добавить документацию для этого параметра (SUP-157649). Сегодня получил счёт от моего провайдера за «подтверждение получения SMS», о чём я не знал — оказывается, ROS по умолчанию включён, что я нахожу довольно странным.
     
     
     
    Hispithee
    Guest
    #18
    0
    05.02.2025 11:39:00
    Я просто ищу ответ на этот вопрос. Спасибо за обсуждение!
     
     
     
    hafte
    Guest
    #19
    0
    05.02.2025 14:41:00
    Я использую этот скрипт для автоматической отправки СМС:

    :global smsMessageRequired  
    :if [/tool/sms/inbox find where message ~"1237"] do={
     :set $smsMessageRequired value=true  
    } else={  
     :set $smsMessageRequired value=false  
    }  
    :if ($smsMessageRequired=true) do={  
     /tool/sms/send Vivacom-LTE phone-number=1237 status-report-request=no message=traffic  
     :set $smsMessageRequired value=false  
     :log info "Автоматическая отправка СМС для сброса трафика"  
    }  
    /tool/sms/inbox remove [find where phone ~"1237"];

    Также у меня есть команда на ручную отправку того же сообщения:  
    /tool/sms/send Vivacom-LTE phone-number=1237 type=class-1 status-report-request=no message=traffic  
    :log info "Ручная отправка СМС для сброса трафика на 10ГБ";

    Скрипт работает, и планировщик настроен на проверку входящих СМС от номера 1237 каждые 5 минут, чтобы отследить, что квота достигнута.
     
     
     
    Njumaen
    Guest
    #20
    0
    10.02.2025 09:15:00
    Скрипт с интерфейсом rx/tx байтов и сохранением в файл отлично работает у меня! Так как у моего SXT (используется для резервного WAN) нет порта для USB-накопителя, я использую sshfs, чтобы подключиться к своему основному роутеру и смонтировать его локальное USB-хранилище для сохранения файла. Ralf.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры