Текстовые сообщения в Asterisk

в 7:12, , рубрики: asterisk, sms, метки: ,

Ещё недавно пересылка текстовых сообщений была возможна только в контексте звонка, однако, с появлением десятой версии Asterisk, стало возможно обмениваться ими напрямую. Это открывает нам широкие возможности по массовому информированию абонентов, по взаимодействию с сотовыми сетями, ну и, разумеется, по общению между абонентами.

Итак, нам понадобится Asterisk десятой версии, в конфигурации которого необходимо указать следующее:

sip.conf

textsupport=yes                                                                                                                                                                               
accept_outofcall_message = yes                                                                                                                                  
outofcall_message_context = messages

extensions.conf

[messages]                                                                                                                                                                                    
exten => _X.,1,Set(ACTUALTO=${CUT(MESSAGE(to),@,1)})                                                                                                                                          
exten => _X.,n,MessageSend(${ACTUALTO},${MESSAGE(from)})                                                                                                                                      
exten => _X.,n,NoOp(Send status is ${MESSAGE_SEND_STATUS})                                                                                                                                    
exten => _X.,n,GotoIf($["${MESSAGE_SEND_STATUS}" != "SUCCESS"]?sendfailedmsg)                                                                                                                 
exten => _X.,n,Hangup()                                                                                                                                                                       
;                                                                                                                                                                                             
; Handle failed messaging                                                                                                                                                                     
exten => _X.,n(sendfailedmsg),Set(MESSAGE(body)="[${STRFTIME(${EPOCH},,%d%m%Y-%H:%M:%S)}] 
Your message to ${EXTEN} has failed. Retry later.")                                                 
exten => _X.,n,Set(ME_1=${CUT(MESSAGE(from),<,2)})                                                                                                                                            
exten => _X.,n,Set(ACTUALFROM=${CUT(ME_1,@,1)})                                                                                                                                               
exten => _X.,n,MessageSend(${ACTUALFROM},ServiceCenter)                                                                                                                                       
exten => _X.,n,Hangup()                                                                                                                                                                       

Тут небольшое пояснение — в целях безопасности я оставляю только часть адреса получателя до @, поскольку не планирую транзитную пересылку сообщений. Функция MessageSend — это как раз то самое, что нужно для отправки сообщения SIP абоненту. В качестве параметров она принимает адрес получателя и опциональный адрес отправителя. Сам текст передается через переменную ${MESSAGE(body)}. Если немного модифицировать этот контекст, тогда можно будет отправлять SMS в сотовые сети (тут кому как ближе — через GSM шлюз или через какого-нибудь SMS оператора, коих нынче великое множество — на любой вкус и кошелек).

Автор: Rumka

Поделиться

  1. Александр:

    Добрый день!
    В качестве эксперимента развернул два сервера Asterisk 14.5 в одной локальной сети
    Соединил через SIP (звонки идут), а сообщения не получется слать. выдает ошибку.
    Можете уточнить для пересылки что-то кроме адреса: @aster2 (адрес второго сервера) нужно что-то указать?

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