Enviado por admin el
En un precedente articulo hemos visto como crear un “gateway” para los mensajes instantáneos entre extensiones SIP y usuarios XMPP. En este articulo veremos como realizar llamadas desde extensiones SIP a usuarios XMPP conectados a un servidor XMPP que soporta el protocolo ICE-UDP (Jingle). Para que todo funcione el cliente XMPP también tiene que soportar el protocolo Jingle.
Para esta prueba se ha utilizado:
Como sabrán el cliente Jitsi soporta también el Protocolo SIP pues pareciera que no tiene mucho sentido utilizarlo ya que se podrían realizar las llamadas configurando directamente una extensión SIP. El problema es que la extensión SIP configurada en Jitsi no puede enviar mensajes instantáneos a otra extensión SIP ya que el método utilizado por Asterisk 11.X para enviar y recibir mensajes instantáneos no parece respetar la RFC relacionada.
De esto se puede tener una prueba mirando un OPTIONS enviado por Asterisk 11.X. En la cabecera Allow normalmente aparecen los métodos soportados:
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Si se fijan el método MESSAGE no aparece y por eso Jitsi no permite enviar mensajes instantáneos a otras extensión SIP registrada en Asterisk 11.X.
Para la instalación de Ejabberd se utilizará un servidor de DigitalOcean con CentOS 6.5 64bit. Una vez creado el “Droplet” se accede vía SSH y se inicia la configuración. Primero se actualiza el sistema:
yum update -y
Se instalan los repositorios EPEL que luego se utilizarán para la instalación de una dependencia necesaria para la correcta instalación de Ejabberd:
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Se instala el editor nano y el programa wget:
yum install nano wget -y
Se configura la zona horaria:
rm /etc/localtime
ln -s /usr/share/zoneinfo/America/Bogota /etc/localtime
El idioma (Español de Colombia):
nano /etc/sysconfig/i18n
Se modifica esta línea:
LANG="en_US.UTF-8"
para que quede (en el caso de Colombia):
LANG="es_CO.iso88591"
Se instala el paquete del network time protocol que se utiliza para tener siempre actualizada la hora del servidor:
yum install ntp -y
Se configura para que arranque en automático:
chkconfig ntpd on
Se inicia:
service ntpd start
Se crea la partición de Swap ya que no viene por defecto:
dd if=/dev/zero of=/swapfile bs=1024 count=512k
mkswap /swapfile
swapon /swapfile
Se configura la partición de swap para que arranque con el sistema:
nano /etc/fstab
al final del archivo se añade la línea que sigue:
/swapfile swap swap defaults 0 0
Se cambian los permisos del archivo recién creado:
chmod 0600 /swapfile
Se reinicia el sistema:
reboot
Se vuelve a acceder vía SSH y se instala la librería libyaml que es el lenguaje en que está escrito el archivo de configuración de Ejabberd:
yum install libyaml-devel -y
Se descarga la ultima versión del servidor Ejabberd:
cd /usr/src
wget http://www.process-one.net/downloads/downloads-action.php?file=/ejabberd...
Se renombra:
mv downloads-action.php\?file\=%2Fejabberd%2F14.05%2Fejabberd-14.05-linux-x86_64-installer.run ejabberd-14.05-linux-x86_64-installer.run
se vuelve ejecutable:
chmod +x ejabberd-14.05-linux-x86_64-installer.run
Se ejecuta:
./ejabberd-14.05-linux-x86_64-installer.run
Primero se escoge el idioma y se presiona la tecla envío:
Luego se presiona la tecla envío distintas veces hasta llegar al final de la licencia de uso:
Se escribe la letra y para aceptar los términos de la licencia:
Se presiona envío para aceptar la carpeta predefinida de instalación:
Si al servidor no está asociado un dominio, se indica la dirección IP publica y se presiona la tecla envío:
Se crea un usuario administrador (predefinido admin) y se presiona la tecla envío:
Se crea una contraseña para el usuario administrador y se confirma.
No se activa el modo Cluster:
Se termina el proceso con la instalación. Luego se entra en la siguiente carpeta:
cd /opt/ejabberd-14.05/bin
y se inicia:
./start
se averigua que el servidor esté funcionando:
./status
The node ejabberd@localhost is started with status: started
ejabberd community is running in that node
Como ya tenemos un usuario creado por defecto (admin), creamos el segundo:
./ejabberdctl register voztovoice 162.243.122.174 sesamo
User voztovoice@162.243.122.174 successfully registered
El usuario será voztovoice y su contraseña sesamo. La IP es la misma del servidor Ejabberd.
ASTERISK 11.X
En Asterisk tenemos que modificar 4 archivos:
- sip.conf
- xmpp.conf
- motif.conf
- extensions.conf
En el archivo sip.conf creamos una nueva extensión o utilizamos una ya creada. Luego renombramos el archivo xmpp.conf:
mv /etc/asterisk/xmpp.conf /etc/asterisk/xmpp.conf.old
creamos uno nuevo:
nano /etc/asterisk/xmpp.conf
copiamos las líneas que siguen:
[general]
debug=yes
autoprune=no
autoregister=yes
;collection_nodes=yes
;pubsub_autocreate=yes
;auth_policy=accept=yes
[admin]
type=client
serverhost=162.243.122.174
;pubsub_node=pubsub.dominio.com
username=admin@162.243.122.174
secret=sesamo
priority=1
port=5222
usetls=yes
usesasl=yes
buddy=voztovoice@162.243.122.174
;distribute_events=yes
status=available
statusmessage=Asterisk Server
timeout=100
sendtodialplan=yes
context=message
Los datos importantes:
- serverhost: la IP publica o el nombre de dominio del servidor Ejabberd
- username: nombre de usuario XMPP con IP publica del servidor Ejabberd
- secret: la contraseña del usuario XMPP (admin)
- buddy: el segundo usuario creado en el servidor Ejabberd (voztovoice)
Guardamos los cambios y renombramos el archivo motif.conf:
mv /etc/asterisk/motif.conf /etc/asterisk/motif.conf
Creamos uno nuevo:
nano /etc/asterisk/motif.conf
copiamos las siguientes líneas:
[jingle]
context=xmpp-in
transport=ice-udp
allow=ulaw
allow=h263
allow=h264
connection=admin
Datos importantes:
- context: contexto donde llegarán las llamadas entrantes de usuarios XMPP
- trasport: para la extensión Jingle es ice-udp
- connection: etiqueta que da inicio a la configuración del usuario admin en el archivo xmpp.conf
Se guardan los cambios y se modifica el dialplan:
nano /etc/asterisk/extensions.conf
se crea el contexto xmpp-in para las llamadas entrantes de los usuarios XMPP:
[xmpp-in]
exten => s,1,NoOp( Llamadas de usuarios XMPP )
same => n,Dial(SIP/1000,30)
same => n,Hangup()
En este caso la extensión que recibirá las llamadas será la 1000. En el contexto a que tiene acceso la extensión 1000 se crea el bloque que sigue:
exten => _[a-z].,1,Dial(motif/jingle/${EXTEN}@162.243.122.174,30)
same => n,Hangup
Este bloque funciona si los usuarios XMPP que se llaman empiezan con una letra minúscula entre a y zeta.
Se guardan los cambios y se reinicia Asterisk:
service asterisk restart
Se entra en la consola:
asterisk -rvvvvvvvvvvvvvv
se averigua que el usuario admin esté conectado al servidor Ejabberd:
CLI> xmpp show connections
Jabber Users and their status:
[admin] admin@162.243.122.174 - Connected
Se configura el X-lite para conectarse a la extensión 1000 y luego se descarga el cliente Jitsi y se inicia. Se entra en el menú Tools –> Options y se presiona el botón Add para crear un nuevo usuario:
Se configura el usuario voztovoice y se presiona el botón Add. Como el certificado del servidor Ejabberd es auto firmado, Jitsi preguntará si continuar. Una vez aceptado el certificado aparecerá la solicitud de “amistad” del usuario admin:
Se aceptará presionando el botón Authorize. El resultado:
Como primera prueba se llama desde Jitsi el usuario admin. Se presiona el icono del auricular. El X-lite empezará a timbrar:
En la consola de Asterisk:
Executing [s@xmpp-in:1] NoOp("Motif/voztovoice-2816", " Llamadas de usuarios XMPP ") in new stack
Executing [s@xmpp-in:2] Dial("Motif/voztovoice-2816", "SIP/1000,30") in new stack
-- Called SIP/1000
-- SIP/1000-00000002 is ringing
Se contesta la llamada y el audio se escuchará perfecto. Ahora desde el X-lite se llama el usuario voztovoice:
En el cliente Jitsi:
En la consola de Asterisk:
Executing [voztovoice@externas:1] Dial("SIP/1000-00000004", "motif/jingle/voztovoice@162.243.122.174,30") in new stack
Called motif/jingle/voztovoice@162.243.122.174
Motif/voztovoice@162.243.122.174/jitsi-27i72bg-bc5d is proceeding passing it to SIP/1000-00000004
Motif/voztovoice@162.243.122.174/jitsi-27i72bg-bc5d is ringing
Las dos pruebas han funcionado correctamente…
¿Les parece una solución útil?
16 comentarios
Este bug se soluciono hace
Enviado por Anónimo (no verificado) el
Este bug se soluciono hace poco tiempo.
https://issues.asterisk.org/jira/browse/ASTERISK-23504
Re: Este bug se soluciono hace
Enviado por admin el
Hola,
tienes toda la razón. Ya aparece el método MESSAGE en la cabecera Allow.
Gracias por la info.
Saludos
Hola interesante esta guia ,
Enviado por arnulfo (no verificado) el
Hola interesante esta guia , estoy tratando de implementarla pero me da este error
[Jul 14 16:23:22] ERROR[11604]: chan_motif.c:1955 jingle_interpret_ice_udp_transport: Received ICE-UDP transport information on session 'pa2jhsksojgi' but ICE support not available
-- Executing [s@xmpp-in:1] NoOp("Motif/allan-1cda", " llamada de usuario XMPP ") in new stack
[Jul 14 16:23:38] ERROR[11604]: chan_motif.c:1955 jingle_interpret_ice_udp_transport: Received ICE-UDP transport information on session '516edqfbeasg3' but ICE support not available
-- Executing [s@xmpp-in:1] NoOp("Motif/allan-fbed", " llamada de usuario XMPP ") in new stack
como que no reconoce el transporte declarado en motif.conf
Re: Hola interesante esta guia
Enviado por admin el
Hola,
por fin creo que encontré la solución.
Para que el protocolo ICE funcione correctamente en Asterisk, antes de compilar el programa, hay que instalar también estos paquetes:
yum install libuuid libuuid-devel uuid uuid-devel
Me di cuenta porque en la versión 11.12.0 tenía el mismo problema con las llamadas Astersis -> Google
Me cuentas.
Saludos
Pregunta, tuviste que hacer
Enviado por Arnulfo (no verificado) el
Pregunta, tuviste que hacer una instalacion limpia desde cero y haber instalado estas librerias antes para que te funcionara?
gracias por la info.
Re: Pregunta, tuviste que hacer
Enviado por admin el
Hola,
instalé Asterisk 11.12.0 desde las fuentes pero antes instalé todas las librerías y paquetes que normalmente son dependencias para una correcta compilación de los módulos de Asterisk.
Lo importante para que ICE funcione correctamente es instalar los paquetes mencionados en mi anterior mensaje.
Saludos
Hola Andrea , gracias gracias
Enviado por Arnulfo (no verificado) el
Hola Andrea , gracias gracias funciono perfectamente.
ahora me queda ver como creo un dial plan para estos usuarios xmpp
Re: Hola Andrea , gracias gracias
Enviado por admin el
Hola,
me alegra que por fin te funcionó. A mi también el tema me estaba volviendo loco.
Me parece una solución bastante útil, cuéntanos como la vas a implementar, ojala en una entrada de blog de este sitio.
Saludos
Ya estoy trabajando en ello ,
Enviado por Arnulfo (no verificado) el
Ya estoy trabajando en ello , en cuanto lo tenga lo posteamos aqui , agradezco mucho tu ayuda ha sido valiosa x la gracia de Jesus.
Hola sigo pensando como
Enviado por Arnulfo (no verificado) el
Hola sigo pensando como lograste hacer que te jalara ,he tratado de reproducir este escenario y no funciona , compilando bien las librerías y los módulos , pero no jala x todos los medio , creo que Asterisk no entiende el transporte ICE-UDP
sldss
Re: Hola sigo pensando como
Enviado por admin el
Hola,
hoy he vuelto a probar el articulo y ha funcionado sin problemas. Creo que el hecho que no funcione depende de como estás instalando Asterisk ya que esa parte no aparece en la guía.
Saludos
te refieres ha
Enviado por Arnulfo (no verificado) el
te refieres ha
res_rtp_asterisk - lo tengo compilado
chan_jingle - lo quite
chan_gtalk - no lo tengo
res_jabber - lo quite
chan_motif -lo tengo compilado
aun así no jala.
hay algo especial que se me pase?
Re: te refieres a...
Enviado por admin el
Hola,
me imagino que el modulo res_xmmp lo tienes compilado.
De todas formas el problema parece estar relacionado con Asterisk pues habría que mirar si se instalaron todas las dependencias.
Desde la consola de Asterisk activar el debug:
CLI> core set debug 9
y mirar si eso arroya alguna luz.
Saludos
si el res_xmpp lo tengo
Enviado por Arnulfo (no verificado) el
si el res_xmpp lo tengo instalado y cargado
shark*CLI> module show like res_xmpp.so
Module Description Use Count
res_xmpp.so Asterisk XMPP Interface 0
1 modules loaded
shark*CLI>
activando el debug no muestra nada
Connected to Asterisk 11.11.0 currently running on shark (pid = 1721)
-- Executing [s@xmpp-in:1] NoOp("Motif/allan-dd59", " llamada de usuario XMPP ") in new stack
[Jul 23 17:43:56] ERROR[6534]: chan_motif.c:1955 jingle_interpret_ice_udp_transport: Received ICE-UDP transport information on session 'cb93e7gsqua13' but ICE support not available
shark*CLI>
habilistate en el rtp.conf el ice?
y en sip.conf?
sldss
nadie mas a evaluado esta
Enviado por Arnulfo (no verificado) el
nadie mas a evaluado esta solución?
<--- XMPP sent to 'admin'
Enviado por Arnulfo (no verificado) el
-- Executing [s@xmpp-in:1] NoOp("Motif/allan-64f2", " llamada de usuario XMPP ") in new stack
-- Executing [s@xmpp-in:2] Dial("Motif/allan-64f2", "SIP/1001,30") in new stack
[Aug 1 21:37:55] ERROR[6963]: chan_motif.c:1955 jingle_interpret_ice_udp_transport: Received ICE-UDP transport information on session 'f910259rikh4u' but ICE support not available
== Using SIP VIDEO TOS bits 136
== Using SIP VIDEO CoS mark 6
== Using SIP RTP TOS bits 184
== Using SIP RTP CoS mark 5
-- Called SIP/1001
== Spawn extension (xmpp-in, s, 2) exited non-zero on 'Motif/allan-64f2'
Um aqui solo me timbro.