jueves, 17 de marzo de 2011

Modulo Freepbx para leer contexto editado en los archivos de configuración

Saludos Encontré esta información en un blog de asterisk el cual puede ser de mucha utilidad.

En un comienzo FreePBX se diseñó para ser una herramienta simple y fácil para programar tanto el flujo de las llamadas como el dialplan de Asterisk. Sin embargo, en nombre de la simplicidad a veces es necesario sacrificar características avanzadas y formas muy complicadas para hacer las cosas. FreePBX llega a un razonable punto medio entre ambos mundos: por una parte tiene una GUI sumamente poderosa que se mantiene intuitiva y simple, y por la otra tiene una manera ordenada para extender de forma consistente la GUI en un dialplan ‘crudo’(me refiero a la estructura del archivo extensions.conf).

Primero, un pequeño refresco de los conceptos del dialplan de Asterisk. Cada instrucción de Asterisk está compuesta de cuatro partes:

* Contexto

* Extension

* Prioridad

* Aplicación

Por ejemplo:

[gritan-monos]
exten => 66,1,Playback(tt-monkeys)

En este ejemplo, cuando llega una llamada a la extension 66, con prioridad 1 dentro del contexto “gritan-monos”, Asterisk reproducirá (Playback) el archivo de sonido “tt-monkeys”. Adicionalmente, Asterisk tiene la habilidad de incluir uno (o más contexto) dentro de otros contextos utilizando el comando “include”, por ejemplo:

[algun-contexto]
exten => … otras cosas
include algun-otro-contexto

FreePBX toma ventaja de la característica include para mantener el dialplan simple y limpio dividiéndolo en contextos más pequeños. El contexto que utiliza FreePBX para el enrutamiento de llamadas se llama “from-internal”. A excepción de dos inclues, el contexto “from-internal” está casi vacío. El contenido de “from-internal” se puede ver aquí:

=========== extensions.conf ==============
[from-internal]
include => from-internal-xfer
include => bad-number
===========================================

El contexto “from-internal-xfer” su vez incluye (entre otros) “from-internal-additional” y “from-internal-custom”. El contexto “from-internal-additional” es también bastante disperso -a excepción de algunos includes más de contextos aún más pequeños, correspondiendo al dialplan completo generado por FreePBX. También se incluye siempre el contexto “from-internal-custom” -anque siempre está vacío- de tal manera que se pueda utilizar de la manera que se quiera. La manera simple de comenzar un nuevo contexto es en “/etc/asterisk/extensions_custom.conf” y agregar nuestro propio dialplan allí. Luego, para incluir nuestro contexto “[gritan-monos]” en el contexto generado por FreePBX deberíamos agregar lo siguiente a “/etc/asterisk/extensions_custom.conf”:

[from-internal-custom]
include => gritan-monos

[gritan-monos]
exten => 66,1,Playback(tt-monkeys)

Luego debemos re-cargar el dialplan (asterisk -rx “dialplan reload”, o asterisk -rx “extension reload” si se está usando Asterisk 1.2). Eso es todo!! Ahora utilizando alguna extensión discamos 66. Se debería oír la reproducción del archivo “tt-monkeys”.

Aunque este método es realmente simple, tiene algunos inconvenientes: Si se definiera algún código como 66, y luego se configurase algún anexo (y por lo tanto un teléfono) con la extensión 66 en FreePBX – ¿qué sucedería cuando se disca 66?

Correcto!, Asterisk se confundiría: no sabría a cuál de los ’66′ llamar (de hecho Asterisk elegiría uno de los dos, pero saber cuál es otra historia). Con el fin de prevenir tal situación, FreePBX protege rigurosamente el dialplan de tener entradas repetidas. No se pueden tener dos extensiones utilizando el mismo número (inténtelo!). Tampoco es posible tener otros ‘destinos’ (los cuales son también llamados ‘extension’ en el lenguaje del dialplan de Asterisk) tales como ‘ring groups’(grupos de extensiones) o ‘queues’(colas de llamados) con un mismo número de extensión ya existente.
Para incluir un dialplan propio en la ruta que sigue la llamada, se puede utilizar una combinación de módulos. Primero, se necesita decirle a FreePBX en qué parte del dialplan propio debe apuntar. Para hacer ésto, se debe crear un “Custom Destination“(Destino Personalizado en español, se encuentra en la pestaña “Tools”) con la opción “Custom Destination”apuntando al dialplan personalizado en el siguiente formato: contexto,extensión,prioridad. Para referirse al ejemplo previo, se debería elegir el destino personalizado como: gritan-monos,66,1. También se agrega una Descripción de manera que sea más fácil recordar qué hace este dialplan. Se llamará gritan-monos. Luego presionar submit(enviar).

A continuación necesitamos crear una “Miscellaneous Application”. El módulo “Misc Application” nos permite establecer una extensión (recuerde que, en Asterisk una extension el ‘algún lugar’ en el dialplan al que se llama, no necesariamente es un teléfono) que apunte a cualquier lugar. Por ejemplo, si desea que sus usuarios sean capaces de call a un IVR (lo cual está disponible solamente para las llamadas entrantes), puede elegir un “feature code”(Código de Función, por ej. *133,33,etc.). Ahora se elegirá un “Feature Code” para llamar al contexto personalizado: Click en “Misc Application” en la pestaba “Setup”, ingresar algún código, por ejemplo: 11234. A continuación rellenar la casilla “Enter a Description”, con ‘llamar monos’. Finalmente, elegir la aplicación personalizada desde el menú “Destination” Custom Application: gritan-monos y finalmente click en submit.

No hay comentarios:

Publicar un comentario