1/24/2012

Plan de Marcado (Dialplan)



Dialplan Básico


El dialplan es el corazón  de su sistema Asterisk. Este define como el flujo el de llamada entra y sale de su sistema. Es una forma de lenguaje de scripting, el dialplan contiene instrucciones que Asterisk sigue en repuesta a eventos externos. Al contrario de un sistema de teléfono tradicional, el dialplan de Asterisk es completamente personalizable.

Sintaxis del Dialplan.


El dialplan es especificado en el archivo de configuración extensions.conf. Este archivo usualmente reside en el directorio /etc/asterisk, pero esta localización puede variar dependiendo de cómo usted instalo Asterisk. Otras localizaciones comunes para este archivo son /usr/local/etc/asterisk y /opt/etc/asterisk.


El dialplan está compuesto por cuatro conceptos fundamentales: contexts (contextos), extensions (extensiones), prorities (prioridades) y Applications (aplicaciones). Después de explicar el papel que cada uno de esto elemento juega en el dialplan, construiremos un dialplan básico pero funcional.

Contextos

Los dialplan son divididos en secciones más pequeñas llamadas contexto. Los contextos evitan que las diferentes partes del dialplan interactúen una con otra. Una extensión que es defina en un contexto es completamente aislada de cualquier otra extensión en otro contexto, a menos que la interacción sea especialmente permitida.


Los contextos son definidos por poner en nombre del contexto encerrado en corchetes ([]). Los nombres pueden estar compuestos por letras de la A hasta la Z (mayúscula y minúscula), números del 0 al 9, guión (-) o la raya baja (_). Un contexto para una llamada entrada podría ser al como esto:


[entrante]  


Los nombres de contexto tienen una longitud máxima de 79 caracteres.


Todas las instrucciones puestas después de la definición de un contexto son parte de este contexto, hasta que el próximo contexto es definido. Al principio del dialplan, hay dos nombre de contextos muy especiales [general] y [globals]. La sección [general] contiene una lista setting o configuración que afectan el dialplan en general. Evite el uso de [general], [default] y [global] como nombre de contexto, por lo contrario puedes usar cualquier cosa que desee como nombre de contexto.


Cuando usted define un canal (channel) (lo cual no es definido en el archivo en el archivo extensions.conf, sino más bien en archivos tales como sip.conf, iax.conf, chan_dahdi.conf, etc.), uno de los parámetros requerido en cada definición de canales es el contexto. El contexto es el punto dentro del dialplan donde las conexiones de un canal se iniciaran.


Extensiones


En el mundo de las telecomunicaciones, la palabra extensión usualmente se refiere a un identificador numérico que, cuando es marcado, hará sonar un teléfono (o recursos del sistema, tales como correo de voz). En Asterisk, una extensión es mucho más poderosa, ya que esta define una serie de pasos único a través de los cuales Asterisk llevara las llamadas.


Dentro de cada contexto, nosotros podemos definir tanta (o pocas) extensiones como sean requerida. Cuando una extensión particular es activada (por una llamada entrante o porque los dígitos han sido marcados  sobre un canal), Asterisk sigue los pasos definidos para esta extensión. Es la extensión, por lo tanto, que específica que pasa con la llamada a medida que hace su recorrido  a través del dialplan. Aunque las extensiones pueden, por supuesto, ser usado para especificar la extensión telefónica en el sentido tradicional, en el dialplan de Asterisk, pueden ser usadas para hacer mucho más cosas.


La sintaxis de una extensión es la palabra exten, seguida por una flecha formada por un signo de igualdad (=) y el signo de mayor que (>). Ejemplo


exten=>


Esta (=>) es seguida por el nombre (o número) de la extensión. Cuando tratamos con sistema de teléfono tradicional, nosotros tendemos a pensar en extensión como un número que usted marcaria para hacer  que otro teléfono suene. En Asterisk, extensión es un concepto mucho más amplio; por ejemplo, un nombre de extensión puede ser cualquier combinación de números y letras.


Cada paso en una extensión se compone de tres componentes:
  • El nombre (o numero) de la extensión
  •   La prioridad (cada extensión puede incluir múltiples pasos; los números número de paso es llamado prioridad.)
  • La aplicación (o comando) que toma lugar en cada paso.
Estos tres componentes van separados por comas, como este:


 exten => name,priority,application()

Este es un ejemplo simple de cómo podría lucir una extensión real:

exten => 123,1,Answer()

En este ejemplo, el nombre de la extensión es 123, la prioridad es 1, y la aplicación es Answer().


Prioridad

Cada extensión puede tener múltiples pasos, llamado prioridad. Las prioridades son numeradas secuencialmente, iniciando con 1, y cada una ejecuta una aplicación específica. Como un ejemplo, la siguiente extensión contestaría el teléfono (en la prioridad número 1), y  después cuelga el teléfono (en la prioridad número 2):

exten => 123,1,Answer()
exten => 123,1,Hangup()

Es bastante obvio que este código no hace nada realmente útil. El punto clave para notar aquí es que, para una extensión particular, Asterisk sigue el orden de prioridades. Este estilo de sintaxis de dialplan es todavía visto de vez en cuando, aunque no suele utilizarse más para los nuevos código.

exten => 123,1,Answer()
exten => 123,2,hacer algo
exten => 123,3,hacer otra cosa
exten => 123,4,hacer una última cosa
exten => 123,5,hangup()


Prioridades sin numerar

En las versiones anteriores, la numeración de prioridades causo muchos problemas. Imagine tener una extensión  que tenga 15 prioridades, y después necesitar agregar alguna cosa en el paso 2: todas las prioridades subsecuentes tendría que ser reenumerada manualmente. Asterisk no maneja los pasos erróneos o prioridades mal numeradas, y la depuración de este tipo de errores era inútil y frustrante.

A partir de la versión 1.2, Asterisk abordó este problema: se introduce el uso de las prioridades n, lo cual significa “next” (siguiente). Cada vez que Asterisk encuentra una prioridad n, toma el número de la prioridad anterior y le agrega 1. Esto hace que sea fácil realizar cambios en su dialplan, como usted no tiene que tener reenumerado todos sus pasos. Por ejemplo, su dial plan podría ser algo asi:

exten => 123,1,Answer()
exten => 123,n,hacer algo
exten => 123,n,hacer otra cosa
exten => 123,n,hacer una última cosa
exten => 123,n,hangup()

Internamente, Asterisk calcula el próximo número de prioridad cada vez que encuentra una n. Recuerde que usted debe siempre especificar la prioridad número 1. Si usted pone n en vez de 1 para la primera prioridad, cuando vuelva a cargar el dialplan encontrara que la extensión no existe.  
  
Nota: Este tema continua en la próxima entrega




Aprende a Implementar Asterisk paso a paso y en español
Libro: Asterisk PBX: Instalación, implementación y puesta en marcha.
Descargar Ahora