MikroTik jako bramka SMS

Jedną spośród wielu funkcji jakie oferuje nam system RouterOS jest wysyłanie wiadomości SMS. Jej obsługa jest dosyć prosta i pozwala po odpowiednim „obudowaniu” uzyskać całkiem dobrą alternatywę do płatnych rozwiązań. W tym artykule opiszę pokrótce temat SMS oraz przestawię swoje autorskie rozwiązanie do wysyłania wiadomości SMS z MikroTik’a.


Jaki model MikroTik’a do wysyłania SMS ?

Tutaj tak naprawdę możliwości jest całkiem sporo jednak aby w ogóle można było wysyłać SMS urządzenie musi posiadać jedną z 2 rzeczy:

  • Slot na kartę SIM – tutaj mówimy głównie o urządzeniach pod transmisje LTE których ceny za nowe urządzenia wykoszą kilkaset złotych. Plusem tego rozwiązania jest brak problemu z kompatybilnością zewnętrznego modemu.
  • Port USB – i tutaj jest już pozornie łatwiej ponieważ takie urządzenie może już dostać na niewiele ponad 100zł (przykładowo najprostszy hAP).

W moim przykładzie wykorzystam już dość leciwy model 751U-2HnD z zewnętrznym modemem GSM Huawei E3131.


Obsługa SMS w RouterOS

Artykuł został przygotowany przy użyciu systemu RouterOS w wersji 6.43.4 (stable).

Na samym początku musimy się zastanowić na wybraniem modemu GSM. Główną kategorią podziału jest czy modem wspiera tzw. HiLink czy też nie. Różnica z puntu widzenia go przez system polega na tym że modem HiLink pojawia się w systemie jako interfejs LTE natomiast modem bez HiLink jest widoczny jako interfejs ppp. I szczerze powiedziawszy jeżeli myślimy głównie o wysyłaniu SMS przez niego możemy spokojnie wybrać modem bez HiLink.

Aby wysyłać SMS interfejs (ppp lub lte) w menu Interfaces musi być wyłaczony (disable).

W celu wysłania SMS przechodzimy do menu Tools->SMS i widzimy główną konfigurację modemu pod kątem wiadomości SMS.

W zależności jaki mamy modem wybieramy albo Serial dla modemów bez HiLink albo LTE dla modemów HiLink.

Następnie wybramy Port/Interface który zwykle będzie jeden.

Na górze okna znajduje się checkbox „Receive Enabled” który włącza obieranie SMS przez MikroTik’a. Proponuję wyłączyć tą opcję ponieważ po pierwsze szczerze mówiąc często po prostu nie działa (być może jest to kwestia modemu) i pobieranie wylatuje na time out oraz po drugie na czas sprawdzania wiadomości do odebrania blokuje modem przez co w tym czasie nie można wysłać SMS.

Okno wysyłania wiadomości ogranicza się do wybrania interfejsu (jak poprzednio) wpisania numeru telefonu (prefiksy kraju są obsługiwane) oraz treść wiadomości (maksymalnie 150 znaków, bez znaków diakrytycznych).

 

 


Mój system do wysyłania SMS

Przestawię teraz mój autorski system to wysyłania SMS. Link do pobrania go jest tutaj.

Wymagania

Do działania systemu potrzebujemy serwera WWW z interpreterem języka PHP oraz obsługą plików .htaccess – tak naprawdę 99% firm hostingowych spełni te wymagania w tym oferujących darmowe pakiety będzie odpowiednia. Oraz oczywiście routera MikroTik zdolnego wysyłać wiadomości SMS.

Uruchomienie systemu – część serwerowa

W pobranym archiwum znajduje się folder „Server”. Całą jego zawartość umieszczamy na serwerze. W kwestii konfiguracji interesują nas pliki:

users.php – jest to plik gdzie wpisujemy użytkowników mogących się logować do systemu oraz poziom ich uprawnień.

W systemie istnieją 3 poziomy uprawnień dotyczące widoku historii wiadomości:

  • 0 – użytkownik widzi tylko swoje SMS’y i może usuwać te które jeszcze nie zostały wysłane,
  • 1 – użytkownik widzi SMS’y wszystkich użytkowników ale może usuwać tylko swoje które jeszcze nie zostały wysłane,
  • 2 – użytkownik widzi SMS’y wszystkich użytkowników i może usuwać wszystkie które jeszcze nie zostały wysłane.

Wiadomości już wysłanych nikt nie może usunąć, no chyba że bezpośrednio z bazy danych.

Użytkownika podajemy w składni:

"nazwa użytkownika" => ["hasło zakodowane w MD5", poziom uprawnień]

Przykład zawartości pliku users.php:

<?php
$users = [
"jkowalski" => ["8A8D78EFC5274E70423ABD80DA1C249F", 2],
"pnowak" => ["B76FD33B85CFF91ECF359C23C6D151C7", 0],
];

export.php – za pomocą tego pliku skrypt działający po stronie RouterOS pobiera wiadomości do wysłania. Na jego górze podajemy adresy IP pod którymi będą działać urządzenia wysyłające SMS. Może być to też nazwa domenowa. Podajemy je w apostrofach po przecinku. Jeżeli nie chcemy weryfikować IP i pozwalać dowolnym hostom pobierać wiadomości wówczas usuwamy kod pomiędzy komentarzami „/* — Weryfikacja IP — */”.

$allow_ip = ['host1.example.com', '147.29.86.127'];

phpliteadmin.php (w katalogu sql) – służy do podglądu/edycji bazy danych przez przeglądarkę. Ustawione hasło to „mikrotikon.pl” – aby je edytować wystarczy edytować plik w zmienić linię:

$password = 'TWOJE TAJNE HASŁO';

Uruchomienie systemu – część na routerze MikroTik

W pobranym pliku zip jest również plik sms.rsc – jest to plik z skryptem wykonywanym po stronie systemu RouterOS. Dodajemy go w menu System->Script, wymaga uprawnień read oraz test.

Na początku skryptu znajdują się 3 linijki konfiguracji:

  • apiUrl –  adres url do lokalizacji gdzie jest umieszczony plik export.php (koniecznie poprzedzony http:// lub https://),
  • modemPort – port przez który wysyłany SMS (czyli to samo do wybieramy w menu Tools->SMS o polu Port),
  • countMax – maksymalna ilość SMS’ów jaka zostanie wysłana podczas jednego uruchomienia skryptu (jeśli będzie ich mniej do wysłania niż ustawiona wartość wówczas skrypt zakończy się szybciej).

Przykład:

#Konfiguracja
:local apiUrl "http://example.com";
:local modemPort "usb1";
:local countMax 50;

Obsługa systemu

Po wejściu na adres z umieszczonymi plikami pojawia się nam strona logowania gdzie logujemy się danymi z pliku users.php.

 

 

 

 

 

Po zalogowaniu widzimy formularz gdzie wpisujemy numer telefonu oraz wiadomość. Poniżej znajduje się lista wysłanych wiadomości zgodnie w zdeklarowanym poziomem uprawnień.

 

 

Wykonywanie skryptu na RouterOS

Jeśli chodzi o wydajność wysyłania SMS jest to kwestia do zbadania. Ja przyjąłem że skrypt wysyła maksymalnie 50 wiadomości i jest wykonywany co 5 minut. Jednak spokojnie wysłał by do 100 wiadomości w tym czasie.

Jest również jeden problem z wykonywaniem skryptu w obecnej wersji RouterOS – mianowicie każde pobranie SMS generuje wpis w logu. Problem jest rozwiązany w wersji 6.44 (w chwili pisania tego artykułu jest ona w wersji testing) gdzie funkcja fetch w tej składni nie jest logowana jeśli zakończy się sukcesem.