Asterisk y los mensajes instantáneos, canal chan_pjsip

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

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Asterisk y los mensajes instantáneos, canal chan_pjsip" Suscribirse a VozToVoice - Todos los comentarios