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.

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).


Qué es realmente Elastix 3.0 (ahora Elastix MT)?

Cierta confusión se generó cuando se lanzó el primer ‘alpha’ de Elastix 3.0. Muchos se tornaron sorprendidos al no ver la ya habitual interfaz de FreePBX para administrar los parámetros de telefonía; otros se mostraron desorientados por la organización de la nueva interfaz de administración; y por otro lado estaban los que opinaban que era una versión con muy pocos cambios de fondo… sin embargo, basaban sus comentarios en la ausencia de cambios estéticos (look&feel) a nivel de la interfaz Web.

En todo caso, fue luego de notar esta confusión que me di cuenta de que faltaba información a disposición de los usuarios, así que me decidí a escribir este artículo.

Antes de abordar el tema creo que es necesario explicar qué es un versión ‘alpha’, de este modo se puede entender mejor qué fue lo que se liberó?

Para los desarrolladores de Elastix una versión ‘alpha’ es una versión NO terminada. Se lanza con el objetivo de tener feedback de los usuarios de ciertas características que ya se han implementado, para poder realizar mejoras antes de lanzar versiones más pulidas. Algunas características pueden lucir incompletas o con errores y otras incluso no se encuentran implementadas.

Lo anterior quiere decir que una versión ‘alpha’ es como una casa a medio terminar, a lo mejor luce desprolija y a medio-talle, a lo mejor le falta un piso, pero para evaluarla objetivamente es necesario saber cómo se espera terminar el proyecto. Es decir, tener una idea de cómo lucirá la casa cuando esté terminada. Eso es precísamente lo que haré en el presente artículo: trataré de ilustrar al lector, no de lo que se lanzó con la primera versión ‘alpha’, sino de lo que será Elastix 3.0 cuando esté terminado.

Empecemos…

Elastix 3.0 se planificó luego de analizar dos grandes características ausentes en Elastix.

  1. Soporte Multi-Tenant
  2. Interfaz de usuario-final

A la mitad del proceso de desarrollo nos dimos cuenta de la necesidad de incorporar una característica adicional poderosa:

  1. SIP Proxy embebido

Entonces, procederé a explicar cada una de ellas.

Soporte Multi-Tenant

En el mundo de las soft-PBX y en específico, en el mundo Asterisk, hay mucha discusión respecto al término “multi-tenant”, pero voy a resumir la definición que el equipo de desarrollo de Elastix ha adoptado y es: “que una misma instancia de Asterisk pueda servir a múltiples organizaciones, de tal manera que exista una ilusión de ‘independencia’ entre cada una de ellas”. Es decir, si yo tengo un edificio con 3 empresas, cada una de ellas tendrá su propio plan de marcado y sus propias rutas in/out sin interferir con ninguna de las otras empresas; todo esto con una sola instancia de Asterisk ejecutándose.

Esto suena como algo que se puede hacer con simple plan de marcado, y en efecto así es, pero el reto está en hacer una interface de configuración intuitiva y amigable para administrar cada uno de los ‘tenants’. Además, hay que considerar que la experiencia multi-tenant no solo está relacionada con la telefonía, sino con toda la experiencia comunicacional del usuario, incluyendo correo-electrónico, mensajería instantánea, fax, etc. Hacer esto es realmente un reto importante.

La cuestión de multi-tenant se analizó como una necesidad en Elastix, no solo por el hecho de que hay muchas organizaciones interesadas en compartir un mismo hardware, sino porque la telefonía “en la nube” está en auge y de esta manera más proveedores de “hosting” de PBX pueden adoptar Elastix como su plataforma, evitandoles incurrir en altísimos costos, que casi siempre son transmitidos al usuario.

Cuando las personas piensan que uno de los objetivos de Elastix 3 fue remover FreePBX se equivocan. La remoción de este componente fue más bien una consecuencia de su falta de soporte multi-tenant, así como también otra razón que se explicará más adelante.

Nueva interfaz de usuario-final

Este término es muy muy ambiguo así que requiere un poco de explicación.

Elastix hasta ahora ha sido un producto orientado a proveer de herramientas basadas en Web al administrador del servidor de comunicaciones unificadas, pero no al usuario-final. Es más, en la gran mayoría de los casos el único contacto que el usuario tiene con Elastix es su terminal telefónico. La mayor parte de ellos no tienen idea de qué es Elastix, solo saben que tienen un teléfono que les sirve para realizar llamadas y que existe “algo” que se encarga de gestionar su correo electrónico corporativo, entre otras cosas.

La idea ahora es que Elastix también provea herramientas útiles al usuario-final, permitiéndole gestionar desde una interfaz Web amigable toda la comunicación que necesita, como mensajería instantánea, redes sociales, e inclusive poder realizar una llamada telefónica desde el Web. De cierto modo esta interfaz podría verse como un reemplazo al terminal telefónico, solo que con muchas más características.

Esta interfaz es una de las cosas que todavía no pueden apreciarse en el primer ‘alpha’, pero seguramente incluiremos un primer vistazo en el próximo ‘alpha’ disponible.

SIP Proxy Embebido

Un SIP Proxy dentro de Elastix convierte a nuestro software en una solución de un nivel muy superior. Aparte de que el Proxy embebido en Elastix también cumple las funciones de SIP REGISTRAR.

El software utilizado para esta función es Kamailio. Se eligió a este proyecto de código abierto por tener una comunidad muy activa, la robustez y por la cantidad importante de documentación disponible.

<PENDIENTE>

Otros extras

A pesar de que las dos características anteriores fueron las que inicialmente se analizaron con más énfasis, Elastix 3.0 será más que esto. Si bien no se podrá describir cada una de las mejoras en un solo artículo, citaré algunas de las más importantes.

  • Plataforma basada en CentOS 6
  • Nuevos mecanismos de seguridad
  • Mayor integración entre componentes

Plataforma basada en CentOS 6

Este era un paso obligado y muy demandado por la comunidad. CentOS 6 trae mejor soporte para virtualización (ya incluido en el kernel) así como ext4 (sistema de archivos) por omisión. Una limitante menor que teníamos con la versión anterior (CentOS 5) era la versión de PHP, que no nos permitía tomar ventaja de algunas características de PHP 5 para programar nuevas cosas en la interfaz Web. En todo caso Elastix 3 vendrá con CentOS 6, lo que nos permitirá contar con una plataforma estable y robusta por algunos años más.

Nuevos mecanismos de seguridad

La seguridad se tornó más que importante que nunca en Elastix. Muchos delincuentes informáticos tratan de tomar ventaja de que un servidor Elastix por lo general está conectado a la PSTN, para tratar de pasar tráfico fraudulento a costa del propietario de la centralita. Un servidor de comunicaciones unificadas es como un irresistible panal repleto de miel.

Aparte de muchas mejoras a los paquetes de Elastix, como un rediseño de la utilización de “sudo” a través de la interfaz Web; se diseñaron dos mecanismos interesantes en lo que a seguridad se refiere.

  • Elastix WormHole
  • Sistema Automático de Prevención de Fraude

Elastix WormHole es un nombre que decidimos darle a una suerte de ‘portknoking’. Lo que pretendemos que que por omisión el firewall interno de Elastix deniegue todos los accesos al servidor, a menos que reciba un paquete UDP especial que contiene cierta información encriptada con las credenciales de un usuario de Elastix. El objetivo es que los terminales (como softphones) incluyan soporte para este mecanismo, de tal modo que luego de enviar el paquete UDP adecuado, el servidor Elastix les ‘abra’ el acceso a todos los servicios que el terminal necesita. Como no es un asunto sencillo de explicar en unas cuantas líneas, en las próximas horas publicaremos un documento especificando detalles de lo que es Elastix WormHole.

El Sistema Automático de Prevención de Fraude no es otra cosa que un proceso que se ejecuta en segundo plano y monitorea las llamadas realizadas en cada troncal. Si observa tráfico inusual bloquea las llamadas posteriores y adicionalmente notifica al administrador de la PBX. La troncal no se desbloquea hasta que el administrador tome acciones. Esta característica no estuvo disponible en el primer ‘alpha’ de Elastix 3, pero será incluido en posteriores releases. En su primera versión el criterio para determinar si existe un posible fraude será bastante simple y estará basado en el número de llamadas traficadas por una troncal determinada en un periodo fijo de tiempo. Por ejemplo, 100 llamadas en 30 minutos.

Mayor integración entre componentes

Esta es otra de las razones por las que dejamos de utilizar FreePBX.

Elastix necesitaba más integración entre todos los servicios que ofrece. Por ejemplo, en versiones anteriores había que crear un usuario de la interfaz Web de Elastix por un lado, la cuenta de email del mismo usuario por otro, la cuenta de mensajería intantánea en otro lugar, la extensión telefónica en otro menú diferente, y así. Una de las limitantes que teníamos era que FreePBX no nos permitía flexibilidad al momento de programar este tipo de integración, así que fue un argumento más a favor de dejar de utilizarlo.

En Elastix 3, cuando uno crea una cuenta de usuario, automáticamente se asocian servicios de comunicaciones con esta única cuenta, de tal modo que todo luce más integrado y elegante.

Por supuesto, la creación de cuentas de usuario es solo un tema, hay muchas otras cosas que se pueden mejorar cuando hablamos de integración… pero por ahora los dejo con la incógnita 🙂