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