Enviado por admin el
Una de las interesantes novedades de la versión 10 de Asterisk es la funcionalidad del envío de mensajes instantáneos entre extensiones y entre las extensiones y usuarios de las distintas redes XMPP (Jabber).
En esta primera parte veremos como configurar Asterisk para que las extensiones puedan enviarse mensajes instantáneos. En la segunda parte veremos como utilizar esta funcionalidad para el envío de mensajes instantáneos entre extensiones y usuarios XMMP (ejemplo: GoogleTalk).
Como se puede leer en la wiki oficial de Asterisk, el envío de mensajes instantáneos se basa en un protocolo independiente y acontece aunque no exista un dialogo (una llamada) entre las dos extensiones. Los mensajes enviados se procesan a través del dialplan.
Esta guía se basa es una instalación limpia de Asterisk 10.4. Los pasos a seguir son:
- modificar el archivo de configuración sip.conf
- modificar el archivo de configuración extensions.conf
- configurar los Softphone, teléfonos SIP que soportan esta funcionalidad
Primero se modifica el archivo sip.conf
nano /etc/asterisk/sip.conf
se modifican los siguientes cuatros parámetros:
;accept_outofcall_message = no
;outofcall_message_context = messages
;auth_message_requests = yes
;subscribecontext = default
para que queden:
accept_outofcall_message = yes
outofcall_message_context = messages
auth_message_requests = yes
subscribecontext = subscribe
- accept_outofcall_message = yes ; se permite el envío de mensajes instantáneos
- outofcall_message_context = messages ; el contexto del dialplan donde se procesarán los mensajes enviados. Este parámetro se puede configurar en la parte general o en cada extensión. De esta forma es posible crear grupos de extensiones con contextos distintos que podrán enviarse mensajes solamente entre ellas
- auth_message_requests = yes ; por cada mensaje enviado, Asterisk pedirá a la extensión de autenticarse
- subscribecontext = subscribe ; contexto donde se configurarán las extensiones hint para permitir a las extensiones de subscribir el estado de las demás
Al final del archivo se crean 3 extensiones:
[1000]
type=friend
secret=1000
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=alaw
[1001]
type=friend
secret=1001
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=alaw
[1002]
type=friend
secret=1002
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=alaw
IMPORTANTE: nunca utilizar como contraseña de una extensión el numero de la extensión. En esta guía se hace solamente para simplificar las configuraciones.
Terminada la configuración del sip.conf se pasa al dialplan:
nano /etc/asterisk/extesions.conf
Al final del archivo se configuran dos contextos:
[subscribe]
exten => 1000,hint,SIP/1000
exten => 1001,hint,SIP/1001
exten => 1002,hint,SIP/1002
El contexto subscribe para el monitoreo de las extensiones.
[messages]
exten => _X.,1,Noop(Mensaje de ${MESSAGE(from)})
same => n,Noop(Mensaje para ${MESSAGE(to)})
same => n,Noop(Texto = ${MESSAGE(body)})
same => n,Messagesend(sip:${EXTEN},${MESSAGE(from)})
same => n,Noop(Estado del mensaje ${MESSAGE_SEND_STATUS})
same => n,Hangup
El contexto messages (como configurado en el parámetro outofcall_message_context del sip.conf), donde se procesarán los mensajes enviados. La configuración que aparece funciona solamente si todas las extensiones configuradas empiezan con un numero (_X.).
La función MESSAGE contiene los siguiente datos del mensaje enviado:
- MESSAGE(from) – el destinatario
- MESSAGE(to) – el remitente
- MESSAGE(body) – el contenido del mensaje
Estas son las variables que se van a presentar en la consola de Asterisk con las primeras tres líneas.
Con la aplicación Messagesend se envía el mensaje al destinatario indicando el remitente. La sintaxis para el destinatario es SIP:numeroextensión (URI). La aplicación genera la variable ${MESSAGE_SEND_STATUS} que enviamos a la consola para saber si el mensaje ha sido enviado con éxito.
Ya se puede iniciar Asterisk:
service asterisk start
Ahora Falta configurar los teléfonos SIP. Para Esta prueba se utilizarán:
- X-Lite = 1000
- Bria = 1001
- CSIPsimple (Android) = 1002
Se configuran con los datos presentes en el file sip.conf y se añaden las demás extensiones en la lista de “amigos”. El resultado:
En una ventana terminal se entra en la consola de Asterisk:
asterisk -rvvvvvvvvvvvvv
En otra se capturan los paquetes SIP:
ngrep -W byline port 5060 > /tmp/sipmessage
Desde la extensión 1000 se envía un mensaje a la extensión 1001. El resultado en los teléfonos:
En la consola de Asterisk:
En la captura SIP:
X-LIte envía el mensaje a Asterisk que contesta con un “401 Unauthorized” pidiendo a X-Lite che se autentique.
X-Lite vuelve a enviar el mensaje con sus datos de autentificación y Asterisk contesta con un “202 Accepted”
Asterisk envía el mensaje a la extensión 1001 (el softphone Bria) que contesta con un “200 OK”
Se repite la prueba enviando un mensaje a la extensión 1002 que contesta. En el X-Lite:
En el CSIPsimple:
Perfecto. Ahora la pregunta:
¿Cómo podemos saber con certeza que el mensaje ha sido recibido?
Modificando el dialplan de esta manera:
nano /etc/asterisk/extensions.conf
[messages]
exten => _X.,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
Se guarda el contenido de la variable ${EXTEN} en la variable ${dest} y con la aplicación Gotoif se controla el valor de la variable ${MESSAGE_SEND_STATUS}. Si es distinto a SUCCESS se va al contesto failed, extensión s, prioridad 1. En ese contexto se pone:
[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
En la segunda línea se asigna a la variable (MESSAGE(body) el texto que será enviado a la extensión para comunicarle que el mensaje no se ha podido enviar. En la tercera y cuarta líneas, se extrae la URI del remitente del mensaje enviado sin éxito y se asigna a la variable ${remit}. En la quinta línea se envía el mensaje y como remitente se pone “CentroMensajes”. En la penúltima se averigua si el mensaje ha sido enviado con éxito.
Se recarga la configuración del dialplan:
CLI> dialplan reload
y se hace la prueba. Desde la extensión 1000 se envía un mensaje a la extensión 1001 mientras no está conectada a Asterisk. El resultado:
El proceso en la consola de Asterisk:
Pronto la segunda parte.
11 comentarios
Sobre los sms entre asterisk...
Enviado por Shehistier Sanc... (no verificado) el
Quisiera saber como se envian los sms entre asterisk por supuesto de la version 10 en adelante...????
es que lo he logrado pero en una sola direccion de unos clientes sip a otros peros viceversa no!!!!
y es que los que estas en el asterisk2 envian los sms a los de asterisk1 pero viceversa no!!!!
es nesesario un siproxd o proxy sip?? aunque lo instalé (siproxd) y me registra solo los clientes del asterisk2...
o que tengo que hacer...
a proposito muy interesante este post...
gracias por tu respuesta por adelantado...
si fueras tan amable de enviarme tu experiencia por email suchi@ucp.gu.rimed.cu
Como hacerlo usando FreePBX
Enviado por Márcio (no verificado) el
Como hacerlo usando FreePBX ?
Muchas Gracias
XLITE RECIBE PERO NO ENVIA iM
Enviado por andres (no verificado) el
Amiga, te felicito por tus post; una condulta en XLITE puedo recibir mensajes pero no puedo enviar a que se debe???? gracias.
Re: XLITE RECIBE PERO NO ENVIA iM
Enviado por admin el
Hola,
la ultima versión de X-Lite ya no funciona para enviar mensajes instantáneos. Puedes utilizar el softphone Jitsi.
Saludos
Se puede en Asterisk 11?
Enviado por Cesar Guevara (no verificado) el
Hola Andrea, una consulta, esto se puede hacer en Asterisk 11, y conoces si existe algun plugin donde pueda usarse estos para el envio de SMS a traves de un servidor de SMS y cobrarlo a traves del dial plan de A2billing, incluso te cuento que yo tengo unos GW GSM donde puedo recibir datos y procesarlos para enviar SMS, Gracias
Re: Se puede en Asterisk 11?
Enviado por admin el
Hola Cesar,
que yo sepa no se puede y no se si existe algo parecido.
La única forma es escribir directamente a los desarrolladores para ver que dicen.
Saludos
- Andrea
sobre error
Enviado por yeestrada (no verificado) el
Hola, el tutorial esta muy bueno, pero a mi nome funciona, estoy trabajando con asterisk 1.11.0.7 desde ubuntu
y cuando mando un mensaje me dice:
Dial("Message/ast_msg_queue","SIP/83,15") in new stack
chan_sip.c:29701 sip_request_call: Asked to get a channel of unsupported format (nothing) while capability is (gsm|ulaw|alaw|h263|testlaw)
app_dial.c:2437 dial_exec_full: Unable to create a channel of type 'zip' (cause 58 - Beareer capability not aviable)
que puede estarme pasando???
ayudaaaaaaaaaa!!!!
sobre sip sms
Enviado por yeestrada (no verificado) el
Alguien por favor que haya logrado configurar el sip sms en asterisk 11, no hay forma que me funcione, ayuda para configurarlo por favor alguien???
gracias yordan
Funciona en versiones anteriores de asterisk?
Enviado por Alexandro medina (no verificado) el
Buen dia, estoy implementando esta solucion de mensajeria en PBX base asterisk 8.3, funciona o solo con asterisk 10?
Gracias Saludos.
Re: Funciona en versiones anteriores de asterisk?
Enviado por admin el
Hola,
solamente desde la versión 10 de Asterisk
En la 1.8.X no
Saludos
funciona asterisk 16 nov 2020
Enviado por juanlog el
funciona asterisk 16 nov 2020. mi unico inconveniente a sido conseguir la aplicacion de escritorio que mejor funcione con los chats
con microsip y phonelite envia y recibe bien los chats. con otras como ekiga llegan pero no los envia en momentos.
lo he probado con: ekiga, yate, kiax, microsip, zoiper, talksetup, discord, phonelite, linphone.
si encuentra algun cliente mas funcional me avisan
nota: tambien tengo funcionando para chats xmpp con prosody, independiente de asterisk