Połączenie centralki telefonicznej VoIP asterisk z siecią GSM

 Cześć!

Od jakiegoś czasu zacząłem używać serwera Asterisk do połączenia mojego telefonu z androidem, biurkowego, tego softwarowego na laptopie, oraz mojego kumpla z zewnątrz w jedną sieć telefoniczną. Osoby z zewnątrz dołączam dodatkowo przez VPNa, więc ryzyko podsłuchania rozmowy wewnętrznej (na poziomie ruchu poza LANem) jest mniejsze.

Rozmowy wewnętrzne działają i możliwość zadzwonienia do znajomego podłączonego do mojej centrali przez bezpieczne połączenie zapewnia niespotykane dotąd wrażenie podczas rozmowy, chociaż to tylko moja subiektywna opinia.

Tylko sieć bez "wyjścia na miasto" jest trochę słaba. Mam na myśli że fajnie by było, gdyby dawała nam możliwość wykonywania połączeń także poza naszą sieć.
Czasami pojawia się też potrzeba posiadania wielu numerów komórkowych - rozwiązanie pokazane tutaj przeze mnie również zadziała - asteriska można skonfigurować, by wykonywał połączenie korzystając z wybranego numeru. 

Przebywając za granicą możesz połączyć się ze swoją siecią VPN(którą kiedyś tutaj opiszę) w której działa centrala. I tak, posiadając modem, lub kilka podłączonych do centrali, możesz dzwonić do znajomych z polskimi numerami i płacić za to tak, jakbyś przebywał w Polsce(a przecież tam znajduje się centrala razem z modemem/mami).



Opiszę tutaj proces konfiguracji chan-dongle - to tak naprawdę sprawiło mi największą trudność.

Z pomocą przychodzi dodatek do Asteriska o nazwie chan-dongle. Jak nazwa wskazuje pozwala na wykonywanie połączeń z użyciem modemu komórkowego - dongla .

Ja korzystam z Huawei E156G. Sprawdźcie czy wasz modem jest na liście obsługiwanych - o tutaj https://github.com/bg111/asterisk-chan-dongle/wiki/Requirements-and-Limitations

Konfiguracja może być nieco skomplikowana. Przede wszystkim należy ściągnąć, skompilować, a następnie zainstalować chan-dongle. Jest to opisane na wiki projektu - https://github.com/bg111/asterisk-chan-dongle/wiki/Installation .

Uwaga! to ważne:
Przed kompilacją dodałem modem E156G do listy modemów obsługujących wiadomości ussd 7 bitowe. Znajduje się ona w pliku "at-response.c". Obrazek poniżej przedstawia już zmodyfikowany plik.
Bez tego nie miałem możliwości odbierania wiadomości USSD od operatora sieci komórkowej - na przykład o stanie konta!


Po podłączeniu modemu do serwera należy wywołać komendę dmesg | grep usb
Powinniśmy otrzymać informację o tym jakie nasz modem otrzymał nazwy w systemie:

Jedna z nich służy do wysyłania i odbierania komunikatów sterujących, na drugiej odbywa się komunikacja głosowa.

W moim przypadku audio=/dev/ttyUSB1 , a data=/dev/ttyUSB2 , takie dane należy wprowadzić w pliku konfiguracyjnym dongle.conf -> znajduje się w folderze /etc/asterisk/ . Jeżeli komuś nie zadziała, próbować z innymi kombinacjami. Po każdej zmianie konfiguracji należy zapuścić komendę reload w konsolce asteriska, i po chwili dongle show device state dongle0 w celu wyświetlenia stanu naszego modemu.
Przy poprawnym ustawieniu nazw urządzenia powinniśmy zobaczyć siłę sygnału RSSI, oraz numery IMEI i IMSI. 

Dalej w dongle.conf ustawiamy wcześniej odczytane numery IMEI oraz IMSI.

Należy także zakomentować wpis exten= znakiem ; .

Ustawienia po edycji wyglądają tak:




Teraz trzeba skonfigurować dialplan, czyli sposób w jaki mogą być traktowane połączenia przychodzące, u którego użytkownika zadzwoni telefon. Można też ustawić kto może wykonywać połączenia. 

Poniżej znajduje się moja konfiguracja wejściowa:

  • Zapisuje odebrane SMSy i komunikaty USSD do plików
  • Za każdym razem kiedy ktoś z zewnątrz zadzwoni loguje numer telefonu i czas
Druga część o połączeniach wychodzących w przygotowaniu.

Pozdrawiam
M.

[dongle-incoming]
include => dongle-incoming-call
include => dongle-incoming-sms
include => dongle-incoming-ussd

[dongle-incoming-call]
exten => s,1,Answer(500)
exten => s,n,Set(CALLERID(name)=Mob ${CALLERID(num)})
exten => s,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} -  INCOMING CALL from ${CALLERID(num)} on ${DONGLENAME}' >> /home/user/asteriskSIM/incoming-calls.txt )
exten => s,n,Dial(SIP/9005, 60, m(default))

[dongle-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}' >> /home/user/asteriskSIM/sms.txt)
exten => sms,n,Hangup()

[dongle-incoming-ussd]
exten => ussd,1,Set(type=${USSD_TYPE})
exten => ussd,n,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME}: ${BASE64_DECODE(${USSD_BASE64})}' >> /home/user/asteriskSIM/ussd.txt)
exten => ussd,n,Set(typestr=${USSD_TYPE_STR})


Komentarze

Prześlij komentarz

Popularne posty