Zimlet de integración Asterisk – Zimbra

Digium y Zimbra parece que llevan tiempo siendo amiguetes.  Incluso hicieron unas curiosas declaraciones donde daban por sentado que iban a desarrollar medios de integración para las dos tecnologías… allá por el 2006.

Existe un Zimlet bastante práctico que nos da la funcionalidad de “click-to-call” y de enviar SMS a través de la interfaz web de Zimbra. De momento no funciona con Zimbra Desktop. También hay un par de zimlets oficiales que viene con la propia instalación de Zimbra, pero están dentro de la rama experimental. Este por lo menos está bastante probado y según he podido leer por los foros tiene a la gente satisfecha. Vamos al lío…

astzim

Descargamos el zimlet de la web oficial de sus desarrolladores. Para instalarlo necesitamos realizar modificaciones tanto en el servidor Zimbra como en el servidor Asterisk. Primero subimos el archivo zip a la carpeta /opt/zimbra/zimlets y lo instalamos usando el comando

zmzimletctl install /opt/zimbra/zimlets/ch_bnc_asterisk.zip

Este comando se encuentra dentro de la carpeta /opt/zimbra/bin. A continuación, extraemos el archivo XML de configuración para editar los parámetros específicos de nuestro servidor Asterisk y lo dejamos en la carpeta /tmp por ejemplo.

zmzimletctl getConfigTemplate
/opt/zimbra/zimlets/ch_bnc_asterisk.zip >
/tmp/ch_bnc_asterisk_config.xml

Editamos el archivo ch_bnc_asterisk_config.xml donde tendremos que cambiar:

  • IP o nombre dns de nuestro servidor asterisk.
<property name="astManagerIp">111.111.111.111</property>
  • Puerto de Asterisk Manager, por defecto el 5038.
<property name="astManagerPort">5038</property>
  • Usuario y contraseña del usuario de Asterisk Manager que ejecutará los comando enviado por el zimlet. Necesita privilegios de call y command. De momento nos lo podemos inventar, ya que lo daremos de alta más adelante.
<property name="astManagerUser">usuario</property>
<property name="astManagerSecret">contraseña</property>
  • El contexto. En mi caso, from-internal.
<property name="astDialContext">from-internal</property>
  • El tipo de canal en uso por las extensiones para crear correctamente el comando de click-to-call. Si tienes extensiones SIP, pues SIP. Si tienes extensiones analógicas, pues ZAP. No lo he probado con IAX, ahora que lo pienso…
<property name="astDialChannelType">SIP</property>

Estas con las configuraciones básicas para que el invento funcione, pero tiene algunas más relacionadas con el marcado y el uso de prefijos.  El siguiente paso consiste en cargar la nueva configuración para que el zimlet conecte con nuestro servidor Asterisk. Usaremos el mismo comando de antes y luego reiniciaremos el servicio de mailboxd:

zmzimletctl configure /tmp/ch_bnc_asterisk_config.xml
zmmailboxdctl restart

Ahora debemos crear un usuario en el servidor Asterisk con los privilegios necesarios para poder comunicarse con él. El sistema Asterisk Manager consiste en un pequeño servicio que escucha en un puerto TCP para ejecutar comandos remotamente. Se creó entre otras cosas para este tipo de usos, admitir integración sencilla con otras aplicaciones. Más info en VoIP-info.org. Para crear un nuevo usuario de esta plataforma editaremos el archivo /etc/asterisk/manager.conf y añadiremos las siguientes líneas:

[user] #nombre de usuario

secret = pass #contraseña

deny=0.0.0.0/0.0.0.0 #rango de direcciones no admitidas

permit=0.0.0.0/255.255.255.0 #rango de direcciones admitidas

read = system,call,log,verbose,command,agent,user

#permisos de lectura también se puede poner all

write = system,call,log,verbose,command,agent,user

#permisos de escritura también se puede poner all

Si tienes los servidores en diferentes redes, o resulta que el Zimbra está en una DMZ y no se puede comunicar con el Asterisk que está en la LAN puede que hayas pensado… como voy a conectar las llamadas entre redes?? Tendré que permitir tráfico SIP en el firewall?? La respuesta es no. Tan solo has de permitir el puerto de Asterisk Manager entre el servidor Zimbra y el Asterisk. Lo que realmente estamos haciendo es ejecutar comandos en el Asterisk de manera que el servidor llamará a nuestra extensión y al descolgar nos realizará automaticamente la llamada saliente. En otras palabras, no existe tráfico de voz entre el Zimbra y el Asterisk.

Como una imagen vale más que mil palabras, os dejo las siguientes capturas para que os hagáis una idea de la sencillez de la aplicación y de como funciona.

zimast01

Definiendo nuestra extensión.

zimast02

Información del servidor Astrerisk.

zimast03

El menú del zimlet.zimast04

Autodetección de números de teléfono con la opción de click-to-call.

zimast05Ring Ring!! El zimlet envía el comando de llamada y nuestra extensión suena. Al descolgar nos conmutará con la llamada saliente.

5 Responses to “Zimlet de integración Asterisk – Zimbra”

  1. vicent  on Marzo 10th, 2009

    Si Leo viera esto se echaría a llorar jejej, pues no he pasado yo horas para que el pu.. outlook hiciera esto con el Cisco Call Manager 5 y nanai
    Lo que yo diga, un puto gurú. Telefonos IP flasheados, integracion ToIP cisco-Asterisk, vlans de voz en 3com, click-to-dial, menudo empacho de nata y que buena está la jodía…

  2. pamchi  on Enero 5th, 2010

    Una duda, el zimbra y el asterisk deben estar correiendo en el mismo servidor?

  3. adomundav  on Abril 12th, 2010

    Gracias por el Manuel , me marca este error al dar el : zmzimletctl configure /tmp/ch_bnc_asterisk_config.xml

    Alguna idea?
    [] INFO: Configure zimlet on mail.example.com
    [] ERROR: Error
    com.zimbra.common.soap.SoapFaultException: system failure: cannot configure
    ExceptionId:btpool0-1:1271085909793:9b14563912fa224c
    Code:service.FAILURE
    at com.zimbra.common.soap.Soap12Protocol.soapFault(Soap12Protocol.java:88)
    at com.zimbra.common.soap.SoapTransport.extractBodyElement(SoapTransport.java:266)
    at com.zimbra.common.soap.SoapTransport.parseSoapResponse(SoapTransport.java:227)
    at com.zimbra.common.soap.SoapHttpTransport.invoke(SoapHttpTransport.java:295)
    at com.zimbra.common.soap.SoapHttpTransport.invoke(SoapHttpTransport.java:230)
    at com.zimbra.common.soap.SoapTransport.invoke(SoapTransport.java:318)
    at com.zimbra.common.soap.SoapTransport.invoke(SoapTransport.java:282)
    at com.zimbra.cs.zimlet.ZimletUtil$ZimletSoapUtil.soapConfigureZimlet(ZimletUtil.java:1341)
    at com.zimbra.cs.zimlet.ZimletUtil$ZimletSoapUtil.configureZimletOnServer(ZimletUtil.java:1325)
    at com.zimbra.cs.zimlet.ZimletUtil$ZimletSoapUtil.configureZimlet(ZimletUtil.java:1208)
    at com.zimbra.cs.zimlet.ZimletUtil.dispatch(ZimletUtil.java:1597)
    at com.zimbra.cs.zimlet.ZimletUtil.main(ZimletUtil.java:1641)

  4. Ximo  on Junio 1st, 2010

    No es necesario ni recomendable. Vamos, yo no los montaría en la misma máquina dado que requieren configuraciones muy distintas.

  5. Ximo  on Junio 1st, 2010

    Que versión de Zimbra estás usando?

Leave a Reply