Probando WebRTC en Elastix 4 (paso a paso)

elastixwebrtc

El término WebRTC se ha vuelto tendencia recientemente en el ámbito VoIP. Muchos no entienden realmente de qué se trata y otros piensan que sólo es un softphone en el navegador.

El presente artículo tampoco busca resolver los misterios de WebRTC, sino dar con una solución efectiva para aquellos que deseen experimentar con esta tecnología; y sí, la idea de el presente artículo es hacer funcionar un softphone en el navegador, pero las posibilidades a partir de allí son mucho más interesantes.

Para ir directamente a la masa y sin más preámbulos, empecemos con los pasos.

1) INSTALAR Elastix

1.1) Descargar e instalar Elastix 4 RC3 de este link

1.2) Actualizamos Asterisk porque la versión que viene en Elastix 4 RC3 no tiene soporte ICE

# rpm -Uvh http://repo.elastix.org/elastix/4/updates/x86_64/RPMS/asterisk-11.20.0-1.el7.centos.x86_64.rpm

2) INSTALAR EL WEBPHONE

2.1) Descargar sipml5-master.zip de https://github.com/DoubangoTelecom/sipml5 y colocar el archivo en el servidor Elastix bajo la ruta /var/www/html

2.2) En el servidor ejecutamos los siguientes comandos.

# cd /var/www/html
# unzip sipml5-master.zip
# mv sipml5-master phone

3) CREAR EXTENSIONES

Ingresar a Elastix y crear 2 extensiones en el menú “PBX -> PBX Configuration -> Extensions”.

Yo he creado la 2001 y 2002, teniendo cuidado de establecer las siguientes 4 opciones.

opciones {focus_keyword} Probando WebRTC en Elastix 4 (paso a paso) opciones

La cuenta 2001 la usaré para el teléfono WebRTC y la 2002 la configuraré en un softphone de escritorio. En este caso el BRIA.

Aplicamos los cambios.

Aquí viene algo truculento y es que aparte de estos parámetros es necesario configurar otros que FreePBX no trae por omisión, por lo que nos veremos obligados a ponerlos a mano en el archivo de configuración /etc/asterisk/sip_additional.conf

En la sección correspondiente a la extensión WebRTC (es decir, la 2001 en nuestro caso) añadimos las siguientes líneas:

dtlsenable=yes ; Tell Asterisk to enable DTLS for this peer
dtlsverify=no ; Tell Asterisk to not verify your DTLS certs
dtlscertfile=/etc/asterisk/keys/asterisk.pem ; Tell Asterisk where your DTLS cert file is
dtlsprivatekey=/etc/asterisk/keys/asterisk.pem ; Tell Asterisk where your DTLS private key is
dtlssetup=actpass ; Tell Asterisk to use actpass SDP parameter when setting up DTLS

También modificamos la línea que configura el transporte, incluyendo WSS entre los transportes disponibles. La línea debería quedar así:

transport=wss,ws,udp,tcp,tls
Hay que notar aquí que estos cambios SE SOBREESCRIBIRÁN cada vez que apliquemos la configuración de FreePBX. En Elastix 4 estable planeamos solucionar este inconveniente, así como también incluir el RPM de Asterisk con soporte ICE.

4) CREO CERTIFICADOS PARA SRTP

4.1) Creo la carpeta donde irán los keys

# mkdir /etc/asterisk/keys

4.2) Creo los certificados

# /usr/share/doc/asterisk-11.20.0/contrib/scripts/ast_tls_cert -C pbx.mycompany.com -O "My Super Company" -d /etc/asterisk/keys
# /usr/share/doc/asterisk-11.20.0/contrib/scripts/ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C phone1.mycompany.com -O "My Super Company" -d /etc/asterisk/keys -o malcolm

4.3) Permisos

# chown -R asterisk.asterisk /etc/asterisk/keys

5) CAMBIOS EN ASTERISK

5.1) Creo los certificados para el servidor Web embebido q trae Asterisk

# openssl req -new -x509 -days 365 -nodes -out /tmp/foo.pem -keyout /tmp/foo.pem

5.2) Editar el archivo vim /etc/asterisk/http_additionals.conf

[general]
enabled=yes
enablestatic=no
bindaddr=0.0.0.0
bindport=8088
prefix=asterisk
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/tmp/foo.pem
tlsprivateket=/tmp/foo.pem

5.3) Edito el archivo /etc/asterisk/sip_general_custom.conf y agrego las sgtes líneas

tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/keys/asterisk.pem
tlscafile=/etc/asterisk/keys/ca.crt
tlscipher=ALL
tlsclientmethod=tlsv1

5.4) reiniciar asterisk

# service asterisk restart

6) CONFIGURO TELEFONOS

6.1) WEBPHONE

Apuntar el browser al cliente WebRTC http://192.168.88.106/phone/call.htm y configurar

Nota: En mi caso este (192.168.88.106) es el IP de mi servidor Elastix.

Captura de pantalla 2015-12-15 a las 23.42.34 {focus_keyword} Probando WebRTC en Elastix 4 (paso a paso) Captura de pantalla 2015 12 15 a las 23

Presionamos el botón que dice “Expert mode?” y configuramos los siguientes parámetros.

Captura de pantalla 2015-12-15 a las 23.42.52 {focus_keyword} Probando WebRTC en Elastix 4 (paso a paso) Captura de pantalla 2015 12 15 a las 23

En la pantalla anterior hay que notar que estamos usando WSS como transporte, en lugar de WS.

6.2) BRIA

Configuro otro cliente SIP para la extensión 2002. En mi caso el BRIA

Captura de pantalla 2015-12-15 a las 23.49.15 {focus_keyword} Probando WebRTC en Elastix 4 (paso a paso) Captura de pantalla 2015 12 15 a las 23


Tip importante: En caso de usar certificados no válidos (auto firmados) como en nuestro ejemplo, es necesario que el navegador acepte previamente dicho certificado. Para lograr esto, antes de usar el teléfono Web, debemos apuntar nuestro navegador al URL del websocket, aquí es https://192.168.88.106:8089/asterisk/ws. Luego de aceptar el certificado, obtendremos un mensaje de “Upgrade Required” que es lo esperado. A continuación, ya podremos usar el teléfono WebRTC.

Sincronizando la configuración de Elastix con Dropbox

Screen Shot 2014-05-10 at 1.44.38 AM

Ahora que están de moda las nubes de todo tipo, comienzan a surgir muchas ideas de cómo sacarles provecho. Una de las ideas que más se está utilizando es la del respaldo de información. Así que mucha gente opta por sincronizar sus archivos con la nube como una forma de respaldo o de distribuir su información para hacerla accesible desde varias localidades o dispositivos.

Contado lo anterior, cae por su propio peso la idea de respaldar Elastix en la nube.

Para el presente artículo aprovecharemos del popular servicio de Dropbox para sincronizar los archivos de configuración de Elastix. De esta manera, en caso de algún desastre en nuestro servidor Elastix, podremos recuperar los archivos de la nube, o utilizar la nube como una herramienta de versionamiento, donde podremos consultar cómo han cambiado nuestros archivos de configuración a través del tiempo.

En inicio, una cuenta gratuita de Dropbox será más que suficiente. Al momento de escribir estas líneas, una cuenta gratuita ofrece 2GB de almacenamiento gratuito. Suponiendo que ya tenemos una cuenta en Dropbox, lo primero que haremos será descargar Dropbox para línea de comandos de Linux. No mucha gente conoce que existe una versión del cliente de Dropbox para línea de comando, pero sí, existe, y es oficial. La descargamos con el siguiente comando.


cd /opt/
wget http://www.dropbox.com/download?plat=lnx.x86

La ruta para 64 bits es esta: http://www.dropbox.com/download?plat=lnx.x86_64 Luego lo descomprimimos.

tar -xvzf dropbox-lnx.x86-1.2.49.tar.gz

El resultado será una carpeta oculta y esto puede confundir un poco. Para verla ejecutamos el comando ls con la opción “a”.


# ls -la
drwxr-xr-x 3 root root 4096 dic 16 13:38 .
drwxr-x--- 9 root root 4096 dic 16 13:35 ..
drwxr-xr-x 4 1000 1002 4096 dic 5 14:21 .dropbox-dist
-rw-r--r-- 1 root root 15789424 dic 16 13:37 dropbox-lnx.x86-1.2.49.tar.gz

Luego ejecutamos el programa dropboxd que reside dentro de la carpeta .dropbox-dist

./.dropbox-dist/dropboxd

Aquí veremos un mensaje que nos pide vincular nuestro computador con nuestra cuenta de Dropbox.

This computer isn't linked to any Dropbox account
Please visit http://www.dropbox.com/cli_link?host_id=abeee9b1b5448a8ddaa336832470601

Una vez visitado el vínculo que Dropbox nos pide (y de que hayamos ingresado los datos de nuestra cuenta), nuestra instalación de Dropbox nos dará un mensaje como el siguiente:

This computer is now linked to Dropbox. Welcome Edgar.

Luego de esto podemos enviar la aplicación al background para poder hacer otras cosas desde la consola. La aplicación dropboxd se dedicará a sincronizar el contenido de nuestra cuenta en el servidor Elastix. Para esto creará una carpeta llamada Dropbox en el home del usuario. Por ejemplo, para el usuario “edgar”, la carpeta será /home/edgar/Dropbox.

A continuación creamos, dentro de la carpeta /home/edgar/Dropbox, un enlace simbólico a la carpeta donde Asterisk guarda sus archivos de configuración /etc/asterisk

cd /home/edgar/Dropbox
ln -s /etc/asterisk etc.asterisk.dropbox

A partir de este momento, todos los archivos de configuración de Asterisk se sincronizarán con “la nube” dentro de una carpeta que tendrá el nombre de “etc.asterisk.dropbox”. Este nombre es arbitrario y ustedes pueden usar cualquier nombre que les guste.

De este mismo modo podríamos crear links simbólicos para otras carpetas de interés. Lo interesante es que casi inmediatamente después de que cambie un archivo dentro de estas carpetas, los cambios ya estarán disponibles en Dropbox y en caso de problemas con cierta configuración que hayamos cambiado, siempre podremos obtener una versión anterior de los archivos a través de Dropbox. Bonito, cierto?

Es importantísimo en este punto resaltar algo que a lo mejor el lector no ha caído en cuenta.

Cualquier cambio que haga en el contenido de los archivos de configuración (que he sincronizado con Dropbox), ya sea desde la interfaz Web de Dropbox o desde cualquier dispositivo, SERÁ SINCRONIZADO CON EL SERVIDOR ELASTIX!

Esto convierte este recurso en una poderosa herramienta de configuración remota de nuestro servidor Elastix, pero también añade una dosis de riesgo pues si realiza de manera errónea, podemos dejar a nuestro servidor VoIP sin servicio.

Espero que hayan disfrutado este artículo y les dejo con una captura de pantalla de los archivos de configuración ya sincronizados con una computadora, esperando que utilicen esta herramienta con prudencia ;) sincronizando la configuración de elastix con dropbox Sincronizando la configuración de Elastix con Dropbox icon wink

Screen Shot 2014-05-10 at 1.44.38 AM sincronizando la configuración de elastix con dropbox Sincronizando la configuración de Elastix con Dropbox Screen Shot 2014 05 10 at 1

Integración de Elastix con Gtalk

phone_gtalk

Nota: Este es un artículo que escribí hace mucho tiempo y encontré olvidado en mi computador. Hoy decidí liberarlo, pero con todos los cambios que ha realizado Google no estoy seguro si esto continúe funcionando. Esperemos que sí.

También aprovecho para agradecer a mi buen amigo Juan Pablo Bustos, gran maestro de Asterisk, quien me ayudó a probar que todo funciona perfectamente.

Instalar soporte para GTalk en Elastix es una tarea realmente sencilla: No hay que hacer mucho pues la versión de Asterisk que viene a partir de Elastix 2.2, ya trae el soporte para hablar GTalk compilado. Lo que explicaremos aquí será más bien cómo configurarlo para poder recibir llamadas en nuestro Elastix usando una cuenta GTalk.

Antes de comenzar debemos tener una cuenta de Google a la mano. En este caso usaremos la cuenta elastixcookbook@gmail.com

A continuación el contenido del archivo /etc/asterisk/jabber.conf


[general]
debug=yes
autoprune=yes
autoregister=yes

[gtalk]
type=client
serverhost=talk.google.com
username=elastixcookbook@gmail.com
secret=clavesecreta123456789
port=5222
usetls=yes
usesasl=yes
buddy=example@gmail.com
statusmessage=Asterisk Server
timeout=100

Ahora el contenido del archivo /etc/asterisk/gtalk.conf


[general]
context=from-gtalk
allowguest=yes

[guest]
disallow=all
allow=ulaw
context=from-gtalk

[elandivar]
username=elandivar@gmail.com
disallow=all
allow=ulaw
context=from-gtalk
connection=gtalk

[bustosjuan]
username=bustosjuan@gmail.com
disallow=all
allow=ulaw
context=from-gtalk
connection=gtalk

Al final de nuestro archivo /etc/asterisk/extensions_custom.conf añadimos los siguientes contextos.

[from-gtalk]
exten => s,1,NoOp( Call initializated from Google Talk )
exten => s,n,Set(CALLERID(name)="GTalk")
exten => s,n,Dial(SIP/5212,30)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(5212@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(5212@default,b)
exten => s,n,Hangup()

[to-gtalk]
exten => 10001,1,Dial(gtalk/gtalk/elandivar@gmail.com)
exten => 10001,n,Congestion(3)
exten => 10001,n,Hangup
exten => 10002,1,Dial(gtalk/gtalk/bustosjuan@gmail.com)
exten => 10002,n,Congestion(3)
exten => 10002,n,Hangup
exten => _*1XXXXXXXXXX,1,Dial(gtalk/gtalk/+${EXTEN:1}@voice.google.com)
exten => _*1XXXXXXXXXX,n,Congestion(3)
exten => _*1XXXXXXXXXX,n,Hangup

Dentro del contexto to-gtalk lo que le estoy diciendo a Asterisk es que si marco 10001 inicie una llamada al contacto elandivar@gmail.com y si marco 10002 inicie una llamada al contacto bustosjuan@gmail.com

Ojo: No olvidar incluir los contextos from-gtalk y to-gtalk, dentro del contexto from-internal-custom. En MI CASO, este contexto queda así.


[from-internal-custom]
exten => 1234,1,Playback(demo-congrats)
exten => 1234,2,Hangup()
exten => h,1,Hangup()
include => from-gtalk
include => to-gtalk

Finalmente reiniciamos Asterisk y a probar.

Si ingreso a Gmail e inicio sesión con mi cuenta elandivar@gmail.com, veré que el usuario elastixcookbook@gmail.com se encuentra en línea. Esto quiere decir que el usuario se registró correctamente desde Elastix!. Incluso puedo enviarle mensajes o iniciar una llamada con él.

Si inicio una llamada, esta timbrará en la extensión 5212, tal como he especificado en el archivo /etc/asterisk/extensions_custom.conf

Screen Shot 2014-03-10 at 12.44.31 AM Integración de Elastix con Gtalk Integración de Elastix con Gtalk Screen Shot 2014 03 10 at 12

Bueno, los dejo. Tengo una llamada de Google sonando en mi teléfono :-) Integración de Elastix con Gtalk Integración de Elastix con Gtalk icon smile

phone_gtalk Integración de Elastix con Gtalk Integración de Elastix con Gtalk phone gtalk

¿Qué conozco de VoIP?

Cuántos saben que es VoIP o que es una IPPBX? probablemente muy pocos, sin embargo muchos utilizan un sistema de ese tipo en su empresa o medio ambiente de trabajo. Hace tiempo quise hacer una explicación al respecto y me empujó la pregunta de un amigo de la universidad que me dijo hace poco, “Con qué se come eso!!”

 

Hablar de los conceptos de VoIP quizás sea extenderme mas de lo que quisiera aunque una analogía sería decir que: Skype es una central telefónica que tiene miles de usuarios  donde cada usuario es una extensión que esta conectada a esta central y que en algún momento marca a una extensión (asociada por el nombre del usuario) para llamar a alguien. Todos sabemos que este servicio es posible porque tenemos un enlace de datos o una conexión a internet donde nuestro telefonito skype se mantiene conectado a este servicio de grandes dimensiones.

 

Voz Sobre IP, VoIP o Voz sobre un Protocolo de Internet, no es mas que el proceso por el cual una conversación de voz es transformada en dígitos  que son conducidos a través de miles de caminos existentes en una inmensa nube de datos para llegar a un destino en alguna parte del mundo donde se decodifican para ser nuevamente transformados en ondas mecánicas para poder decir a alguien “Buenos días desde Guayaquil”.  En realidad es mucho mas complicado, sin embargo esta tecnología garantiza que en cualquier lugar donde tengamos acceso a un punto de datos podamos establecer una conexión que nos permita tener comunicación.

 

Esto último es muy importante y muchos de ustedes ya habrán pensado en las infinitas posibilidades que representa, sobre todo en ambientes donde la conexión remota es primordial o donde el acceso sea difícil, o en casos de emergencia y desastres.

 

Retomemos por un momento el ejemplo de Skype, no me equivoco al decir que al menos 1 de cada 6 personas en latinoamerica ha usado ese servicio y ha experimentado aunque sea una vez una llamada de Voz sobre IP, con lo cual confirmamos que miles de millones en el mundo hemos usado VoIP como medio de comunicación. Esa quizás sea la razón por la cual una de las empresas mas poderosas del mundo adquirió Skype por USD$8.500 millones, teniendo así acceso a miles de millones de usuarios en todo el mundo.

 

Esto nos lleva a pensar que el mundo se convertirá en algún momento en una gran central telefónica donde todos tenemos una extensión. No es una locura pensarlo, principalmente por los adelantos tecnológicos que han permitido que la tecnología que permite correr a sistemas VoIP haya cumplido dos condiciones importantes: bajar de costo y distribuirse exponencialmente. De ahí que muy pronto el negocio de las operadoras sean los “Datos”, si usted lo ha escuchado ya, no es una coincidencia.

 

El por qué es importante VoIP actualmente va también de la mano con conceptos como productividad y eficiencia, de ahí que muchas empresas busquen incorporar en sus comunicaciones sistemas basados en esta tecnología, principalmente por la posibilidad de adicionar miles de features que probablemente no tengan que ver con telefonía pero que facilitan el trabajo de la organización en miles de áreas.

 

Cuando entré al proyecto Elastix habiendo trabajado en petróleo, construcción y en la industria metal mecánica, me sorprendió lo complejo que podía ser tratar de entender todos los conceptos de como funciona esta tecnología, sin embargo me sorprendió también ver el sin número de posibilidades existentes en cuanto a funcionalidad y eso me abrió las puertas a un mundo fascinante al cual uno no puede resistir estudiar. Valga la pena decir que Elastix es un proyecto de Comunicaciones Unificadas donde su principal objetivo es establecer VoIP y valga la pena decir también que es un proyecto latinoamericano reconocido mundialmente.

 

Espero haber abierto la duda, o al menos terminar de confundirlos mas. Esto último como broma, lo cierto es que en nuestra vida actual hay muchos momentos en que usamos VoIP y lo interactuamos con otros servicios y otras funcionalidades y lo seguiremos usando hasta que la tecnología invente el “CoT” o Communication over Telepaty.

 

Si quieren conocer mas de VoIP, la telefonía IP y Elastix visiten el siguiente vínculo: http://ur1.ca/4frnc