Первый — регистрация статуса пира держится какое то время после обрыва, и вполне возможна ситуация, когда пир кратковременно зарегистрируется и отвалится, а система «отправит» в течение минуты ему сообщение, и будет считать его доставленным. Выкрутится можно, использовав не Application в call-файле, а передачу данных в контекст с проверкой статуса переменной ${MESSAGE_SEND_STATUS}. Наверное, возможно будет использовать имеющийся контекст, задав переменные через Set в call-файле.
Наверное будет как-то так.
${MESSAGE_SEND_STATUS} подтверждает только отправку. https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_MessageSend
Получаем статус пира и uri (Status и RegContact):
Action: SIPshowpeer
Peer: 3030
Response: Success
Channeltype: SIP
ObjectName: 3030
ChanObjectType: peer
Codecs: (ulaw|alaw|gsm|h263)
Status: OK (19 ms)
SIP-Useragent: Yealink SIP-T27P 45.80.0.60
Reg-Contact: sip:3030@192.168.100.101:5060
QualifyFreq: 60000 ms
SIP-Use-Reason-Header: N
Description:
Можно перед этим отправить qualify запрос. Чтобы быть уверенным в статусе.
Отправляем сообщение.
action: messagesend
to: sip:3030@192.168.100.101:5060
from: sip:3030@192.168.100.101:5060
body: abra cadabra
Response: Success
Message: Message successfully sent
Статус доставки не отдается. Проверяется только отправка. Как собственно и приложение MessageSend, которое вы используете в плане набора. Либо делайте проверку статуса девайса в диалплане.
Наверное будет как-то так.
${MESSAGE_SEND_STATUS} подтверждает только отправку. https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Application_MessageSend
Получаем статус пира и uri (Status и RegContact):
Можно перед этим отправить qualify запрос. Чтобы быть уверенным в статусе.
Отправляем сообщение.
https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+ManagerAction_MessageSend
Статус доставки не отдается. Проверяется только отправка. Как собственно и приложение MessageSend, которое вы используете в плане набора. Либо делайте проверку статуса девайса в диалплане.