Настройка Asterisk для оптимизации расходов на сотовую связь

в 13:18, , рубрики: asterisk, gsm - шлюз, gsm модем, ip-телефония, метки: , ,

Дабы не тратить своё и Ваше время: в этом топике нету

  • руководства по настройке chan_datacard
  • руководства по настройке SIP в Asterisk
  • руководства по настройке VoIP-шлюзов и SIP-клиентов.

Всё это прекрасно гуглится, а при наличии опыта — помнится и не забывается.

Недавно встала задача поднять в небольшом офисе АТС.
Одним из требований было оптимально расходовать средства, выделяемые на мобильную связь: с МТСа звонить только на МТС, с БиЛайна — на БиЛайн, и так далее. Было решено использовать связку из Asterisk-а и нескольких незалоченных 3G-модемов: SIM-карты с оптимальными тарифами уже имелись. В качестве абонентских устройств использовались как софтфоны на рабочих местах сотрудников, так и обычные проводные телефоны, подключенные к VoIP-шлюзу.

Первое, что было сделано — найдены и переписаны DEF-коды отечественных сотовых операторов. Конечно же, не всех, а только большой тройки: для всех остальных вызовов планировалось использовать TELE2.
Затем был создан план внутренней нумерации: было решено, что внутренние номера будут четырехзначными, и будут начинаться с 5.

Звонка с SIP во внешний мир был присвоен контекст sip-incoming, внешним звонкам, поступающим с модемов — соответственно datacard-incoming. Определение нужного модема производилось при помощи MCC/MNC (Mobile Country Code/Mobile Network Code) префикса из IMSI SIM-карты. Код России — 250. Соответственно, у МТС MNC 25001, у МегаФона — 25002, у БиЛайна — 25099, у Теле2 — 25020.

В качестве программной платформы использовалась Ubuntu Linux 11.10 x86-64, и там, если мне не изменяет память — Asterisk 1.8. Для управления модемами был использован chan_datacard 310-й сборки.

Собственно, пример extensions.conf.

[datacard-incoming]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD} - ${CALLERID(num)}: ${SMS}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()

exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DATACARD}: ${USSD}' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()

exten => s,1,Dial(SIP/5001,,)
exten => s,n,Hangup()

[sip-incoming]
; сотовые операторы
exten => _8913XXXXXXX,1,Dial(Datacard/s:25001/${EXTEN})
exten => _8913XXXXXXX,n,Hangup
exten => _8983XXXXXXX,1,Dial(Datacard/s:25001/${EXTEN})
exten => _8983XXXXXXX,n,Hangup

exten => _8923XXXXXXX,1,Dial(Datacard/s:25002/${EXTEN})
exten => _8923XXXXXXX,n,Hangup

exten => _8903XXXXXXX,1,Dial(Datacard/s:25099/${EXTEN})
exten => _8903XXXXXXX,n,Hangup
exten => _8905XXXXXXX,1,Dial(Datacard/s:25099/${EXTEN})
exten => _8905XXXXXXX,n,Hangup

exten => _89XXXXXXXXX,1,Dial(Datacard/s:25020/${EXTEN})
exten => _89XXXXXXXXX,n,Hangup

; локальные номера
exten => _5XXX,1,Dial(SIP/${EXTEN})
exten => _5XXX,n,Hangup

Немного о настройке chan_datacard. 310-я сборка умеет отвязываться от конкретных портов указанием какой именно IMEI/IMSI ожидается для конкретного логического устройства. Я по привычке настроился на USB-псевдотерминалы.

пример из datacard.conf

[datacard0]
audio=/dev/ttyUSB1              ; tty port for audio connection;        no default value
data=/dev/ttyUSB2               ; tty port for AT commands;             no default value
context=datacard-incoming
autodeletesms=yes               ; auto delete incoming sms
resetdatacard=yes               ; reset datacard during initialization
u2diag=0                        ; set U2DIAG parameter (0 = disable everything except modem function)
usecallingpres=yes              ; use the caller ID presentation or not
callingpres=allowed_passed_screen ; set caller ID presentation

That's all, folks!

Автор: ne_kotin

Поделиться

* - обязательные к заполнению поля