Probando WebRTC en Elastix 4 (paso a paso)

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.

Por qué elegir un appliance Elastix?

appliances_elastix_son_mejores {focus_keyword} Por qué elegir un appliance Elastix? appliances elastix son mejores

Un amigo cercano y colaborador de Elastix me hizo notar que publicitamos poco ciertos hechos interesantes acerca de los appliances Elastix. La verdad ponemos mucho esfuerzo en tener un producto de la más alta calidad desde el punto de vista de ingeniería, pero hacemos poco marketing de esto. Así que quise compartirles algunas cosas que sabemos los que trabajamos en el equipo Elastix pero se hablan muy poco fuera. En el presente artículo enlisto y explico 10 buenas razones –aparte del espectacular color naranja por cierto 😉 — por las que es mejor comprar un appliance Elastix en lugar de un servidor cualquiera.

1) Se puede estar seguro de que Elastix funciona sobre este equipo y viene pre-cargado

Cuando alguien compra un computador cualquiera e instala Elastix, hay muchas variables que pueden salir de control. Es muy difícil que podamos probar Elastix para todos las marcas de computadores que existen en el mundo, así que no es imposible que el mainboard o algún dispositivo no sea reconocido correctamente por el sistema operativo o que existan problemas de estabilidad; que en telefonía es inaceptable. Por eso existen los appliances Elastix, y es allí donde nos aseguramos que Elastix funcione de manera óptima. En muchos casos inclusive hemos optimizado la distro para que funcione bien sobre nuestros equipos.

2) Construido sobre la filosofía de chasís totalmente metálico

Así es. ESTAMOS EN CONTRA de usar una carcaza plástica para una IPPBX y existen razones de sobra. Muchos dirán que el plástico está de moda y ayuda a reducir costos, pero en este sentido somos inflexibles y explicaré las razones.

Menos interferencia

Esto es crítico en un equipo de telecomunicaciones donde la interferencia puede afectar la calidad de voz. El chassis metálico desempeña el rol de un escudo contra las interferencias; este principio se conoce científicamente como Jaula de Faraday y existe mucha documentación en Internet (http://es.wikipedia.org/wiki/Jaula_de_Faraday)

Mejor disipación de calor

Es indiscutible que el metal disipa MUCHO mejor el calor que el plástico y un equipo bien refrigerado siempre desempeñará mejor que uno recalentado. Esto sin contar con el alargamiento de la vida útil del equipo.

Mejor resistencia a golpes 

Desde la escuela nos enseñan que los metales son maleables. Esto les permite doblarse en lugar de romperse, lo cual es útil durante el transporte. Basta con ver el siguiente video donde pasamos un auto sobre un appliance Elastix para darse cuenta que es improbable que un appliance plástico soporte este peso encima https://vimeo.com/104447883

 3) Apoyas al proyecto Elastix, un proyecto libre

El equipo Elastix hace un esfuerzo gigantesco para el proyecto siga siendo libre. Invierte miles de horas de desarrollo al año, investigación y desarrollo, alojamiento Web, etc. Son miles de dólares que necesitan financiarse de algún modo. Una manera de contribuir con tal iniciativa es adquiriendo un appliance oficial.

4) Tu appliance es monitoreado 24/7/365 y eres alertado de posibles fallos.

Al momento de adquirir un appliance Elastix uno puede obtener monitoreo desde la nube. De esta manera uno puede ser alertado cuando los recursos del servidor comienzan a utilizarse de manera inusual como por ejemplo si las grabaciones comienzan a llenar el disco duro. Es una manera de estar un paso adelante de los problemas. Con un appliance oficial esto viene incluido, sólo es necesario activarlo.

5) Tienes un 15% de descuento en training y suscripciones de soporte

Así es, creemos que la mejor manera de maximizar la inversión al adquirir un appliance oficial es entrenándote. Aparte, puedes obtener soporte de ingenieros certificados y con mucha experiencia a un precio descontado. Con esta combinación tiene sin duda la mejor opción del mercado.

6) Si requieres soporte, todos nuestros agentes conocen el hardware y te pueden brindar un soporte óptimo

Nuestros agentes de soporte in-house se encuentran familiarizados con todos los modelos de appliances Elastix. Lo que sin duda es una ventaja.

7) Diseñados en latinoamérica

Los appliances Elastix son fabricados en distintas partes del mundo, pero la concepción y el diseño se hacen en latinoamérica. Poco a poco el proyecto Elastix se ha convertido en un símbolo de que sí se puede hacer tecnología de alta calidad en nuestra región y nos sentimos orgullosos de ello.

8) Las características de llamadas concurrentes se hace sobre el 30% de la capacidad de CPU

Esto es una diferencia importantísima si comparamos contra la competencia. Existen otras marcas que publicitan un número de llamadas concurrentes de más de tres veces a las de appliances Elastix usando hardware similar. La diferencia radica en que en Elastix somos MUY conservadores a la hora de publicar el número de llamadas concurrentes de un appliance Elastix. Esto también quiere decir que si un cliente adquiere un appliance Elastix con capacidad para 30 llamadas concurrentes, lo más probable es que soporte muchísimo más llamadas. Lo que queremos es clientes contentos.

9) La solución de bugs reportados sobre instalaciones en appliances Elastix tienen máxima prioridad

Cuando un cliente reporta un problema en la distribución Elastix a través de los canales oficiales, este tiene la prioridad más alta si se trata de un usuario de un appliance oficial. Es lo más justo y es lo más conveniente para un comprador de un appliance Elastix.

10) Todas las pruebas de certificación de hardware se realizan sobre appliances Elastix

 El programa de certificación de hardware Elastix es una iniciativa exitosa de Elastix a la que se han adherido la mayoría de  marcas del mercado de la VoIP (http://www.elastix.org/index.php/en/product-information/certified-hardware.html). Pues entérense: las pruebas de hardware de terceros se realizan sobre appliances Elastix! Esto quiere decir que si adquirimos una tarjeta de telefonía de otra marca, es mucho más probable que funcione bien sobre un appliance Elastix que sobre otro equipo.

Elastix se bifurca en 2 productos

Con el lanzamiento de Elastix 3 el pasado mes de Octubre, comenzó a resultar obvio que existen dos tipos de usuarios. A los que les sirve muchísimo una solución Multi-Tenant como Elastix 3 y los que sólo necesitan una solución para una sola compañía. Este último grupo resulta ser la gran mayoría.

Elastix 3 comenzó su desarrollo como una idea revolucionaria (aquí presentación), pensada con características vanguardistas, que lo hacen interesante para proveedores de centralitas VoIP en la nube. Sin embargo, no todos necesitan todas estas características.

En todo caso, nos dimos cuenta que, si bien estos dos grupos de usuarios tienen necesidades en su mayoría similares, hay algunas que no lo son.

Luego de algunos días de debate se decidimos separar el proyecto en 2 productos:

  • Elastix Single-Tenant
  • Elastix Multi-Tenant

El primer producto se llamará simplemente Elastix y será la continuación de la rama 2, mientras que el segundo producto se llamará Elastix MT.

Elastix MT será básicamente el actual Elastix 3.

Confundido?

Para ilustrar mejor, una imagen.

ramas Elastix se bifurca en 2 productos Elastix se bifurca en 2 productos ramas

Como resulta obvio, para evitar confusión, la evolución de Elastix 2 será Elastix 4. De este modo la versión 3 quedará en la historia como una versión que cambió de nombre a Elastix MT.

Estos cambios se comenzarán a ejecutar la primera semana de Diciembre (2014).

Presentación de Elastix MT (antes Elastix 3)

NOTA: ES IMPORTANTE OBSERVAR QUE Elastix 3 CAMBIO DE NOMBRE Y AHORA SE LLAMA Elastix MT

Hace algunas semanas decidí hacer una presentación acerca de Elastix 3 en algunos eventos a los que fui invitado en Buenos Aires, Asunción y México. Luego de presentarla por 4 veces durante el último mes, decidí compartirla a través de Slideshare.

La presentación está basada en un artículo que escribí hace algunos meses aquí http://www.neomano.com/2012/11/que-es-realmente-elastix-3-0/

En realidad se trata de una presentación con pocas diapositivas, suelo hablar más de lo que proyecto en la pantalla, así que no se si haya mucha información de utilidad. En todo caso les dejo la presentación y espero sea de vuestro agrado.

Al final también encontrarán un video de la presentación. Ver a partir del minuto 11.


 

 

Conviértete en un proveedor de PBX en la nube. Instala Elastix 3 (ahora Elastix MT) en Amazon en menos de 5 minutos.

NOTA: Es importante aclarar que Elastix 3 es ahora Elastix MT

Seguro a más de uno se le ha ocurrido instalar Elastix en la nube de Amazon y no ha encontrado una imagen AMI (Amazon Machine Image) para utilizar para iniciar su instancia (o servidor). Lo único disponible hasta ahora era una imagen de Elastix 2.3.0, un tanto desactualizada.

Cabe destacar que Elastix 3 es una mucho mejor opción sobre Elastix 2 si nos queremos convertir en un proveedor de PBX hosteado y más aun dentro de la nube de Amazon. Las principales razones son:

  • Cuenta con un SIP proxy embebido (Kamailio) y esto hace posible resolver posibles problemas de NAT dentro de la red de Amazon.
  • Es multi-tenant. Es decir, dentro del mismo servidor podemos tener varios clientes, con administración separada entre ellos.

En este artículo no me voy a extender mucho, solo a decir que después de algún trabajo y con ayuda de una persona técnica muy capaz, he podido añadir un AMI de Elastix 3 beta 2 dentro de los Community AMIs de Amazon. Espero lo disfruten y lo utilicen.

Por cierto, la constraseña para ingresar a la interfaz Web la pueden encontrar en el archivo /etc/elastix.conf

OJO: Utilizar la imagen llamada Elastix 3.0-beta2b. 

También recuerden que para acceder a su “instancia” no podrán hacerlo con el usuario root. Utilizar el usuario cloud-user en lugar de root y en caso de necesitar privilegios de superusuario hacerlo con “sudo”.

Les dejo una captura de pantalla de la consola de Amazon y suerte con vuestro nuevo negocio de hosting de centralitas 😉

ami conviértete en un proveedor de pbx en la nube. instala elastix 3 en amazon. Conviértete en un proveedor de PBX en la nube. Instala Elastix 3 (ahora Elastix MT) en Amazon en menos de 5 minutos. ami

Nota: La versión disponible es un beta. Está bien para hacer pruebas piloto del servicio, pero para ponerlo en producción nos tocará esperar un ratito hasta que se libere la versión estable.

Sincronizando la configuración de Elastix con Dropbox

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 😉

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

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 🙂

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

Un softphone libre para Elastix (o algo parecido)

Hace un par de días encontré un código mal parqueado en mi computador. Era un softphone que había escrito en Python y que sirvió de prueba de concepto para un proyecto que nunca llegó a ver la luz.

Como no conocía mucho de Python cuando lo escribí (tampoco ahora) tuve muchas dudas si colgarlo de algún repositorio de código, pues el programa estaba hecho al apuro y con funcionalidad a medio terminar.

La cosa es que me decidí a colgarlo de github.com… Hace tiempo que quería obtener una cuenta allí y probar la plataforma, así que se me ocurrió que era la oportunidad perfecta.

Bueno, volviendo al softphone…

La idea de este softphone es que, aparte de hacer y recibir llamadas VoIP, se comunique con un servidor Elastix para consumir servicios Web, de tal manera que pueda sincronizar la información de contactos local con los contactos almacenados en Elastix. Del mismo modo también se puede tener acceso a los eventos que se crean en el servidor, dentro del menú Agenda.

Un softphone libre para Elastix (o algo parecido) Un softphone libre para Elastix (o algo parecido) Screen Shot 2013 05 28 at 4

Me decidí a usar Python por la sencilla razón de que quería aprender a usarlo. El problema es que Python no es precisamente el lenguaje de elección cuando se quieren hacer interfaces GUI. Exploré algunas alternativas de librerías GUI que se pudieran usar desde Python y que también sean cross platform (es un requerimiento que tenía) y me llamó la atención Qt y WxWidgets, pero finalmente me decidí por TkInter.

Si bien es cierto, TkInter no es un paquete tan poderoso como Qt o WxWidgets, tenía algunas ventajas como ser el GUI de facto de Python (viene junto con Python) y ser relativamente sencillo de aprender… Claro, hay muchas limitantes, pero pensé en “sacarle el jugo” a TkInter hasta donde me fuera posible.

Para la pila SIP no me compliqué y utilicé el conocido PJSIP, pues tiene un puerto para Python.

En fin… ya con todas las herramientas sobre la mesa comencé a codificar y terminé en un producto con el cual experimentar, pero incompleto… todavía hace falta mucho para que sea algo que se pueda considerar estable.

Cabe destacar que para que el teléfono funcione correctamente hay que usar Elastix 3 o instalar un paquete de servicios Web en Elastix 2. Ya explicaré más detalles de esto en los próximos días.

El código del teléfono lo publiqué aquí:

https://github.com/elandivar/elastiphone

El estado actual es “alpha”.

Al final, espero ir mejorando el producto en las grietas de tiempo que encuentre… a paso lento, pero seguro 😉

Elastix se mueve libremente, 6 años después

Foto Best Product of Show Elastix se mueve libremente, 6 años después Elastix se mueve libremente, 6 años después foto premio elastix2

La semana pasada me encontraba conversando con el CEO de una empresa que ha revolucionado el mundo de las comunicaciones, cuando me dijo “Felicitaciones por el premio”. Le confesé que no sabía de lo que me hablaba y me explicó que Elastix había ganado, hace pocos minutos, el premio de mejor producto del Show (BEST PRODUCT OF SHOW 2013). Conversábamos en el salón de exhibición del ITEXPO en la ciudad de Miami, donde se congregan decenas de empresas de telecomunicaciones de todo el mundo.

Al terminar la conversación corrí al stand de Elastix todavía con algo de duda y allí vi el cartel con la condecoración. Paul Estrella, nuestro Product Manager, no podía contener la emoción. Con este, ya son más de una decena de premios internacionales que Elastix ha recibido; del anterior nos enteramos en Madrid a fines del año pasado: El premio BOSSIE 2012 (Best of Open Source Software) que entrega la revista estadounidense Infoworld. 

En el vuelo de regreso a casa me puse a pensar cuánto hemos crecido en tan poco tiempo, donde pasamos de ser tan solo un manojo de ideas a, probablemente, el producto de servidor de comunicaciones unificadas más popular en el mundo, con distribuidores en todos los continentes. Qué motivó ese crecimiento?

Y es que hace 6 años lo único que teníamos era unas cuantas líneas de código y una cuenta recién creada en SourceForge (sitio de alojamiento gratuito de software de código abierto). Hice la primera descarga para comprobar que todo funcionaba y luego de unas semanas ya eran miles, después pasamos el primer millón y seguían multiplicándose. El contador nunca se detuvo.

Al inicio, nuestro presupuesto de marketing era muy limitado, la promoción del producto era casi nula, pero los usuarios seguían descargando el producto.

Entonces, sin una maquinaria publicitaria detrás, qué hizo que la gente lo usara? Por qué se hizo tan popular?

En el medio de esta reflexión vino una conversación con Rafael Bonifaz, viejo amigo del Software Libre. Me contaba que tenía una idea que quería poner en práctica en las elecciones presidenciales de Ecuador, que serán en unos pocos días. La idea era informar, a través de twitter, a todos los candidatos acerca de la importancia del Software Libre como parte de la política tecnológica del estado ecuatoriano y de paso consultarles su postura sobre el Software Libre.

Rafael ya había hecho algo parecido en el 2006 y todo esto terminó convirtiéndose en el famoso Decreto Presidencial 1014, que favorece al Software Libre en contrataciones del Estado Ecuatoriano. Rafael ayudó a concertar una cita entre Rafael Correa y el presidente de la Free Software Foundation. Días después el decreto se pasaba a limpio y se publicaba como oficial.

Entre otras cosas Rafael me comentó que quería que Elastix fuera tomado como un caso de éxito que se pudiera mostrar a los candidatos presidenciales. Asumo que quería demostrar de algún modo que Elastix es un proyecto que se puede replicar en el país.

Por supuesto, me emocionó mucho esa deferencia y le prometí escribir este artículo con la respuesta del por qué Elastix se volvió tan popular, al menos desde mi punto de vista.

Y es que hay pocas cosas que le pueden ganar a UN BUEN PRODUCTO y una de ellas es: UN BUEN PRODUCTO LIBRE.

Estoy convencido de que sin el modelo de negocios que escogimos, basado en un esquema de licenciamiento libre, Elastix no sería lo que es.

Algo muy importante a tener en cuenta es que el mercado en el que competimos con Elastix está lleno de empresas multimillonarias que invierten monstruosas sumas de dinero en investigación y desarrollo: Cisco, Avaya, Microsoft, entre otras. Sin herramientas libres esto hubiera sido imposible para nosotros. Elastix basa su funcionamiento en el orquestado funcionamiento de cientos de paquetes de software, todos ellos libres. Usar plataformas cerradas hubiera sido simplemente prohibitivo para el proyecto. El software libre nos dio muchas oportunidades, entre ellas, el poder hurgar dentro del código para modificar, mejorar, INNOVAR. 

Cada vez que Elastix recibe un premio en una competencia con las gigantes de las telecomunicaciones, me pongo a pensar que no solo es un triunfo del equipo de PaloSanto, o latinoamericano, sino también… del software libre.

Referencias:

Haciendo funcionar un Elastix miniUCS con energía solar

En un post anterior, donde conectaba un servidor Elastix miniUCS a unas pilas comunes tamaño AA, ya se había planteado la idea de enchufarlo a un pequeño panel solar para energizarlo (reconocimiento a Camilo y Augusto por la idea). Después de todo, si se pudo hacer con pilas comunes, era algo lógico que funcionara con un panel solar y unas baterías de más capacidad. La idea es aprovechar el bajo consumo de potencia del miniUCS.

Así que ordené un kit solar de esos que venden por Internet. El kit está compuesto de sólo 2 componentes: el panel propiamente dicho y un controlador de carga. La entrada del miniUCS es DC (Corriente Directa) así que no hace falta un inversor para subir el voltaje a 120VAC (voltaje usado en Ecuador) sino que se puede conectar directamente a la salida del controlador de carga.

Lo que sí tuve cuidado es de ordenar un kit que opere a 12 Voltios pues usualmente vienen en múltiplos de 12 Voltios; y 24 Voltios excede el rango de voltaje de entrada del miniUCS que es de 7VDC a 18VDC.

Haciendo funcionar un Elastix miniUCS con energía solar Haciendo funcionar un Elastix miniUCS con energía solar miniucs solar panel

Hay que anotar que además tuve que conseguir una batería para almacenar la energía, pues obviamente el panel no funcionará en las noches y necesitamos que nuestro servidor opere 24×7.

Como las conexiones son relativamente sencillas (el kit viene con un pequeño diagrama que lo explica todo) no quise limitar este artículo a un set de fotos de cómo conecté los cables y todo eso, sino explicar cómo calcular la capacidad del panel y del banco de baterías para poder utilizar estos cálculos para conectar cualquier equipo, no solo un miniUCS. De esta manera creo que este post aporta más.

Para comenzar con los cálculos necesitamos saber cuánta potencia consume el miniUCS. Si bien la caja está marcada con una potencia nominal de 14Watts decidí medir el consumo real y resulta que el miniUCS sin carga de llamadas consume 8.3 Watts; así que para efectos de este artículo voy a utilizar 10 Watts para tener cierta holgura y para facilitar los cálculos en pro de ser más didáctico.

Haciendo funcionar un Elastix miniUCS con energía solar Haciendo funcionar un Elastix miniUCS con energía solar miniucs power watts

Esto quiere decir que en un día entero nuestro miniUCS consume 10 Watts x 24 horas, es decir 240 Wh (Vatios-Hora). Esta es la cantidad de energía que deberemos suministrarle cada día, ya que el Wh es una medida de energía.

Hasta aquí, si alguien se perdió un poco, le recomiendo refrescarse con Wikipedia antes de proseguir http://es.wikipedia.org/wiki/Vatio-hora

En resumen, necesitamos encontrar un panel solar que en un día nos proporcione 240 Wh o más, para que nuestro miniUCS funcione ininterrumpidamente.

Lo malo, es que los paneles solares no vienen etiquetados con la energía diaria que producen, ya que eso depende de dónde lo instalemos. Si lo instalamos en un lugar donde “pegue” mucho el sol, producirá más energía, mientras que si lo instalamos en un lugar que pasa siempre nublado, producirá menos energía.

Lo único que es posible saber con un panel solar es su potencia nominal. Es decir que el panel fue probado bajo ciertas condiciones controladas y conocidas; y bajo dichas condiciones produjo tal cantidad de potencia llamada nominal.

Por suerte existen mapas (y tablas) que nos dicen, dependiendo de la ciudad donde estemos, el factor por el que tenemos que multiplicar la potencia nominal del panel, para obtener la energía que producirá cada día. Estos mapas usualmente nos proporcionan valores mínimos, máximos y promedios. Lo correcto es utilizar el valor promedio para los cálculos.

A continuación les comparto un link donde se encuentra una tabla con los factores correspondientes a las ciudades más populares de USA.

En caso de que queramos usar mapas (pues a lo mejor se hace difícil encontrar datos para la ciudad donde vivimos), los mapas lucen como la siguiente figura.

Haciendo funcionar un Elastix miniUCS con energía solar Haciendo funcionar un Elastix miniUCS con energía solar world insolation map

Los mapas como el de arriba usualmente se llaman mapas de insolación y dependiendo del color en que se haya sombreada la zona donde se instalará el panel solar, se puede encontrar el factor para el que tenemos que multiplicar la potencia nominal de nuestro panel para obtener la cantidad de energía diaria que genera.

En fin, para no alargar el cuento, para mi ciudad siempre me ha trabajado bien usar un factor de 4. Por lo tanto, para calcular la potencia nominal del panel fotovoltaico divido la cantidad de energía diaria (que previamente calculamos en 240Wh) para el factor de 4 y obtenemos 60 Watts. Es decir que se necesita un panel fotovoltaico de 60 Watts para que el miniUCS esté encendido las 24 horas del día. Si se necesitan menos horas, se hace una regla de 3 y listo… Interesante verdad?

Ahora calculemos la capacidad de la batería que necesitamos comprar.

Continuará…

Agradecimientos especiales: a Eduardo Abad (por conectar todo), Bruno Macías (por conseguir la batería), Paul Estrella (por las fotos), Camilo González y Augusto Sepúlveda (por la idea).