MacroSIP
EnglishРусский中文

Asterisk и FreePBX: SMS через chan_dongle

Предупреждение. Этот рецепт составлен по документации Asterisk и chan_dongle и ещё не проверялся на живой АТС. Считайте его отправной точкой и при проверке следите за консолью Asterisk (asterisk -rvvv).

Как это работает

  1. Для входящей SMS chan_dongle запускает канал диалплана в контексте, указанном в context= файла dongle.conf, с номером sms. Номер отправителя лежит в CALLERID(num), текст — в ${SMS}.
  2. Диалплан превращает её в SIP MESSAGE командой MessageSend на PJSIP-endpoint (номер внутреннего).
  3. Asterisk отправляет MESSAGE на Contact, который зарегистрировал этот внутренний, тем же путём, что и INVITE. Поэтому сообщение доходит до MacroSIP, пока MacroSIP зарегистрирован под этим внутренним номером.
  4. Ответ из MacroSIP приходит на АТС как MESSAGE и попадает в message_context endpoint'а. Там диалплан либо пересылает его на другой внутренний, либо отправляет через модем командой DongleSendSMS.

FreePBX

В FreePBX для этого нет графического интерфейса. Диалплан кладётся в /etc/asterisk/extensions_custom.conf, параметр endpoint'а — в /etc/asterisk/pjsip.endpoint_custom_post.conf, затем выполните fwconsole reload.

Конфигурация

; extensions_custom.conf
; incoming SMS from the modem -> extension 1001
[from-dongle-sms]            ; the same name as context= in dongle.conf
exten => sms,1,NoOp(SMS from ${CALLERID(num)}: ${SMS})
 same => n,Set(MESSAGE(body)=${SMS})
 same => n,MessageSend(pjsip:1001,${CALLERID(num)})
 same => n,Hangup()

; messages from MacroSIP: to other extensions, or out through the modem
[messages]
exten => _XXXX,1,MessageSend(pjsip:${EXTEN},${MESSAGE(from)})
 same => n,Hangup()
exten => _+X.,1,DongleSendSMS(dongle0,${EXTEN},${MESSAGE(body)})
 same => n,Hangup()
; pjsip.endpoint_custom_post.conf
[1001](+)
message_context=messages

Замените 1001, dongle0 и шаблон номера на свои.

Что будет в MacroSIP

Известные ограничения

См. также Сообщения и Решение-проблем.