Skip to main content.

10 Octubre 2006

Consulta los festivos de un calendario WebDAV desde Asterisk

Calendario Festivos

Introducción

Una de las grandes ventajas de las centralitas basadas en Asterisk es su flexibilidad a la hora de realizar implantaciones. Asterisk Gateway Interface (AGI) dota a nuestra centralita de una potencia sin igual para la integración de la misma con diferentes servicios dentro de la empresa, como CRM, ERP o un calendario compartido como es el caso del presente tutorial.

A lo largo de este “howto” aprenderemos a implementar un sistema de consultas de calendario mediante un AGI de Asterisk.

Objetivo

Nuestra empresa quiere que la centralita responda con un mensaje de bienvenida específico los festivos y fines de semana.

La información sobre las fechas en las que la empresa cierra al público estará contenida en un calendario editable desde los clientes PIM.

Resumen

Instalación

Instalación de Apache2 + WebDAV

apt-get install apache2
a2enmod dav
a2enmod dav_fs
/etc/init.d/apache2 restart

Añadimos el directorio WebDAV en el fichero /etc/apache2/sites-available/default.

Nota: En el ejemplo no se pide autenticación para acceder al recurso WebDAV, pero hay que tener presente que se le puede aplicar todo tipo de directivas comunes en Apache como autenticación, htaccess, etc. WebDAV permite además permisos de escritura independientes de los de lectura (todos pueden leer el calendario pero sólo algunos pueden editarlo).

Conseguir el calendario con festivos de España

Descargamos el calendario de la web de Mac, en concreto el calendario de España.

Creamos el directorio /var/www/webdav y guardamos en él el calendario. Nos aseguramos de dar permisos de escritura al usuario www-data en dicho recurso:

mkdir /var/www/webdav
mv Spain32Holidays.ics /var/www/webdav
chown www-data /var/www/webdav -R

Configuración del calendario compartido en nuestro cliente PIM

El acceso en modo escritura vía WebDAV a un calendario ICS está soportado por los principales clientes PIM. En este caso comentaré como implementarlo en Kontact, el cliente PIM de KDE:

Tras ello veremos en nuestro calendario los festivos nacionales.

Importante: La mayoría de clientes PIM (Mozilla Sunbird, Evolution, Outlook, etc) permiten el acceso a calendarios remotos ICalendar mediante el protocolo WebDAV.

Crear la categoría “Festivo”

Para nuestro propósito necesitamos definir una categoría “Festivo y asignársela manualmente a todas las fechas marcadas en el calendario. Esto se debe a que los festivos en el calendario que estamos usando no vienen especificados como tal, y de alguna forma debemos identificarlos en la consulta.

Festivo en mi empresa por obras

Crear nuestros propios festivos

La empresa puede definir sus propios festivos incluyéndolos en el calendario con la categoría Festivo.

Instalación de Ruby y librerías necesarias

En nuestro programa hemos empleado el lenguaje Ruby por disponer de clases muy cómodas para manejar AGI’s y ficheros ICalendar.

apt-get install ruby
apt-get install rdoc

Ahora instalaremos las librerías para manejo de AGI’s y ficheros ICalendar (ICS). En nuestro caso usaremos RubyGems, un gestor de librerías Ruby desde repositorio común:

Gracias al generador de documentación Rdoc podemos acceder cómodamente al API de las clases instaladas mediante un navegador web:

El dialplan

Tan sólo mencionar que ejecutaremos el AGI para cada llamada entrante desde el exterior, por lo que, suponiendo que el AGI se llama “comprobar-festivos.rb” y que el contexto adecuado es “entrantes” el dialplan sería: [entrantes]
exten => s,1,AGI(comprobar-festivos.rb)

También se podría complementar este sistema con una comprobación del horario de apertura al público en las llamadas recibidas. Esto se podría implementar con la aplicación GotoIfTime en la línea siguiente del dialplan.

El AGI

El código del programa sería éste: comprobar-festivos.rb.

Debemos guardar el fichero en “/var/lib/asterisk/agi-bin” y darle permisos de ejecución: chmod +x /var/lib/asterisk/agi-bin/comprobar-festivos.rb

Nota: En caso de tener el servidor web con el calendario en otra máquina habría que acceder al fichero remotamente. Por ejemplo usando el protocolo HTTP desde alguna clase de Ruby a tales efectos, o mediante alguna clase que implemente un cliente WebDAV (desconozco si existe para Ruby), o incluso montando el directorio remoto en el sistema de archivos del servidor Asterisk.

Las grabaciones de voz

Debemos grabar dos mensajes y guardarlos en /var/lib/asterisk/sounds:

Nota: El formato de audio puede ser cualquier otro soportado por Asterisk.

Conclusiones

Una vez más, la flexibilidad de Asterisk y sus AGI’s nos brindan la posibilidad de implementar cualquier funcionalidad que se nos ocurra en nuestra centralita, desde la más sencilla hasta la más exótica e innovadora.

En el ejemplo que nos ocupa confluyen en armonía varios conceptos y tecnologías (dialplan, AGI, Ruby, WebDAV, ICalendar). Las posibilidades sólo podrían estar limitadas por nuestra propia imaginación.

No quisiera terminar este pequeño “howto” sin antes agradecer su aportación a todas las personas que con sus desarrollos lo han hecho posible.

Posted by Iñaki Baz Castillo in Asterisk, Howto

Esta entrada se publicó el Martes, Octubre 10th, 2006 a las 13:36 y está archivada bajo la categoría Asterisk, Howto. Puede seguir cualquier comentario a esta entrada a través del feed RSS 2.0 . Puede dejar un comentario, o trackback desde su propio sitio.

4 comentarios to “Consulta los festivos de un calendario WebDAV desde Asterisk”

  1. ktulur says:

    La verdad es que AGI permite hacer cosas realmente interesantes.

  2. Daniel says:

    tengo problemas con el ruby cuando hago correr la aplicacion en un centos 5.0 me salen los siguientes errores Launched AGI Script /var/lib/asterisk/agi-bin/comprobar-festivos.rb
    /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require’: no such file to load –error.rb (LoadError)
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require’
    from /usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/rs/receive_char.rb:24
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in `gem_original_require’
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in `require’
    from /usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/return_status.rb:9
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in `gem_original_require’
    from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:33:in `require’
    from /usr/lib/ruby/gems/1.8/gems/ruby-agi-2.0.0/lib/ruby-agi/command.rb:40
    … 10 levels…
    from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:228:in `activate’
    from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:66:in `active_gem_with_options’
    from /usr/lib/ruby/site_ruby/1.8/rubygems.rb:59:in `require_gem’
    from /var/lib/asterisk/agi-bin/comprobar-festivos.rb:20
    — AGI Script comprobar-festivos.rb completed, returning 0

  3. Iñaki Baz Castillo says:

    Vaya, parece que CentOS guarda las librerías de Ruby en otro sitio. No obstante creo que no debería haber problema, asegúrate de hacer estos pasos:

    - wget http://rubyforge.org/frs/download.php/11289/rubygems-0.9.0.tgz (aunque hay ya una versión 0.9.4).

    - tar -zxvf rubygems-0.9.0.tgz

    - ruby rubygems-0.9.0/setup.rb

    - gem install ruby-agi

    - gem install icalendar

    ¿No te da ningún error? si es así continuamos:

    Cambia en el script:
    require_gem ‘ruby-agi’
    por:
    require ‘ruby-agi’
    (require_gem está deprecated aprece ser).

    Ahora ejecuta de nuevo el programa a ver si te sigue dando el error. Si continúa haz lo siguiente:

    - Crea un script “prueba.rb”:
    ————————
    puts “require rubygems”
    require ‘rubygems’

    puts “require icalendar”
    require ‘icalendar’

    puts “require date”
    require ‘date’

    puts “require ruby-agi”
    require ‘ruby-agi’

    puts “agi=AGI.new”
    agi = AGI.new
    ———————–

    y pega la salida.

  4. blog.voz-ip.com » Blog Archive » Google Calendar en Asterisk says:

    [...] Google Calendar en Asterisk Hace no mucho comentábamos el uso de un calendario en webdav para que Asterisk comprobara los días festivos al recibir una llamada y supiera si debía permitir la llamada o saltar directamente al buzón de voz. [...]

Deje un comentario

XHTML: Puede emplear estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

2005 © Irontec S.L. :: Powered by Irontec & Wordpress
[ IRONTEC S.L. - C.I.F. B-95274890 ]
[ Ctra. Basurto-Kastrexana nº70 / Enpresaldea ]
[ 48002 - Bilbao - Bizkaia ]