Translate

lunes, 2 de diciembre de 2013

Mini Portable Centro de Contacto con Asiri.

Hola hoy quiero iniciar con estas preguntas:

  • ¿Les gustaría contar con un mini centro de contacto capaz de ser transportado en la palma de su mano? 
  • ¿Que sea de bajo consumo?
  • ¿Que sea modular?
Si a todas las anteriores respondieron: Sí. Entonces sigan leyendo.

Como bien sabemos(o deberíamos saber) Asiri es un nuevo board basado en ARM creado en latinoamérica. Como la serie de temas anteriores han tratado acerca de este nuevo board, hoy les quiero compartir este proyectito: Crear un mini Centro de Contacto con esta placa de bajo costo, además de incluir el addon de "WebRTC Agent Console"  para hacer de este mini centro de contacto del tipo "Plug&Play".

Manos a la obra.

1.- Lo primero que tenemos que hacer es actualizar nuestro sistema con el comando:

# yum update

2.- Después de algunos minutos habrá que instalar el módulo de Call Center de Elastix(lo pueden hacer desde la página de addons del PBX).

# yum install -y elastix-callcenter

Preparar el sistema para usar WebRTC.

Como sabemos estas placas de desarrollo tienen algunos recursos limitados y nosotros queremos usar el addon "WebRTC Agent Console" el cual usa un servicio extra en nuestro servidor(el media gateway webrtc2sip) lo que nos provoca ocupar más recursos de memoria y espacio en la SDCARD lo que puede afectar el funcionamiento óptimo del sistema. Así que vamos a evitar el uso del media gateway y trabajar de manera nativa con WebRTC y Elastix, pero para ello tenemos que verificar dos cosas:

  • Tener actualizado nuestro Asterisk a la versión >11
  • Aplicar el siguiente parche para habilitar las opciones que las extensiones WebRTC necesitan para su funcionamiento.
1.- Lo primero que vamos a hacer es aplicar el siguiente parche(lo pueden descargar desde este enlace):


--- /var/www/html/admin/modules/core/functions.inc.php 2013-06-13 15:11:38.000000000 -0500
+++ /var/www/html/admin/modules/core/functions.inc.php 2013-11-29 15:19:23.600308427 -0500
@@ -3800,7 +3800,7 @@
    array($account,'deny',$db->escapeSimple((isset($_REQUEST['deny']))?$_REQUEST['deny']:''),$flag++),
    array($account,'permit',$db->escapeSimple((isset($_REQUEST['permit']))?$_REQUEST['permit']:''),$flag++),  
    array($account,'disallow',$db->escapeSimple((isset($_REQUEST['disallow']))?$_REQUEST['disallow']:''),$flag++),
-   array($account,'allow',$db->escapeSimple((isset($_REQUEST['allow']))?$_REQUEST['allow']:''),$flag++)
+   array($account,'allow',$db->escapeSimple((isset($_REQUEST['allow']))?$_REQUEST['allow']:''),$flag++),
   );
     $vmexten = isset($_REQUEST['vmexten'])?$db->escapeSimple(trim($_REQUEST['vmexten'])):'';
     if ($vmexten != '') {
@@ -3811,6 +3811,15 @@
  // Very bad
  $sipfields[] = array($account,'account',$db->escapeSimple($account),$flag++); 
  $sipfields[] = array($account,'callerid',$db->escapeSimple((isset($_REQUEST['description']) && $_REQUEST['description'])?$_REQUEST['description']." <".$account.'>':'device'." <".$account.'>'),$flag++);
+
+ //mein
+ $sipfields[] = array($account,'transport',$db->escapeSimple((isset($_REQUEST['transport']))?$_REQUEST['transport']:'udp'),$flag++);
+  $sipfields[] = array($account,'avpf',$db->escapeSimple((isset($_REQUEST['avpf']))?$_REQUEST['avpf']:'no'),$flag++);
+ $sipfields[] = array($account,'encryption',$db->escapeSimple((isset($_REQUEST['transport']))?$_REQUEST['transport']:'no'),$flag++);
+ $sipfields[] = array($account,'icesupport',$db->escapeSimple((isset($_REQUEST['transport']))?$_REQUEST['transport']:'no'),$flag++);
+
+         //end mein
+
  
  // Where is this in the interface ??????
  $sipfields[] = array($account,'record_in',$db->escapeSimple(($_REQUEST['record_in'])?$_REQUEST['record_in']:'On-Demand'),$flag++);
@@ -6009,6 +6018,13 @@
   $tmparr['vmexten'] = array('value' => '', 'level' => 1);
   $tmparr['deny'] = array('value' => '0.0.0.0/0.0.0.0', 'level' => 1);
       $tmparr['permit'] = array('value' => '0.0.0.0/0.0.0.0', 'level' => 1);
+      //mein
+  $tmparr['transport'] = array('value' => '', 'level' => 1);
+      $tmparr['avpf'] = array('value' => '', 'level' => 1);
+      $tmparr['encryption'] = array('value' => '', 'level' => 1);
+      $tmparr['icesupport'] = array('value' => '', 'level' => 1);
+  //endmien 
+ 
   $currentcomponent->addgeneralarrayitem('devtechs', 'sip', $tmparr);
   unset($tmparr);
 

2.- Nos cambiamos al directorio /var/www/html/admin/modules/core y aplicamos el parche:

# cd /var/www/html/admin/modules/core
# wget https://dl.dropboxusercontent.com/u/1277237/webrtcvals_for_freepbx.patch
# patch  < webrtcvals_for_freepbx.patch

3.- Una vez que hayamos aplicado el parche al crear un dispositivo SIP desde la interface gráfica ahora podremos ver las opciones que nos ayudan a usar WebRTC nativamente:






4.- Para cada dispositivo que usará WebRTC se deberá asignar:
  • transport: ws
  • avpf: yes
  • encryption: yes
  • icesupport: yes

Recompilando Asterisk para tener soporte WebRTC.

Algo que me encontré en mi version de uElastix es que la versión de Asterisk 11.6.0 no viene compilado con la librería uuid-devel la cual es necesaria para tener soporte ICE en Asterisk. 

Sin el soporte de ICE practicamente no podriamos usar ninguna API de WebRTC para Asterisk: JSSIP o SIPML5 de modo que es necesario recompilar Asterisk para que estas APIs puedan funcionar correctamente.

1.- Instalar la librería uuid-devel:

# yum -y install uuid-devel libuuid-devel

2.- Descargar Asterisk y compilarlo:

#  cd /usr/src/
#  mkdir asterisk
#  cd asterisk
#  wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11.6.0.tar.gz && tar zxvf asterisk-11.6.0.tar.gz && cd asterisk-11.6.0 && ./configure && make menuselect

NOTA: Asegurarse en la ventana del Make MenuSelect de tener activados los mismos módulos que exiten en /usr/lib/asterisk/modules/

#  contrib/scripts/get_mp3_source.sh
#  make && make install

3.- Aproximadamente unas 3 horas después, Asterisk debe estar instalado. Ahora nos falta reiniciar el sistema:

# reboot

Instalando el Addon para uElastix

He creado un RPM modificado para esta versión de uElastix el cual pueden descargar desde este enlace. Para instalarlo ejecutar el siguiente comando:

# rpm -ihv elastix-agent_console_webrtc-0.1-2_uElastix.noarch.rpm 


Una vez que esta instalado el sistema y hemos configurado el módulo de CallCenter de Elastix para trabajar en modo CallBack podemos ingresar al a Interfaz Web del módulo y probar. El manual del addon "WebRTC Agent Console" lo pueden descargar desde aquí.

Video:




Conclusiones.

  • Con esto podemos tener un mini CC para al menos 4 personas. 
  • La parte modular se aplica con el tema anterior usando el balanceador de llamadas.
  • Elastix/Asterisk está trabajando nativamente con WebRTC.
  • Para una PyME o un startup ofrecer este servicio es exageradamente económico.
  • Es 100% compatible usar una Raspberry Pi.

Wish List

Ojalá que los desarrolladores de uElastix puedan agregar el soporte de ICE en las nuevas actualizaciones de Asterisk para evitarse la compilación nuevamente y perder 3 horas o más. :P


1 comentario:

  1. Me sale este error :S

    Setting up Install Process
    Loading mirror speeds from cached hostfile
    * base: mirrors.advancedhosters.com
    * epel: mirror.steadfast.net
    * extras: mirror.keystealth.org
    * updates: dist1.800hosting.com
    No package elastix-callcenter available.
    Error: Nothing to do


    Saludos!

    ResponderEliminar