Issabel: una alternativa de código abierto

13 Dic

Hace poco menos de una semana, Elio Rojano nos dió la noticia de la compra de Elastix por parte de 3CX, movimiento con el cual todos sabríamos que una de las distros con Asterisk más usadas se vendría abajo y pasaría a ser completamente de código cerrado.

A pesar de diversos comentarios sobre los directivos de 3CX sobre que mantendrían la comunidad, lo que pasó fue todo lo contrario y comenzamos a ver a varios ex-integrantes de la comunidad siendo bloqueados del acceso a los foros de discusión por el simple hecho de tener algo que ver con FreePBX, la «competencia» open source de 3CX:

Sin embargo, con cada puerta que se cierra se abre una ventana, y es aquí donde existe una oportunidad con Issabel.

En la página principal no nos aparece demasiada información, pero a partir de los comentarios que tienen en sus foros de discusión y de varios otros que he percibido en Twitter, creo que podemos asumir lo siguiente:

  • Se basará en la versión 4.0 de Elastix, la cual usaba CentOS 7.
  • Será un drop-in replacement para Elastix, por lo que debería poder actualizarse de manera semi automatizada (cambiando repositorios).
  • El acercamiento al código deberá ser mucho más transparente, ya que ahora existirá un repositorio abierto en Github para control y monitoreo de cambios.
  • Será creada a partir de una comunidad, sin un respaldo único empresarial por detrás (a diferencia de Elastix cuyo patrocinador Palosanto dictaba todos los cambios y rumbos a seguir).

Quienes me conocen saben que desde hace algún tiempo dejé de utilizar Elastix como mi principal distro por el muy lento nivel de desarrollo que tuvo en los últimos meses (¿o años?) sobre sus componentes de código abierto, y que en su lugar comenzó a concentrarse mucho en funcionalidades comerciales, tales como su versión Cloud o la versión Business Edition. Personalmente, solo me queda esperar que al ser un esfuerzo de la comunidad para la comunidad, la historia a contar ahora sea diferente, y que pronto aquellos que le dieron el apoyo con su tiempo, dinero y esfuerzo obtengan el producto que realmente se merecen.

Descomercializando a FreePBX

8 Dic

Noticias como la del día de ayer de que 3CX adquirió a Elastix nos tomaron a muchos por sorpresa, pues una de las distribuciones de código abierto de Asterisk más conocidas del mundo pasaba a ser propiedad de una empresa que, de entrada, cambió por mucho el alcance del proyecto al poner limitantes en cuanto al uso de la versión «gratuita» del nuevo Elastix 5.

Como resultado de lo que muchos llaman la muerte del proyecto Elastix como lo conocemos, las miradas empezaron a voltear hacia FreePBX: la interfaz gráfica de facto para Asterisk, y de las pocas (junto con IncrediblePBX y Xivo) que siguen operando bajo la modalidad libre.

FreePBX también pasó por lo mismo en enero de 2015, cuando Sangoma adquirió a Schmooze, la empresa que dirigía el proyecto original. Al hacerlo, Sangoma también se ganó los derechos de enfocar el código hacia su propia visión y comenzar a incluir varios (si no es que muchos) componentes comerciales en las nuevas versiones del software.

Esto último molestó a muchos (yo me incluyo), pues el feeling que me dejó es que un proyecto abierto pasaba a recibir comerciales, y si bien esta comercialización del producto es una de las cosas que mantiene viva a la empresa que le da mantenimiento (entiéndase: Sangoma), al ser un proyecto bajo licencia GPL el usuario final no está obligado a usar ninguno de estos módulos, que de hecho, son muy fáciles de retirar.

Si eres como yo y quieres quedarte con un producto que sea 100% de código abierto sin sentirte molestado por los módulos comerciales, simplemente ejecuta los siguientes comandos desde tu consola de FreePBX:

for i in $(fwconsole ma list|grep Commercial|grep -v 'Not Installed'|cut -d' ' -f 2); do fwconsole ma uninstall $i; done

Esta simple línea de código buscará todos los módulos comerciales que se encuentren instalados en el sistema y los eliminará, uno por uno. Si acaso el comando te da un error diciendo que no es posible desinstalar un módulo porque otros dependen de él, simplemente repite el comando 2 o 3 veces para que primero se desinstalen las dependencias base y después el módulo que necesitas.

Ya después de eso solo necesitas aplicar los cambios en el GUI para que todo funcione como antes, y tendrás un sistema FreePBX 100% descomercializado.

¡Suerte!

La cultura del «todo gratis» está matando al Open Source.

7 Dic

Antier por la tarde un tweet de un desarrollador de FreePBX me llamó la atención. «Wow… Acabo de escuchar que 3CX está comprando a Elastix…»

De inmediato pregunté a sus creadores si el rumor era cierto. No obtuve respuesta.

Hoy por la mañana Elio Rojano a través de su sitio Sinologic.net ha confirmado lo peor: Elastix ha sido vendido a una empresa cerrada que trabaja bajo Windows y que ahora renombrará Elastix como 3CX for Linux

Todos los detalles pueden encontrarse en el sitio de Elio: https://www.sinologic.net/blog/2016-12/adios-elastix.html

Lo que a mi me preocupa y que la «comunidad» no ha alcanzado a ver es que la cultura del Todo gratis mata lentamente los proyectos FOSS, nos pasó con Trixbox hace unos años, nos pasó con MySQL y existen varios ejemplos más de cómo proyectos se vienen abajo por nada más y nada menos que la plata.

Ya lo decía alguien -que no encuentro la fuente- en mi timeline de Twitter, que aquel que quiera hacer negocio basado en Open Source (OS) debe estar loco o engañandose. Y es cierto todas las comunidades de OS están repletas de esos usuarios que ven una oportunidad de venta sin sacrificio. Lo he repetido una y otra vez hablando de Elastix, siempre hubo usuarios que sólo entraban a los foros a preguntar «¿Cómo hago esto?» «¿Cómo implemento aquello?» «Tengo una empresa de VoIP y me urge resolver esto a mis clientes». En cuanto se les mencionaba el soporte de pago huían (en el mejor de los casos). En el peor decían que era obligación de los creadores dar soporte gratis. Yo lo viví cuando trabajé en 2 de las empresas más fuertes de VoIP de la Ciudad de México: recibí llamadas de gente exigiendo soporte gratuito porque Asterisk es OS.

Esa es la gente que daña a la comunidad. También está la otra cara de la moneda: aquellos que apoyan mediante donaciones, participando en foros de discusión, reportando bugs, creando parches, módulos, etcétera. Lamentablemente son los menos.

Ahora bien como lo comenta Christian en un tweet, habrá que esperar y ver si esto puede ser un paso a las mejoras:

Siempre he sido un escéptico de las versiones enlatadas y sé que esto para los que saben Asterisk puro no representa ninguna tragedia. Sin embargo, como la única distribución creada por latinos para latinos es un fuerte golpe a la comunidad de habla hispana, o una estrategia para solo dejar FreePBX en el mapa. Cualquiera que fuese el resultado, la ventaja de que Asterisk sea un toolkit es que cualquiera con mínimos conocimientos podría crear la nueva distro enlatada para ser el una de las alternativas.

¿Cuantos más 2016, cuántos más?

Valida tus teléfonos móviles y fijos con la base de datos del IFT

13 Ene

Plan de numeración Instituto Federal de Telecomunicaciones

La versión más reciente de este código la podrás encontrar en Github.

En México tenemos diferentes mecanismos de marcación de un número, dependiendo si este es fijo (01) o celular (044 o 045). Esto complica un poco las cosas, ya que el identificador de llamadas (callerid) siempre es de 10 dígitos, por lo que si recibimos una llamada de un número X, no podemos simplemente devolver la llamada a este número ya que tenemos que prefijarlo según el tipo de teléfono destino que es.

Afortunadamente, el Instituto Federal de Telecomunicaciones (IFT) publica una base de datos que determina si una serie telefónica corresponde a un número móvil o fijo. Dado que aquí los teléfonos los marcamos diferentes dependiendo del tipo de línea, es muy importante tener presente siempre que tipo de teléfono es el que estamos llamando para ajustar nuestro plan de marcación acorde.

Esto resulta muy conveniente de hacer en sistemas de marcación predictiva donde las listas pueden estar capturadas a 10 dígitos y nosotros convertir cada número a fijo o móvil según la base nos lo diga. En Asterisk, esta funcionalidad es muy fácil de implementar con una base de datos, una función personalizada de ODBC (func_odbc) o un AGI. Aquí te dejo la guía de como lograrlo utilizando un AGI.

Antes de comenzar, asumimos lo siguiente:

  • Que ya tienes instalado PHP en tu sistema.
  • Que ya tienes instalado y cuentas con experiencia con MySQL y que sabes como importar tablas a partir de un archivo SQL.
  • Que la base de datos de nombre asterisk ya está creada.
  • Que entiendes el plan de marcación básico.

Dando esto por sentado, comencemos:

Paso 1. Consigue el listado de numeración del IFT

Ya me encargué de limpiar la lista y dejar solamente estos 5 campos:

  • Código de área (int)
  • Serie (int)
  • Numeración inicial (int)
  • Numeración final (int)
  • Móvil (bool)

Puedes descargar el archivo ya en formato SQL listo para importar. Si prefieres conseguir el archivo por tu cuenta directamente del IFT y actualizarlo tu, puedes conseguirlo desde esta liga.

Una vez descargado, descomprímelo e impórtalo en MySQL. En este tutorial asumiremos que la tabla se creará en la base de datos asterisk. Si lo quieres poner en una base de datos diferente, edita el archivo SQL y apúntalo a donde necesites.

Para proceder, necesitas la contraseña de root de MySQL:

mysql -p asterisk < bdift_safe.sql

Esto creará la tabla ift en la base de datos asterisk. Ahora crearemos el AGI para poder consultarla.

Paso 2. Crea el AGI ift.php

Para el siguiente paso, crearemos un AGI que se encargue de consultar la tabla creada en el paso anterior. El AGI lo crearemos con el nombre /var/lib/asterisk/agi-bin/ift.php.

#!/usr/bin/php -q
<?php

// Cambiar esta constante por el codigo de area local desde donde se originan las llamadas
define('LOCAL','55');

// Parametros de acceso a la base de datos.
$db['user'] = 'asteriskuser';
$db['pass'] = 'asteriskpass';
$db['name'] = 'asterisk';
$db['host'] = 'sql.enlaza.mx';

// ***************** No cambiar nada a partir de este punto

require_once "phpagi.php";
$agi = new AGI();

if ( (!is_numeric($argv[1])) || (strlen($argv[1]) < 10) ) {
	$agi->verbose('No se proporciono un numero de 10 digitos');
	$agi->set_variable('MOVIL',0);
	$agi->set_variable('PREFIJO','');
	$agi->set_variable('COMPLETO','');
	exit;
}

// Nos quedamos solo con los ultimos 10 digitos para asegurar que quitamos cualquier prefijo
$numero = substr($argv[1],-10);

if (!$data = mysql_connect($db['host'],$db['user'],$db['pass'])) {
	$agi->verbose('Error de conexion a la BD');
	$agi->set_variable('MOVIL',0);
	$agi->set_variable('PREFIJO','');
	$agi->set_variable('COMPLETO','');
	exit;
}

// Definimos codigos de area de 2 digitos para conocer cual es el codigo de area y cual es el numero local
$areas = array('55','81','33');
if (in_array(substr($numero,0,2),$areas)) {
	$area = substr($numero,0,2);
	$local= substr($numero,2);
	$serie= substr($local,0,4);
}
else {
	$area = substr($numero,0,3);
	$local= substr($numero,3);
	$serie= substr($local,0,3);
}

$query = "SELECT movil FROM ".$db['name'].".ift WHERE SUBSTRING('$numero',7) BETWEEN inicial AND final AND `area` = $area AND serie = $serie LIMIT 1";
$result = mysql_query($query,$data);
$row = mysql_fetch_array($result);
$agi->set_variable('MOVIL',$row['movil']);

if (substr($numero,0,strlen(LOCAL)) == LOCAL) {
	if ($row['movil'] == 1) {
		$agi->set_variable('PREFIJO','044');
		$agi->set_variable('COMPLETO', '044'.$numero);
	}
	else {
		$agi->set_variable('PREFIJO','');
		$agi->set_variable('COMPLETO', $local);
	}
}
else {
	if ($row['movil'] == 1) {
		$agi->set_variable('PREFIJO','045');
		$agi->set_variable('COMPLETO', '045'.$numero);
	}
	else {
		$agi->set_variable('PREFIJO','01');
		$agi->set_variable('COMPLETO', '01'.$numero);
	}
}
exit;
?>

Para que funcione es necesario cambiar:

  • La constante LOCAL. Reemplázala por el código de área de tu población.
  • Los parámetros de conexión a tu base de datos.

El AGI es bastante sencillo y lo que hace es:

  1. Recibe como argumento un número de 10 dígitos. No debe tener más ni menos.
  2. Descompone ese número y extrae el código de área, ya sea de 2 dígitos (México, Guadalajara o Monterrey) o de 3 dígitos (resto del país) y la serie del número local.
  3. Compara estos números contra la base de datos creada.
    1. Si encuentra el registro, lo cataloga de acuerdo al campo movil de la tabla.
    2. Si no lo encuentra, lo cataloga como fijo.
  4. Para la entrega de resultados, el AGI crea las siguientes variables:
    1. ${MOVIL}. Es 0 o 1, dependiendo si el número se considera fijo o móvil, respectivamente.
    2. ${PREFIJO} es el prefijo de marcación: 01, 044 o 045.
    3. ${COMPLETO} contiene el número tal cual se tiene que marcar de acuerdo al plan de numeración de México. Es la combinación de ${PREFIJO} y de ${EXTEN}. Si el número es fijo y está en el mismo código de área que el AGI, entonces te lo entrega en 7 dígitos.

Ejemplos de corrida. Asumimos que la variable LOCAL es configurada con 33 (Guadalajara):

  • AGI(ift.php,5546144400) te da:
    • ${MOVIL} es 0, ya que el número es fijo.
    • ${PREFIJO} es 01, ya que es considerado larga distancia nacional.
    • ${COMPLETO} es 013346144400
  • AGI(ift.php,5513208860) te da:
    • ${MOVIL} es 1, ya que el número es celular.
    • ${PREFIJO} es 045, ya que es considerado celular con LDN.
    • ${COMPLETO} es 0455513208860.

Paso 3. Crea el plan de marcación

El último paso es utilizar las variables que el AGI crea para hacer la marcación. El plan de marcación se colocará en el extensions.conf de /etc/asterisk, y será algo más o menos así:

exten => _NXXXXXXXXX,1,AGI(ift.php,${EXTEN})
same => n,Dial(DAHDI/g0/${COMPLETO},,Tt)

Si estás utilizando FreePBX o Elastix, el plan de marcación lo pondrás dentro del extensions_custom.conf, y la troncal la crearás de tipo custom para que pueda apuntar a este plan de marcación personalizado.

Con este AGI puedes implementar una marcación uniforme y evitar muchos posibles errores de marcación (muy útil si esto lo haces en un callcenter). Actualmente, muchos de nuestros clientes utilizan una variante de este script y sus sistemas funcionan sin problema.

¿Alguna duda? Déjala en los comentarios.

¡Suerte!

Generador de contraseñas seguras para Asterisk/Elastix

8 Sep

CapturaDice el dicho que una cadena es tan fuerte como su eslabón más débil, y en muchos de los casos, las contraseñas inseguras que ocupamos en las extensiones de nuestro conmutador son la principal causa por la que nos llevamos desagradables sorpresas como recibir cuentas millonarias porque un atacante ganó acceso a nuestro equipo y curso tráfico no autorizado con alto costo para nosotros.

Como instalar equipos basados en Asterisk es parte del pan de todos los días, optamos por crear un generador de contraseñas seguras que te permita de manera rápida:

  1. Crear un pool de cadenas de texto aptas para ser utilizadas como contraseñas.
  2. Que permita generar la configuración de un sistema con interfaz gráfica (por ejemplo: Elastix) de manera rápida y con la plantilla default creada, descargándola como un CSV listo para importar.

Hemos estado utilizando esta herramienta ya por varios meses, pero hoy la damos a conocer para que todos ustedes puedan aprovecharla. Para usarla, solo deben proporcionar 3 datos:

  1. La lista de extensiones sobre la cual generar las contraseñas. Pueden usar valores individuales (ej. 101, 102, 105, etc) o rangos (ej. 101-200).
  2. Una clave inicial que servirá como semilla para generar las contraseñas seguras.
  3. La longitud deseada para tus contraseñas.

El sistema te regresa una cadena de texto con el alfabeto 0-9a-zA-Z. No utilizamos caracteres especiales porque sabemos que hay algunos sistemas que no te los reconocen, así que preferimos irnos a la segura y desplegar lo universal.

La aplicación es libre y puedes utilizarlas las veces que necesites. La única restricción es que por cuestiones de rendimiento, solo puedes generar lotes de hasta 500 extensiones.

Puedes comenzar a utilizar esta herramienta desde la siguiente liga (nota: se encuentra hospedada en el dominio de Enlaza Comunicaciones).

¡Suerte!

Review Grandstream DP715: buen teléfono inalámbrico de bajo costo

22 Ago

DP715 con su base

Nuestros amigos de Grandstream nos hicieron llegar hace unos meses una muestra de su familia de teléfonos inalámbricos: el DP715. Este apunta a ser un teléfono inalámbrico VoIP de altas funcionalidades y bajo costo, compitiendo en un nivel económico que lo situa más abajo de teléfonos de su competencia como lo es el Aastra MBU400 (ahora descontinuado) o el Yealink W52G.

En esta nueva familia de teléfonos inalámbricos hay 2 variantes: el DP715 y el DP710. La diferencia entre ambas parece mínima en simple apariencia pero muy significativa en operación. El DP715posee una estación base que además de ofrecer la carga de la unidad, controla las comunicaciones y actúa como el puente entre la parte inalámbrica (DECT) y la parte VoIP (SIP), mientras que el DP710 solo posee una base cargadora que provee de energía a las baterías recargables de la unidad, por lo que debemos ligar nuestro DP710 con la base de algún DP715 que tengamos. Cabe mencionar que es posible usar una sola base de un DP715 para controlar hasta otros 4 handsets DP710 por separado.

Características generales

  • Teléfono inalámbrico DECT/GAP
  • Protocolo SIP
  • Rango de frecuencias:
    • 1880 ~ 1900 MHz (Europa)
    • 1920 ~ 1930 MHz (USA)
    • 1910 ~ 1920 MHz (Brasil)
  • Potencia de emisión: 10mW
  • Rango: 300m en exteriores, 50m en interiores.
  • Display LCD (con backlight azul) de 1.7 pulgadas con resolución de 102×80 pixeles.
  • Codecs soportados: G711u/a, G723.1, G726-32, G729A/B e iLBC
  • Funcionalidades de caller Id, llamada en espera, transferencia atendida/desatendida, redireccionamiento, hold, DND (no molestar), llamada tripartita
  • Configuración por interfaz web. Provisionamiento por HTTP, HTTPS o TFTP.
  • Soporte para TLS, sRTP y HTTPS.
  • Multi-lenguaje (inglés, francés, alemán, español, alemán, italiano, checo, danés, griego, noruego, polaco, portugués, ruso, sueco o turco)
  • Estación base con 4 LEDs indicadores: encendido, red, registro y llamada.
  • Duración de la batería catalogado en 10/80/16 horas (llamada/standby/carga)
  • Una sola estación base (DP715) puede controlar hasta 5 handsets, con la posibilidad de tener 4 llamadas simultáneas.

Contenido de la caja

El contenido de la caja

El contenido de la caja

Al momento de abrir la caja que contiene al aparato, el teléfono cuenta con todos los componentes comunes que esperaríamos encontrar:

  • Teléfono inalámbrico (handset)
  • Estación base
  • Cable de red
  • Eliminador de corriente
    • Entrada: 110V 0.15A
    • Salida: 6v 0.5A
  • Baterias recargables NiMH (2x AAA 500mAh)
  • Tapa
  • Funda con sujetador para cinturón
  • Manual

Fabricación y primeras impresiones

El teléfono en su caja original

El teléfono en su caja original

Tras abrir el paquete, una muy grata sorpresa fue la batería, ya que se trata de 2 pilas recargables AAA convencionales. Esto quiere que no hay que preocuparse por conseguir una batería de reemplazo especial, ya que podemos adquirir nuevas baterías en cualquier tienda de autoservicio y dicho sea de paso, también tenemos la posibilidad de tener un juego adicional «cargado» en todo momento para aquellos casos donde tengamos una necesidad de uso larga y que no deseemos esperar a que la carga concluya.

Los controles del teléfono son sencillos e intuitivos: posee el teclado habitual (dígitos 0-9, #, *), botón de llamado/Send, botón de colgado/hangup, teclas de menu izquierdo/derecho y un pequeño pad de 4 direcciones para navegar por el menu. El botón de encendido y apagado viene integrado dentro del botón de colgado, mientras que el de altavoz/speaker, viene integrado dentro del propio botón de send, simplificando aún más el diseño.

Como se aprecia en las fotos, el teléfono tiene una pantalla LCD de 1.7″ monocromática retroiluminada con luz azul. Al no tener pantalla a color, ayuda a preservar la batería en lo que más nos interesa: las llamadas. El teléfono soporta multi idiomas con lo que es posible visualizarlo todo en español desde un inicio (no es necesario instalar ningún paquete de lenguaje, ya viene listo). Tiene soporte de 18 melodías base instaladas en formato polifónico, por lo que no es posible personalizar el ringtone con música de mayor calidad.

Configuración

El teléfono soporta configuración via provisionamiento por HTTP, HTTPS o TFTP, así como la típica configuración web amarillo/naranja que caracteriza a los Grandstream. Hay muchas opciones que se pueden configurar dentro del área avanzada y los perfiles, aquí dejamos los screenshots de la configuración para que puedan ver los parámetros aceptados por el teléfono:

Pantalla de estado

Pantalla de estado

Pantalla de configuración de perfil

Pantalla de configuración de perfil

Pantalla de configuración avanzada

Pantalla de configuración avanzada

Pantalla de handsets

Pantalla de handsets

Pantalla de configuración básica

Pantalla de configuración básica

Un detalle que notamos es que en el DP715 cada teléfono tiene que estar relacionado con un usuario SIP diferente en el conmutador, por lo que no te es posible crear «grupos» de handsets que reciban las llamadas entrantes por la misma cuenta. Esta es una funcionalidad que tienes que darle explícitamente al conmutador (Asterisk en nuestro caso), y que el teléfono no tiene posibilidad de elegir.

El manual de configuración (en inglés) es bastante fácil de conseguir y viene muy bien documentado con las partes, botones, funciones y campos a configurar en el teléfono.

Experiencias

Indicadores de la base: power, ethernet, registro y llamada

Indicadores de la base: power, ethernet, registro y llamada

La conexión del teléfono es muy sencilla: un puerto es el ethernet y otro el de la alimentación eléctrica (sería interesante ver que el teléfono solo ocupara PoE, para así no requerir el conector eléctrico). Tras arrancar, lo primero que la base tratará de hacer es registrarse hacia el servidor que hayamos especificado en su configuración.

Un tema que siempre es importante en un teléfono inalámbrico es la autonomía de la batería. La duración de fábrica está catalogada como 10 horas en habla, 80 horas en standby. Sin embargo, haciendo nuestras pruebas en laboratorio pudimos comprobar que el teléfono fue capaz de permanecer hasta 23 horas en llamada contínua usando una sola carga de las pilas AAA incluidas. Si hubiéramos reemplazado las pilas por unas de mayor calidad (Duracell, Energizer) y de mayor capacidad, probablemente habríamos estado cerca de duplicar el ya de por si sorprendente tiempo de habla contínua.

Al momento de probar el auricular notamos una excelente calidad en la llamada al usar codecs de narrowband. Soporta G729, G711u/a, iLBC, G723 y G726-32. Una característica que echamos de menos es el soporte para G722, con lo que podríamos tener conversaciones usando un codec wideband, con lo que la calidad mejora notablemente comparada con los codecs tradicionales de narrowband. Aún así, la calidad del teléfono en las pruebas fue muy buena, no padeciendo de problemas de estática/interferencia mientras que estuviera dentro del alcance esperado del teléfono.

El altavoz del teléfono es bueno, pero tampoco lo usemos esperando que sea un teléfono para conferencias. El volumen máximo que ofrece es un tanto bajo, pero dado que está pensado solamente para usarlo como una alternativa de «manos libres», es una buena funcionalidad que hoy en día ya damos por sentada en todos los teléfonos VoIP.

Otra característica que echamos de menos fue la falta de un jack de 2.5mm que permitiera conectar un manos libres al teléfonos, lo que permitiría total movilidad dentro del ambiente de trabajo. Sería una característica muy bien recibida ya que aunque el tamaño del teléfono resulta relativamente cómodo para sostener el aparato presionándolo entre la oreja y los hombros, si se pudiera contemplar un headset reduciría los dolores de cuello y aumentaría la comodidad de usar el aparato por largos periodos de tiempo.

Nuestras pruebas de alcance fueron satisfactorias. Contamos con una oficina de 100m2 ubicada en un 1er piso con frente a la calle, con lo que era posible tomar la unidad, establecer una llamada y recorrer todos los rincones de la oficina e inclusive, tomar las escaleras del edificio, descender a nivel de calle, cruzarla y aún así la llamada seguía arriba, sin problemas. También tomamos el teléfono, cruzamos el estacionamiento que tenemos al lado y entramos a la tienda de autoservicio que está a 2 locales sobre nuestra calle. Aún con el ruido e interferencia generado por los aparatos eléctricos de la tienda de autoservicio, la llamada aún era entendible. Esto fue un caso extremo, pero es bueno saber que si tuviéramos que bajar o subir pisos con el teléfono, aún así sería posible mantener la llamada arriba.

Desafortunadamente en el tema del alcance, el teléfono no soporta roaming. Esto quiere decir que solo puede tener cobertura dentro del área de transmisión de la base en la que esté registrado, sin posibilidad de saltar hacia otros access points o radio bases.

Conclusiones

El DP715 es sin duda un excelente producto orientado al mercado PyME que desea tener movilidad entre múltiples aparatos dentro del un área de trabajo relativamente pequeña. La duración y facilidad de reemplazo de sus baterías son fuertes puntos a favor, pero carece de algunas de las características más avanzadas que vemos en otros teléfonos (como el roaming o la integración con manos libres). Sin embargo, cuando hacemos la comparación de relación costo/beneficio, vemos rápidamente que el DP715es un excelente teléfono con las funcionalidades que por su rango de precio, esperamos obtener.

Ventajas

  • Relativo bajo costo por unidad (precio público < 145 USD en el mercado).
  • Configuración sencilla e intuitiva, idéntica a otros productos Grandstream.
  • Buena calidad en audio y buen alcance de transmisión.
  • Pilas AA recargables genéricas, por lo que su reemplazo y carga es muy sencilla.
  • Larga duración de batería.

Desventajas

  • El teléfono tiene el mismo atractivo visual que un teléfono inalámbrico de gama baja (sin pantalla a color).
  • Sin soporte para audio HD.
  • No soporta roaming.
  • No tiene entrada para manos libres.
  • No utiliza PoE.

Configurando OpenVPN en un teléfono Denwa DW-310P

21 Ago

denwa+openvpnUna funcionalidad muy bienvenida en los nuevos teléfonos de VoIP es la posibilidad de soportar la creación de una VPN, ya que de esta manera podemos asegurar el tráfico que pasa por nuestro teléfono y además, garantizar que no sufriremos de los problemas de NAT característicos de SIP ya que toda la voz pasará por una red «local» y no por un firewall que podría detener parte de lo que estamos enviando.

En particular, las redes creadas sobre TLS (como es el caso de OpenVPN) son atractivas porque pueden levantarse completamente en software sin la necesidad de adquirir hardware externo para que se dedique a esto. Si bien las VPNs en hardware son de mayor rendimiento, la sencillez con la que podemos instalar un servicio de OpenVPN dentro del mismo servidor donde tenemos nuestro conmutador Asterisk hace que sea la opción más clara a seguir.

Existe en internet una gran cantidad de tutoriales que explican como configurar un teléfono Yealink con el servicio de OpenVPN. Sin embargo, existen otros teléfonos menos conocidos (y también más económicos) que ofrecen esta misma funcionalidad pero que hasta el momento, encontrar el procedimiento para configurar el servicio no había sido clara. Esperamos que con estos pasos que presentamos a continuación se aclaren muchas dudas.

En esta ocasión vamos a mostrar como configurar OpenVPN con un teléfono Denwa DW-310P (haremos un review próximamente del teléfono). Partiremos de los siguientes supuestos:

  • Ya tienes Asterisk instalado (no importa la versión).
  • El servicio de OpenVPN ya está instalado. Hay muchos tutoriales que te indican como hacerlo.
  • Entiendes que Asterisk posee 2 direcciones IP:
    • La «regular» que es la que usas para conexiones en tu misma red y/o fuera de la VPN.
    • La de la VPN, que es a la que apuntarán los equipos que se encuentren en un ambiente remoto.
  • El equipo donde estás trabajando es Windows.

Los pasos a seguir son muy sencillos:

  1. Descarga el archivo con los ejecutables para crear el security file que el teléfono tiene. Atención: es probable que un sistema antivirus catalogue su contenido como una amenaza, pero es normal.
  2. Descomprime el archivo. Te deberá quedar la siguiente estructura:
    1. bintoarray.exe
    2. OpenVpn.bat
    3. mkromfs.exe
    4. Directorio ‘config’ (está vacío)
  3. Dado que ya tienes tu servidor OpenVPN corriendo y estás familiarizado con el proceso, consigue los archivos necesarios para crear tu conexión VPN y ponlos en el directorio recién creado config siguiendo los siguientes nombres de archivo:
    1. ca.crt: El certificado de la entidad certificadora (CA)
    2. client.ovpn: Archivo de texto que contiene la configuración del cliente de OpenVPN (en Linux tendría extensión .conf o .cnf)
    3. client.crt: El certificado para el cliente
    4. client.key: La llave privada para el cliente
  4. Con los 4 archivos dentro del directorio config, dale doble-click al archivo OpenVpn.bat para ejecutarlo. Tras hacerlo, se generarán dos archivos: OpenVpn.bin OpenVpn.h.
  5. Entra a la interfaz web del teléfono. Dentro de las pestañas de Seguridad / Seguridad existe una sección que te permite «Actualizar archivo de seguridad». Entra a dicha opción y sube el archivo OpenVpn.bin que creaste con anterioridad.
  6. Cuando el archivo termine de subirse, en la parte inferior te aparecerán los nombres de los archivos originates (ca.crt, client.key, client.crt, client.ovpn), indicando que fueron reconocidos exitosamente (Recuerda: tu solo subes un archivo y en la pantalla aparecerán 4 diferentes).
  7. Con el archivo subido, acceder a Seguridad –> VPN –> Modo VPN. Habilitar el checkbox que dice «Habilitar VPN», seleccionar el uso de OpenVPN, guardar los cambios y reiniciar el teléfono.
  8. Tras reiniciar, si accedes a Seguridad –> VPN en la parte superior se te mostrará la IP que tu servidor de VPN le entregó al teléfono.

Con la VPN creada, la configuración del teléfono queda exactamente igual que como lo harías en cualquier otro caso:

  • Entras a la configuración de la cuenta.
  • Das de alta la IP de Asterisk, el usuario y la contraseña de tu cuenta SIP.
    • Recuerda: la IP de Asterisk ya no es la que usas normalmente, sino la que el equipo de Asterisk posee en el segmento de tu VPN.
  • Guardas y aplicas los cambios.

Desafortunadamente el teléfono donde validamos este procedimiento ya fue devuelto al proveedor, pero tan pronto tenga acceso a uno nuevamente tomaré unos screenshots del proceso para que no queden dudas.

¡Suerte!

Asterisk vs Elastix vs Trixbox vs AsteriskNow vs FreePBX: Explicando la diferencia

31 Jul

Actualizado el 2016-01-15 para reflejar los cambios más recientes a las distribuciones.

Una de las actividades más importantes en mi vida profesional es la de capacitar sobre el uso de la plataforma Asterisk®, y durante los cursos que doy recibo frecuentemente preguntas como estas:

  • ¿Cuál es la diferencia entre Asterisk y Elastix?
  • Tengo sistemas basados en Trixbox. ¿Puedo migrarlos a Asterisk?
  • ¿Es lo mismo Asterisk que AsteriskNow?

Cuando escucho estas preguntas es fácil darme cuenta que hay mucha diferencia entre los productos que reciben una promoción comercial contra los que son el proyecto base sobre el que se construye el producto comercial, y por eso quiero establecer la diferencia.

 

Asterisk «puro»

Asterisk es software open source, hecho en lenguaje C y creado originalmente por Mark Spencer (actual CTO de Digium, empresa que patrocina la mayor parte del desarrollo de Asterisk). Este software, por si solo, no es una herramienta plug-and-play que posea la capacidad de hacer llamadas, sino que es necesario atravesar por numerosos pasos (descarga, compilación, instalación y configuración) para que pueda realizar labores útiles. Sin embargo, es un elemento base: una plataforma para crear cosas más grandes, para que de allí podamos construir un sin fin de aplicaciones basadas no solamente en voz, sino en la unión con datos y/o cualquier otro sistema de cómputo que necesitamos que interactúe con un teléfono.

Asterisk puede instalarse en cualquier distribución de Linux, por lo que podemos usar Debian, Ubuntu, Mint, CentOS, RedHat, OpenSuse, etc. También se puede instalar en FreeBSD, MacOS y hay algunos ports para Windows, pero solo es en Linux en donde se tiene el soporte completo para su ejecución. Esto quiere decir que puedes tomar prácticamente cualquier PC que tengas y usando Asterisk la puedes convertir en un servidor de comunicaciones totalmente gratuito y open source.

Si quisiéramos hacer una analogía, Asterisk es el motor de un automovil. El motor es la parte base: sin él no se puede andar, pero por si solo no puede hacer gran cosa. Necesita de varias otras partes: asientos, volante, frenos, etc. para poder entregarnos la experiencia completa de poder conducir un vehículo.

Aquellas personas que optamos por especializarnos en Asterisk puro tenemos la opción de tomar 2 certificaciones que están disponibles: el dCAA (Digium Certified Asterisk Administrator) o el dCAP (Digium Certified Asterisk Professional). Ambas certificaciones son avaladas por Digium, y buscan reconocer que la persona que las posea cuenta con los conocimientos necesarios para instalar y configurar un servidor de comunicaciones basado en Asterisk, pero usando solamente la línea de comandos, con la que tenemos el máximo control, pero también la máxima complejidad.

Ventajas: 

  • Tienes total control: puedes hacer lo que quieras y actualizar en cualquier momento.
  • Al compilar, tu conmutador se ajustará a la arquitectura de tu PC.
  • Puedes elegir que módulos quieres compilar y cuales no.
  • Sin limitantes impuestas por interfases gráficas.

Desventajas:

  • Tienes que hacer todo a mano.
  • Programar por línea de comandos puede no ser tan natural para algunas personas.
  • Toma un mayor tiempo de implementación.
  • Puedes caer en muchos escenarios diferentes y enfrentarte con muchos problemas por resolver.

 

 

Para muchas personas, configurar un sistema a partir de línea de comandos puede resultar complicado. Por tal motivo, existen varios grupos, comunidades y empresas que han optado por desarrollar su propio sabor de Asterisk, ofreciendo distribuciones todo-en-uno que simplifican notablemente el proceso de instalación y puesta en marcha de un conmutador IP. Estas son algunas de las más famosas:

 

FreePBX

FreePBX es la interfaz gráfica de facto para Asterisk. Por si sola, FreePBX solamente es una interfaz web, pero hoy en día existe una distribución de FreePBX con la que puedes descargar e instalar un ISO, y en un solo paso instalar Linux (una versión modificada de CentOS) + Asterisk + MySQL + Apache + FreePBX.

FreePBX nos permite simplificar el trabajo de configuración básica de Asterisk. Utiliza PHP y MySQL, y lo que hace es crear una representación más sencilla de comprender para facilitar la creación de usuarios, troncales, extensiones y otros puntos fundamentales de la configuración de Asterisk.

FreePBX es un apoyo importante para la administración de Asterisk por personal no técnico. Originalmente desarrollado y mantenido por Schmooze Com Inc, a principios de 2015 fue adquirido por Sangoma, quien es el actual desarrollador del software.

Ventajas: 

  • Prácticamente es considerada la interfaz web estandard de Asterisk.
  • Mucho tiempo en desarrollo.
  • Amplia comunidad que la soporta.
  • Te ayuda a configurar Asterisk más rápidamente.
  • Prácticamente todas las distribuciones open source disponibles hacen uso de esta interfaz.

Desventajas:

  • No todos los módulos están soportados.
  • Para mayor control tienes que recurrir a la linea de comandos a final de cuentas.
  • La distro de FreePBX utiliza una versión modificada de CentOS, con la que se ha dificultado más la creación de soluciones libres que compitan directamente con las soluciones comerciales de Sangoma.

 

Elastix

Elastix es una distribución creada por Palosanto Solutions, cuya base de operaciones está en Guayaquil, Ecuador. Elastix surgió en el 2006 como una interfaz de tarificación de llamadas para Asterisk (una herramienta para interpretar los registros de llamadas que Asterisk genera), pero rápidamente se convirtió en una suite de comunicaciones que integra varios productos en uno, ya que en un solo ISO es posible instalar en un solo paso no solamente Asterisk, sino una interfaz web de configuración como FreePBX, un sistema de base de datos (MySQL), un sistema de mensajería instantánea (OpenFire), soporte para fax (Hylafax) y un CRM (vtiger) entre otras aplicaciones más que incluye. Hoy en día Elastix es la distribución basada en Asterisk que más seguidores tiene. Al igual que Asterisk, Elastix es un proyecto open source, con lo que es libre y gratuito.

Según el roadmap de Elastix con su próxima versión 4.0, se abandonará el uso de FreePBX para usar su propia interfaz de configuración. En las versiones 2.x e inferiores, la interfaz gráfica está «amarrada» con el uso de FreePBX 2.9 e inferiores, ya que Elastix usa un wrapper (para personalizarlo con su interfaz) y no soporta versiones posteriores del GUI.

Elastix no es un reemplazo de Asterisk, sino que es un conjunto de herramientas que unidas, nos permiten hacer de manera más sencilla las labores más comunes que haríamos utilizando un sistema desde línea de comandos.

Ventajas: 

  • Sistema todo en uno.
  • Soporte incluido para señalizaciones de América Latina (R2 MFC).
  • Amplia comunidad de apoyo.
  • Existen algunos addons desarrollados por la comunidad que te permiten hacer crecer las funcionalidades de Elastix.

Desventajas:

  • Tiempos de desarrollo muy largos. Principalmente desde que decidieron utilizar su propia interfaz web.
  • Instala muchos componentes por default, los quieras usar o no.
  • Su interfaz gráfica es muy lenta y pesada (comparada con FreePBX puro)
  • Algunos componentes no han sido actualizados en mucho tiempo por romper la arquitectura propia de Elastix (ej. FreePBX 2.8, Vtiger 5.2.1)
  • Al tener muchos componentes «extras», también ha sido víctima de errores de seguridad de los mismos.
  • Relativa poca penetración en el mercado angloparlante. Su principal desarrollo ha sido en América Latina.

 

Trixbox

En sus inicios fue conocida como Asterisk@Home, y fue la primera distribución todo en uno que hacía uso de FreePBX + MySQL + PHP + CentOS + Asterisk para levantar un conmutador IP de manera rápida. En el 2006 cambia su nombre a Trixbox y se separa en las versiones CE (Community Edition) y Pro, que es el servicio de paga proporcionado por Fonality (la empresa que compró su desarrollo). Trixbox es más usada en el mercado norteamericano al estar creada originalmente en inglés y tener su base de operaciones en EUA. Sin embargo, al utilizar la misma interfaz de FreePBX, las funcionalidades que ofrece esta plataforma son casi las mismas que el resto de las distribuciones que se basan en ella.

Trixbox hace uso de un fork muy viejo de FreePBX, por lo que muchas de sus funcionalidades están atrasadas, comparadas con el resto de las distribuciones.

Ventajas: 

  • Mucho tiempo en el mercado.
  • La versión Pro te permite administrar tu PBX desde la nube.

Desventajas:

  • Sus componentes son muy viejos.
  • Sin soporte para el mercado de América Latina.
  • Poco desarrollo a la plataforma.

 

AsteriskNow

Es la distribución oficial de Digium, y al igual que las anteriores permite instalar CentOS + Asterisk en un solo paso. La diferencia primordial con las 2 anteriores es que esta es la distribución más ligera de todas, con lo que no se instalan extras (como Hud en Trixbox u Openfire, vtiger e Hylafax en Elastix). El FreePBX viene puro, por lo que puedes utilizar la versión más reciente y no estar amarrado a limitantes del desarrollador de la distribución. También es la distribución que más rápidamente ofrece las nuevas actualizaciones para Asterisk.

Un inconveniente quizá es que al ser mantenida por Digium no se ofrece el soporte precargado para las tarjetas PSTN de sus competidores (como Sangoma), por lo que si necesitas estos drivers tendrás que instalarlos por aparte.

Ventajas: 

  • Ligero.
  • Apoyado por Digium.

Desventajas:

  • Todos los extras deben ser instalados a mano.

 

PBX in a Flash

Tal como las anteriores, es una distro basada en CentOS + Asterisk + FreePBX. La principal ventaja que tiene sobre las otras es que es mantenida por un grupo de entusiastas que además de las funcionalidades de productos terminados como FreePBX, ofrecen su propia colección de mini-herramientas incluidas y fáciles de instalar con Asterisk, además de que no instalan software extra para el cual no tendremos uso (durante la instalación, tu determinas exactamente que quieres poner).

Es usada en mucho menor proporción que las anteriores, y su sistema de versionamiento puede resultar un poco complejo de entender. Sin embargo, tiene la gran ventaja de ser la más personalizable de las anteriores, por la gran cantidad de pequeños addons que es posible ponerle.

Ventajas: 

  • Altamente personalizable.
  • Diferentes versiones te permiten experimentar con diferentes componentes.

Desventajas:

  • Su sistema de versionamiento puede resultar confuso.
  • Requieres conexión a internet durante la instalación.
  • Reducida base de usuarios

 

 

Conclusiones

No importa la distribución que elijamos, todas ellas tienen algo en común: utilizan el software de Asterisk como una base para montar el resto de la experiencia para el usuario. Algunas instalan software extra, algunas te preguntan si lo quieres instalar, otras ni siquiera lo traen. ¿Cuál es la mejor de ellas para utilizar? Todo depende de nuestros hábitos, nuestros gustos y nuestra experiencia previa. Lo mejor que pueden hacer es decargarlas todas y probar una por una, hasta que sepan con cual se sienten más cómodos.

Si al final ninguna de ellas les resulta suficientemente buena, solo recuerden: todas estas distribuciones empezaron desde cero alguna vez, por lo que ustedes mismos podrían armar la suya propia con las herramientas que más les sirvan y desde allí, crear la herramienta más poderosa de comunicaciones que se ajustará completamente a sus necesidades. La decisión la tienen ustedes.

¡Suerte!

Las extensiones internas se bloquean cuando el acceso a internet se cae. ¿Cómo resolverlo?

29 Jul

Este es un problema viejo y aunque la solución puede encontrarse buscando por internet, quise tomarme unos minutos para escribir un breve post que habla del problema y como resolverlo.

Estoy seguro que a varios les ha pasado: tienes tu conmutador configurado perfectamente y todo marcha bien. De pronto, de la nada, tus extensiones internas se caen: no haces ni recibes llamadas. Revisas un poco y te das cuenta de que no tienes internet. ¿Pero para que necesito internet si mis extensiones son internas? ¿Qué tiene que ver una cosa con la otra? Es ahí donde entramos.

El problema radica en la manera en como Asterisk resuelve los dominios de las troncales SIP a donde necesita conectarse. El canal SIP utiliza un método de consulta de DNS síncrono, lo que quiere decir que cuando llega una petición de resolver un DNS (ej. siptrunk.alianza.com) el canal SIP le pregunta al servidor DNS, espera la respuesta, y cuando finalmente la obtiene continú con su siguiente petición SIP. En un mundo ideal esto no es problema, ya que la resolución por DNS es muy rápida y toma unos cuantos milisegundos, por lo que normalmente no la notamos. Pero… ¿qué ocurre cuando por alguna falla en internet, el servidor de DNS al que solemos apuntar se cae o simplemente no podemos acceder a él? Pues la respuesta es que esto provoca un efecto  dominó en Asterisk que ocasiona que todo el canal SIP se caiga.

¿Cómo puede pasar esto?

Imagina el siguiente caso:

  1. Juan quiere hacer una llamada a través de su troncal de pbx.micarrier.com, así que levanta su teléfono y llama al número deseado.
  2. Asterisk recibe la petición de llamada y le manda a su DNS la solicitud de resoler pbx.micarrier.com, pero al utilizar paquetes por UDP, Asterisk no se da cuenta de que el equipo está offiline, así que le da un cierto tiempo de timeout a que el servidor responda.
  3. Mientras que Asterisk espera a recibir la respuesta, Jorge desea hacer una llamada a través de pbx.miotrocarrier.com, pero aún no puede enviar la llamada porque Asterisk está ocupado con la petición anterior.
  4. Para cuando Juan por fin recibe la respuesta de request timeout, Jorge ya lleva buen rato esperando a que su petición apenas comience, así que muy probablemente Jorge reciba un timeout pero a nivel de SIP, porque Asterisk se tardó mucho en responderle por estar ocupado en la petición de Juan.
  5. Si a este escenario le agregan más usuarios y más carriers, el sistema se hace más complejo exponencialmente, ocasionando una serie de retrasos que eventualmebte tiran todo el servidor porque nada responde (todos se quedan esperando a todos y ninguna llamada logra salir).

Esto es un problema a nivel de código de Asterisk: si las peticiones fueran asíncronas la espera de uno no se convertiría en la espera del otro y todos serían felices. Pero como se menciona en los foros de desarrollo de Asterisk, esta es una funcionalidad que requiere mucho tiempo para ser resuelta, y que al menos en la versión 1.8.21.0, persiste.

¿Cómo lo resolvemos?

Hay algunas soluciones:

  • Editar manualmente el /etc/hosts y poner allí todos los dominios y direcciones IP que necesitemos. El problema es que esto no funciona para resolución inversa de DNS, así que tiene fallos. Otro problema es que tendríamos que agregar manualmente cada dominio, lo cual puede consumir mucho tiempo, además de que si el proveedor actualiza su IP, nuestra resolución fallaría.
  • Configurar en Asterisk las IPs fijas de cada carrier. Fácil de hacer pero de igual manera, es manual, así que nos exponemos a los problemas de tener que estar vigilando nuestro PBX constantemente.

La solución que mas predomina es la de instalar localmente (en el mismo servidor de Asterisk) un servicio de cache de DNS, como es el caso de bind. Esto hará que el equipo almacede de manera local la información de consulta frecuente para que en caso de fallos con el internet, Asterisk sobreviva del cache. Y es bastante fácil de hacer.

En CentOS/RedHat lo hacemos fácil:

yum install bind bind-utils bind-libs caching-nameserver

En Debian/Ubuntu, también es sencillo:

apt-get install bind9

En CentOS/RedHat, por default el servicio no arranca automáticamente, así que debemos decirle a Linux que lo arranque cuando el sistema prenda.

chkconfig named on

También aprovechamos y lo arrancamos:

/etc/init.d/named start

Con esto el servicio de named ya está corriendo. Ahora le decimos a Linux que lo utilice. Editamos el archivo /etc/resolv.conf y nos aseguramos que solamente contenga una linea como la que sigue:

nameserver 127.0.0.1

Si usamos Elastix, hacer el cambio también desde la interfaz web. Abrimos el menu de System > Network y editamos la configuración para dejar únicamente un DNS:

DNS en Elastix

De esta manera, obligamos a que use el local. Si el local falla, lo peor que pasa es que perdemos nuestra troncal, pero es mejor recibir una respuesta negativa del DNS a no recibir respuesta.

Podemos validar que todo está corriendo revisando que el puerto 53 esté ocupado por el servicio de named:

[root@pbx ~]# netstat -anpl | grep 53
tcp        0      0 0.0.0.0:9090                0.0.0.0:*                   LISTEN      3953/java
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      4745/named
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      4745/named
udp        0      0 127.0.0.1:53                0.0.0.0:*                               4745/named

Y claro está, no puede faltar la super prueba del ping que muestre que los dominios resuelven correctamente:

[root@elastix ~]# ping asteriskmx.com
PING asteriskmx.com (216.93.172.112) 56(84) bytes of data.
64 bytes from 216.93.172.112.servepath.com (216.93.172.112): icmp_seq=1 ttl=53 time=74.6 ms
64 bytes from 216.93.172.112.servepath.com (216.93.172.112): icmp_seq=2 ttl=53 time=74.5 ms
64 bytes from 216.93.172.112.servepath.com (216.93.172.112): icmp_seq=3 ttl=53 time=74.9 ms

--- asteriskmx.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 74.563/74.723/74.912/0.265 ms

Hecho estos sencillos pasos, tu sistema estará preparado para caidas en el internet y tus troncales SIP no causarán que todo tu sistema se muera.

Solo una nota final: el servicio de named/bind al parecer vacia su cache cuando arranca. Esto quiere decir que si se va la luz y el internet al mismo tiempo, perderás la conectividad y todo se caerá (lo siento, no hay solución universal), pero en caso de que eso pase todo lo que necesitas hacer es detener el servicio y con esto tus DNS fallarán inmediatamente, con lo que te quedarás sin troncales SIP pero no si extensiones locales.

¡Suerte!

Integrando WebRTC al módulo de call center de Elastix

27 Jun

Hola, quienes me conocen saben que yo prefiero usar Asterisk Plano sobre cualquier cosa. Cuando la gente me dice que quieren usar sí o sí una GUI para administrar su asterisk porque no se quieren meter en líos, recomiendo FreePBX. Son pocas las veces que me veo en la necesidad de usar Elastix o recomendarlo de hecho me puedo considerar hasta cierto punto un ‘hater’ de esa Distro; sin embargo, como dice la canción: «…No todo es blanco, O negro: es gris Todo depende del matiz…«, debo decir que una de las cualidades más atractivas de Elastix es su Módulo de Call Center. El cual permite crear campañas de Salida o de Entrada de manera más que sencilla y que su operación es muy pulcra, sin contar además que, integrar nuestro propio CRM es sumamente sencillo.

Este año vendrá de nueva cuenta el ElastixWorld a México y esta vez si pienso asistir ya que dejar pasar las conferencias de las personalidades que vendrán sería un error y más si tomo en cuenta que asistir al Astricon en Atlanta es prácticamente imposible para mi. Es por esta razón que decidí «contribuir»(si se le puede llamar así a una simple edición de código) un poquito al proyecto de Elastix, no quiero ir solo a recibir información invaluable al ElastixWorld sin haber «contribuido» en algo.

Elegí un tema de «moda»: WebRTC y una herramienta útil como el Módulo de Call Center que combinadas podrían tener mucho éxito-según yo-. Así que me di a la tarea de integrar la fantástica API SIPML5 y el Gateway WebRTC2SIP ambos de Doubango a una instalación de Elastix.

Notas sobre la integración y operación

  • Se requiere una versión de ‘libtool’ más reciente de modo que se instala la version 2.4.2
  • Se requiere instalar el Gateway WebRTC2SIP para su operación ya que la versión de Asterisk no soporta WebRTC. La conexión es ws.
  • Solo funciona correctamente con el explorador Google Chrome.
  • Se modifican algunos archivos(consideren respaldarlos antes) utilizados por Elastix entre ellos:
    • /var/www/html/themes/elastixneo/_common/_menu.tpl
    • /var/www/html/modules/agent_console/index.php
    • /var/www/html/agent_console/themes/default/agent_console.tpl
  • La Integración solo funciona con el tema default ‘Elastixneo’.
  • Debido a mi falta de conocimiento tuve que crear una conexión externa a MySQL para obtener el password del ‘Peer’.
  • Se han creado algunos archivos extras:
    • Conexión a la BD: /var/www/html/libs/astdb.php
    • Javascript para el Teléfono: /var/www/html/modules/agent_console/themes/default/js/ml5.js
    • SIPml5 API: /var/www/html/modules/agent_console/themes/default/js/SIPml-api.js
    • Estilos para botones del Teléfono: /var/www/html/modules/agent_console/themes/default/css/bootstrap.css
    • Sonidos utilizados por el Teléfono: /var/www/html/modules/agent_console/themes/default/sounds
  • No se puede marcar desde el teléfono. Esto lo hice así pensando en que el agente sólo debe de recibir las llamadas de una cola Entrante o una campaña del Dialer (se puede modificar a futuro).
  • Si no se está en llamada y se presiona el botón (CALL/Answer) se enviará la llamada al buzón de voz del Agente.
  • La integración esta hecha para trabajar  solamente en modo ‘Agent CallBack’. Esto se debe a la facilidad de tener el teléfono registrado en ‘Stand-by’ una vez que se accedió a la consola del Agente. 

El gateway WebRTC2SIP corre bajo una sessión ‘screen’ con el comando:

screen -dmS wrtc /usr/local/sbin/webrtc2sip --config=/usr/local/sbin/config.xml

Para ingresar a la sesión usar:

screen -r wrtc

Para salir de la sesión sin detener el gateway usar la combinación de teclas CTRL+A+D. Para detener el Gateway, entrar en la sesión y escribir ‘quit’+ENTER.

Instalación

Descargar el tarball desde este enlace. Y extraer el contenido con el comando:

# tar zxvf Elastix_CC_ML5.tar.gz

Cambiar al directorio creado con:

# cd ccml5

Instalar el gateway webrtc2sip.

Para instalar el Gateway ejecutar el siguiente comando:

# ./install_wrtcgw.sh

Esto instalará el framework de doubango, las dependencias y el gateway, dependiendo de la velocidad del equipo puede tomar desde 30 minutos hasta un par de horas.

Añadir el Teléfono WebRTC a la consola de Agente.

Para integrar el teléfono a la consola de agente ejecutar el siguiente comando:

# ./install_webfiles.sh

Si no se ha instalado el Módulo de Call Center previamente, el script preguntará si desean instalarlo. Basta presionar Y+enter para que así lo haga.

Los imágenes del Módulo ya editado:

Inicio de Sesión Consola de Agente modo ‘Callback login’

Consola de Agente con el Telefóno WebRTC Insertado

Demo

Para configurar y usar el Módulo del Call Center de Elastix pueden usar el manual oficial que esta en este enlace Recuerden que el Teléfono WebRTC solo trabajará correctamente en el modo ‘callback login’ en el manual se refieren a él como modo dinámico.

Yo ya tengo preparado una cola de entrada sin datos y una campaña saliente con un CRM Custom. Y este es el resultado:

Inbound Queue:

Outgoing Campaign:

Feedback: Como nada en esta vida es perfecto cualquier feedback se agradecerá. 😉