Enviado por admin el
Asterisk y los mensajes instantáneos, canal chan_pjsip
Si queremos enviar/recibir mensajes instantáneos utilizando el canal chan_pjsip tenemos que seguir los siguientes pasos:
Configurar un parámetro por cada endpoint donde indicar el contexto utilizado para los MI; ejemplo:
[100]
type=endpoint
message_context=mensaje
IMPORTANTE: el parametro message_context no es soportado en el archivo pjsip_wizard.conf pues se puede configurar solamente en el archivo pjsip.conf
luego en el dialplan, suponiendo que las extensiones van de 100 a 109:
[mensaje]
exten => _10[0-9],1,Noop(Mensaje de ${MESSAGE(from)})
same => n,Noop(Mensaje para ${MESSAGE(to)})
same => n,Noop(Texto = ${MESSAGE(body)})
same => n,Messagesend(pjsip:${EXTEN},${MESSAGE(from)})
same => n,Hangup
Una limitación que tenía el canal chan_pjsip en comparación con el canal chan_sip es que no soportaba la variable ${MESSAGE_SEND_STATUS} que permite conocer el estado de envío del MI para poder, por ejemplo, implementar algo por el estilo:
[message]
exten => _10[0-9],1,Noop(Mensaje de ${MESSAGE(from)})
same => n,Noop(Mensaje para ${MESSAGE(to)})
same => n,Noop(Texto = ${MESSAGE(body)})
same => n,Set(dest=${EXTEN})
same => n,Messagesend(sip:${EXTEN},${MESSAGE(from)})
same => n,Noop(Estado del mensaje ${MESSAGE_SEND_STATUS})
same => n,GotoIf($["${MESSAGE_SEND_STATUS}" != "SUCCESS"]?failed,s,1)
same => n,Hangup
Si el envío no tiene éxito, se salta al contexto failed, extensión s, prioridad 1, donde:
[failed]
exten => s,1,Set(texto=${MESSAGE(body)})
same => n,Set(MESSAGE(body)="El Mensaje - ${texto} - para ${dest} no ha sido enviado")
same => n,Set(remit=${CUT(MESSAGE(from),<,2)})
same => n,Set(remit=${CUT(remit,@,1)})
same => n,MessageSend(${remit},CentroMensajes)
same => n,Noop(Estado del mensaje ${MESSAGE_SEND_STATUS})
same => n,Hangup
se envía al remitente del MI otro MI indicándole que su mensaje no se ha podido entregar. Algo como:
La buena noticia es que a partir de la proxima versión de Asterisk, rama 13 y 16, la variable ${MESSAGE_SEND_STATUS} se podrá utilizar también con el canal chan_pjsip para obtener algo parecido:
[mensaje]
exten => _10[0-9],1,Noop(Mensaje de ${MESSAGE(from)})
same => n,Noop(Mensaje para ${MESSAGE(to)})
same => n,Noop(Texto = ${MESSAGE(body)})
same => n,Messagesend(pjsip:${EXTEN},${MESSAGE(from)})
same => n,GotoIf($["${MESSAGE_SEND_STATUS}" != "SUCCESS"]?failed,s,1)
same => n,Hangup
[failed]
exten => s,1,Set(texto=${MESSAGE(body)})
same => n,Set(MESSAGE(body)="El Mensaje - ${texto} - para ${dest} no ha sido enviado")
same => n,Set(remit=${CUT(MESSAGE(from),<,2)})
same => n,Set(remit=${CUT(remit,@,1)})
same => n,MessageSend(${remit},CentroMensajes)
same => n,Noop(Estado del mensaje ${MESSAGE_SEND_STATUS})
same => n,Hangup
Me comentan
Comentarios recientes