Translate

miércoles, 26 de junio de 2013

Integrando WebRTC al Módulo de Call Center de Elastix

ACTUALIZACIÓN 25/Nov/2013: 



Ya está disponible como Addon de Elastix se puede acceder desde el menú de addons del PBX o bien desde http://addons.elastix.org/index.php 



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 valuable 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/hmtl/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 campàña del Dialer(Se puede modificar a futuro).
  • Si no se esta 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 CRTL+A+D.
Para detener el Gateway, entrar en la sesión y escribir 'quit'+ENTER.


Instalación.

Actualización 17/Sep/2013:
Este es el último RPM usado para adaptar chat y marcado libre al módulo de call center.

Servicio de Chat habilitado.




Actualización 04/Sep/2013:

He creado paquetes RPMs para que la instalación sea mucho mas rapida, aqui dejo las instrucciones para instalar via RPMs:

Para instalar desde la consola de Linux seguir estos pasos:
 cd /usr/src/
 yum install -y screen perl-WWW-Curl elastix-callcenter
 wget https://dl.dropboxusercontent.com/u/1277237/SIPML5toElastix.zip
 unzip SIPML5toElastix.zip
 cd SIPML5toElastix
 rpm -ihv libtool-2.4.2-DMv1.i386.rpm
 rpm -ihv libsrtp-1.4.5-DMv1.i386.rpm
 rpm -ihv --force openssl-1.0.1c-DMv1.i386.rpm
 rpm -ihv yasm-1.2.0-DMv1.i386.rpm
 rpm -ihv libvpx-1.2.0-DMv1.i386.rpm
 rpm -ihv x264-snapshot20130810.2245-DMv1.i386.rpm
 rpm -ihv ffmpeg-1.2-DMv1.i386.rpm
 rpm -ihv doubango-2.0r985-DMv1.i386.rpm
 rpm -ihv webrtc2sip-2.5.1r114-DMv1-Elastix.i386.rpm
 rpm -ihv --force sipml5_elastix_cc-0.1-DMv1.i386.rpm

Si se cuenta con las versiones más recientes de Elastix y el módulo de Call Center instalar los RPMs hasta el punto 14 y después ejecutar los siguientes comandos :

 yum reinstall -y elastix-framework elastix-callcenter
 rpm -ihv https://dl.dropboxusercontent.com/u/1277237/sipml5_elastix_cc-0.1b-DMv1.i386.rpm

Los pasos anteriores corrigen el bug que elimina los submenús de la barra de Menús y corrige también que no se registre el cliente SIPML5.


Instalación antigua:

 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.

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

22 comentarios:

  1. Hola.

    Soy de Argentina; me pareció muy bueno el artículo, por lo que estoy intentando ponerlo en práctica, pero surgieron algunos errores que todavía no puedo resolver y espero me puedan ayudar. Les comento que estoy trabajando con el módulo Call Center - 2.2.0-2 de elastix 2.4. Logré integrar WebRTC pero al iniciar sesión como agente me aparece el mensaje "Lost connection to server (SSE), retrying.." por unos segundo en una franja roja; luego desaparece y al momento de comenzar la campaña, en este caso una campaña saliente, no muestra los datos en "información de llamada" ni en "Diálogo de llamada" ni el "Formulario". Desde ya muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hola estás iniciando sesión en modo "CallBack Login"? Este "hack" solo soporta ese modo de trabajo.

      Es la versión más actual del call-center y el framework de elastix?Si tu PBX es un ambiente de prueba, intenta con un yum update al sistema.

      Después del yum update, ejecuta yum reinstall elastix-framework y finalmente instala el siguiente RPM https://dl.dropboxusercontent.com/u/1277237/sipml5_elastix_cc-0.1b-DMv1.i386.rpm con el comando:

      rpm -ihv --force sipml5_elastix_cc-0.1b-DMv1.i386.rpm

      INSISTO SOLO SI TU PBX ES DE PRUEBAS EJECUTA LOS COMANDOS ANTERIORES.

      Saludos.

      Eliminar
    2. Hola Max E. Reyes Vera Juarez.

      Antes de nada gracias por tu pronta respuesta. Te comento que tengo las últimas actualizaciones de elastix-framework y call-center; seguí paso a paso el tutorial. Cuando instalo todo resulta que en el módulo de call-center me muestar un mensaje de mysql que no se conecta con la base de datos; por lo que para solucionar esto edito el archivo /var/www/html/libs/astdb.php y cambio "root" por "asteriskuser" y ahí aparece el módulo de call-center. Ejecuté los comandos que me indicas y los resultados son: que ahora me muestra el mje "Registered with Sip Server" sobre las teclas del webrtc donde antes me parecía el mje "navegador no soportado"; tambien funciona el dialer del call-center que no funcionaba, es decir no hacía las llamadas, ahora si las hace, pero todavía no muestra la información cargada en el archivo .csv en cada llamada ni el formulario; sigue mostrando la franja roja que dice "Lost connection to server (SSE), retrying.." ;a demás de eso desaparece el contenido del menu tercer nivel sólo queda la barra negra pero sin los enlaces de cada uno de los módulos. Para solucionar esto edito el archivo /var/www/html/themes/elastixneo/_common/_menu.tpl y lo dejo como estaba antes de la actualización; pero en ese caso otra vez vuelve el mensaje de "navegador no soportado" o sea que ya no se registra el webrtc y tampoco hace las llamadas salientes de cola. Espero me puedas ayudar. Desde ya muchas gracias.

      Eliminar
    3. Hola lo del menu es un bug qué encontramos que pasa cuando actualizas a la ultima versión, esto se soluciona ejecutando los comandos yum reinstall elastix-framework. Al ejecutar este comando la versión del _menú.tpl vuelve a ser la correcta.

      Después tienes que bajar el RPM del enlace que deje en mi respuesta anterior y ejecutar: rpm -ihv --force sipml5_elastix_cc-0.1b-DMv1.i386.rpm

      Esto modificará el menú.tpl sin romperlo.

      Sobre el mensaje de lost connection eso hasta ahora solo pasa cuando no entramos como callback login, si puedes generar algunas capturas o video por favor compartelos. El tipo de campaña es saliente o entrante?

      Saludos

      Eliminar
    4. Hola.

      Te dejé un mensaje por gmail. Donde te envié algunas impresiones de pantalla. Espero te sirvan para poder ayudarme. Desde ya muchas gracias.

      Eliminar
    5. Hola, no llego nada ni en la bandeja de SPAM, por favor usa imgur.com y pega los enlaces aquí.

      Esto de las desconexiones(SSE Lost connection) pasa enseguida o después de un tiempo? Aún no sé si el error del formulario es con tus campañas salientes o entrantes.

      Saludos.

      Eliminar
    6. Hola.

      Ejecuté los comandos y se reestableció el menú; lo estoy probando con una campaña saliente pero aún no muestra la información cargada en el .csv ni tampoco muestra el formulario a la hora de la comunicació. Ahí te paso algunas imágenes de la secuencia desde que me registro hasta el momento de hacer llamadas; tambien una imagen con los cambios en el archivo /var/www/html/libs/astdb.php para poder visualizar el módulo de call-center

      http://imgur.com/pik9p5g
      http://imgur.com/GwVMJT8
      http://imgur.com/9SJIslU
      http://imgur.com/r1CJPRJ
      http://imgur.com/zISMMAi
      http://imgur.com/OY1xxOG
      http://imgur.com/MA2ro0O

      Eliminar
    7. Hola, estuve haciendo pruebas y en mi caso si me salen los datos del CSV y el formulario que había creado(anexo imágenes):

      http://i.imgur.com/7XxkkzT.png
      http://i.imgur.com/Q9BqjY7.png
      http://i.imgur.com/xlVPOwc.png

      Sobre perder la conexión tampoco me sucedió estuvo el agente de prueba conectado por 40 minutos y no se desconecto, lo que note de tu pantallazo es que en el STATUS del peer dice "Disconnected failed to.."(tengo que hacer más pequeña la letra para que se vea todo). Esto pasa cuando el media gateway deja de responder o bien asterisk marco como UNREACHABLE al peer.

      Para saber si el media gateway dejó de responder, la próxima vez que pase entra en la consola de linux y verifica que el gateway este corriendo con: wrtc -ls, si te lista alguna session entra en ella y ve el log. si no encuentra ninguna sesión quiere decir que esta muerto.

      Para intentar resolver lo del Form y los datos vamos a empezar de cero otra vez, cierra la sesión web que estes usando en elastix y después ejecuta desde la consola de linux:

      yum reinstall -y elastix-callcenter elastix-framework
      rpm -ihv --force sipml5_elastix_cc-0.1b-DMv1.i386.rpm

      El primer comando para reestablecer todo al origen y el segundo para volver habilitar el cliente webrtc-sipml5 en la consola de agente. Yo hice eso un par de veces y me sigue mostrando el form y los datos.

      Las versiones que estoy ejecutando son:
      elastix-callcenter.noarch 0:2.2.0-2
      elastix-framework.noarch 0:2.4.0-9

      Saludos.

      Eliminar
    8. Muchas gracias por la respuesta... Lo voy a intentar con esos comandos y te comento como me va....

      Saludos

      Eliminar
  2. Hola
    Cuando intento instalar desde la consola y pongo cd /usr/src/ me devuelve el mensaje: -no such file or directory- ....previamente deberia instalar algo?

    ResponderEliminar
    Respuestas
    1. Para que cambias a /usr/src? Como dice al inicio de la entrada ya puedes instalarlo desde el addon market de elastix. Desde consola sería:

      yum install elastix-agent_console_webrtc.noarch

      Eliminar
  3. Hola, excelentes comentarios, les comento he instalado el modulo pero lamentablemente no funciona ni el telefono no el chat, solo aparece que el browser no es permitido y no registra.

    ResponderEliminar
  4. Sólo funciona para Chrome y si la versión es mayor a la 34 debes aplicar este parche forum.elastix.com/viewtopic.php?f=18&t=128877

    ResponderEliminar
  5. Saludos, no logro quitar el error de "Browser Not Supported" Podrías ayudarme? Gracias de antemano

    ResponderEliminar
    Respuestas
    1. Sólo funciona para Chrome, debes aplicar este parche forum.elastix.com/viewtopic.php?f=18&t=128877 Y tienes que usar Chrome < v37.

      Aún no tengo planeado hacer un fix para Chrome 37.

      Eliminar
  6. Saludos, Gracias por la pronta respuesta.

    Ya había seguido las instrucciones de ese enlace que me envías, estoy probando en chrome Version 36.0.1985.143 m, lo único que no hice del parche fue reload el WebRTC Agent Console. Lo que hice fue reiniciar el servidor, si hay un comando en específico para reload el WebRTC Agent Console, me lo podrías proporcionar? Puedes confirmarme si el parche funciona para la version que estoy trabajando? Gracias.

    ResponderEliminar
  7. Hola Max exelente articulo, una pregunta yo tengo un elastix funcionando con campañas entrantes y lo unico que quiero es que los agentes puedan realizar llamadas salientes desde la consola de agente, es posible eso?

    Gracias por tu ayuda

    ResponderEliminar
  8. buenas noches y para versiones mas actuales de chrome por ejemplo yo tengo la Versión 49.0.2623.87 (64-bit) me puedes ayudar

    ResponderEliminar
  9. Hola para versiones mas nuevas de google chrome no tienes parche o algo lo baje de la consola de add y me dice q no soporta el navegador y es muy buen trabajo me sirve para las campañas d eentrada.. gracias por tu labor y gracias x ayudarme

    ResponderEliminar
    Respuestas
    1. El addon ya solo es compatible con la Versión 4 de Elastix. Para usar Chrome se deben contar con certificados firmados por una autoridad, los de LetsEncrypt funcionan. Con certificados autofirmados solo funciona con Firefox.

      Toda la información aquí: http://forum.elastix.org/viewtopic.php?f=54&t=131437&p=141899#p141899

      Eliminar