Configuración de WebRTC en Elastix 4 – WebPhone

elastixwebrtc

Primero definamos un par de conceptos para poder iniciar, como punto de partida tenemos WebRTC el cual es un protocolo creado inicialmente por Google el cual haciendo uso de estándares como HTML5 y Javascript permite dotar a la web de capacidades de comunicación VoIP entre muchas otras cosas mas, Por otro lado SIP es un protocolo de señalización que permite la comunicación entre usuarios que usen un servidor y/o cliente SIP.

Es así que ambos sistemas de comunicación si bien es cierto son diferentes, tienen un mismo objetivo el cual es “Comunicación”, debido a esto se han construido software que permite integrar ambos, de tal forma que se pueda programar paginas que usen WebRTC y que se comuniquen con servidores SIP o plataformas que soporten SIP como es el caso de Asterisk.

En el caso de Elastix 4 cuenta con soporte para WebRTC ya que usa Asterisk versión 11, el cual implementa el módulo  res_http_websocket este ha sido creado por Digium para permitir a los desarrolladores interactuar y comunicarse con WebRTC , También en esta versión han sido añadidos protocolos de señalización como ICE, STUN, TURN, SRTP  ya que son requerimiento de WebRTC.

WebRTC

Si bien es cierto configurar un WebPhone sería solo una de las muchas aplicaciones que podríamos construir, vamos a configurar uno básico haciendo uso de SIPml5 que es un cliente SIP basado HTML5 y escrito en javascript liberado recientemente.

Consideraciones antes de iniciar
Antes de iniciar la configuración es necesario ejecutar la actualización de la plataforma ya que actualizando permite activar el soporte para el protocolo de transporte WSS necesario para WebRTC.

yum -y update

1.- Configurar el nombre de la maquina.

Configurar el nombre de la maquina como “elx4” con el dominio “mycompany.com” de la siguiente forma.

vim /etc/hosts

Ingresar al final del archivo

192.168.10.48 elx4.mycompany.com elx4

Donde la dirección IP es la de la maquina virtual y “elx4” es el nombre de la maquina instalada luego probar la configuración

hostname -f

El resultado debería ser : elx4.mycompany.com

2.- Crear los certificados para SRTP

Crear la carpeta de los certificados

mkdir /etc/asterisk/keys

Crear los certificados de servidor. Durante el proceso pedirá que ingrese un clave.

/usr/share/doc/asterisk-11.21.0/contrib/scripts/ast_tls_cert -C pbx.mycompany.com -O “My Super Company” -d /etc/asterisk/keys

Crear los certificados de cliente, Es necesario ingresar la misma clave usada en el paso anterior.

/usr/share/doc/asterisk-11.21.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

Configurar los permisos

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

Configurar el soporte de SRTP a nivel de Asterisk

vim /etc/asterisk/sip_general_custom.conf

Agregar al final del archivo.

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

3.- Configurar el servidor HTTP embebido de Asterisk

Crear los certificados

openssl req -new -x509 -days 365 -nodes -out /etc/asterisk/keys/foo.pem -keyout /etc/asterisk/keys/foo.pem

Durante el proceso solicitará los siguiente datos de ejemplo.

Country Name (2 letter code) [XX]:PE
State or Province Name (full name) []:LIMA
Locality Name (eg, city) [Default City]:LIMA
Organization Name (eg, company) [Default Company Ltd]:SILCOM
Organizational Unit Name (eg, section) []:TI
Common Name (eg, your name or your server’s hostname) []:elx4
Email Address []:

Luego para configurar el servicio es necesario ingresar desde la interfase web a Security / Advanced Settings y  activar el uso de Freepbx de la siguiente forma:

WebRTC

Luego ingresar a : https://192.168.10.48/admin/ e ingresar a la opción “Settings / Advanced Settings” y cambiar la configuración en la sección “Asterisk Builtin mini-HTTP server” como se muestra a continuación :

WebRTC

Parámetro

Valor

Certificate file

/etc/asterisk/keys/foo.pem

Enabled HTTPS support for the mini-HTTP Server

True

HTTP Blind Address

0.0.0.0

HTTPS Bind Address/Port

0.0.0.0:8089

Private key file

/etc/asterisk/keys/foo.pem

El archivo “http_additional.conf” deberá reflejar la siguiente configuración:

vim /etc/asterisk/http_additional.conf

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

4.- Crear extensiones con soporte para WebRTC

Ingresar a PBX -> PBX Configuration -> Extensions luego crear 02 extensiones de la siguiente forma :

WebRTC

Ir al final del formulario y hacer clic en el botón “submit” luego editar la extensión creada y configurar los siguientes parámetros.

WebRTC

Parámetro

Valor

Transport

All – WS Primary

avpf

Yes

icesupport

Yes

dtlsenable

Yes

dtlsverify

No

dtlssetup

Incoming and Outgoing

dtlscertfile

/etc/asterisk/keys/foo.pem

dtlsprivatekey

/etc/asterisk/keys/foo.pem

encryption

Yes (SRTP only)

5.- Instalar el Webphone para WebRTC

Descargar el webPhone desde : https://github.com/DoubangoTelecom/sipml5

Luego subirlo a la ruta /var/www/html/ y configurarlo de la siguiente forma:

cd /var/www/html
yum -y install unzip
unzip sipml5-master.zip
mv sipml5-master phone

6.- Configurar el Webphone para WebRTC

Como primera paso es necesario ingresar a : https://192.168.10.48:8089/asterisk/ws

Luego aceptar el certificado de la siguiente forma :

WebRTC

Luego ingresar al cliente WebRTC : http://192.168.10.48/phone/call.htm y nos mostrará el WebPhone

A continuación es necesario ingresar al botón “Expert Mode” como se muestra a continuación :

WebRTC

Luego configurar las preferencias como se muestra a continuación :

WebRTC

El servidor WebSocket tiene que ser : wss://192.168.10.48:8889/asterisk/ws

Ahora configurar el registro del Wephone de la siguiente forma:

WebRTC

Veremos que el WebPhone ser registra y desde el CLI de Asterisk veremos el registro de la siguiente forma:

WebRTC

6.- Probar llamadas desde el WebPhone

Para validar probaremos llamar al buzón de voz (*98) , al marcar al buzón de voz el navegador solicitará permiso para activa el micro y establecerá la llamada, como se muestra a continuación.

WebRTC

Finalmente crear una extensión/anexo “normal” y probar llamadas desde y hacia el WebPhone como se muestra a continuación.

WebRTC

 

7.- Referencias
Probando WebRTC en Elastix 4 (paso a paso)

 

Espero les sirva la información
Juan Oliva
@jroliva