You are on page 1of 15

Centrales Asterisk: DIAL PLAN & FEATURES

http://centralesasterisk.blogspot.com/2009/08/dial-plan-features.html

Centrales Asterisk

CONCEPTO

SERVIDOR

LINEAS Y ANEXOS

TERMINALES

DIAL PLAN

ASTERISK GUI

DIAL PLAN & FEATURES
|

• Dial Plan & Features
– Dial Plan: Basic DP simple, DP Interactivo
– Dial Plan: Variables, Funciones, Condicionales
– Dial Plan: Voicemail, Macros
– Asterisk: Features
COMANDOS BASICOS ASTERISK
Comandos Asterisk:
asterisk –r: permite reconectarse al servidor
asterisk –g: permite iniciar el servicio asterisk
restart now: permite reiniciar el servicio de asterisk
stop now: permite detener el servicio asterisk
exit: Cierra la consola de asterisk
DIAL PLAN BASICS
El plan de marcación o “Dial Plan”, es el corazón de toda configuración en asterisk, y de esta configuración
dependerá el performace y eficiencia de nuestra central telefónica.
Para poder personalizar la central a gusto se deberá comprender plenamente el funcionamiento del plan de
marcación de asterisk
Sintaxis:
El plan de marcación se configura en el archivo extensions.conf, este archivo reside usualmente en la carpeta
/etc/asterisk/
El dial plan esta compuesto de 04 conceptos principalmente:
- Contextos
- Extensiones
- Prioridades
- Aplicaciones
CONTEXTOS:
El dial plan se divide en secciones llamadas contextos, los contextos son nombres para un grupo de extensiones,
las cuales pueden tener diferentes propósitos. Los contextos también pueden interactuar entre ellos.
Los contextos se denotan escribiendo el nombre del contexto entre corchetes “[nombre_de_contexto]”.
Durante la creación de una extensión (sip.conf, iax.conf, etc) se define a que contexto pertenece.

1 de 15

18/02/2015 13:23

priority.ETIQUETAS: Desde asterisk 1. solo basta con agregarla entre paréntesis justo después del numero de la prioridad.e.n.e. sin embargo en asterisk una extensión es mucho mas que un número _ telefónico.n(label).com/2009/08/dial-plan-features. p. context=from-internal Todas las instrucciones por debajo del nombre del contexto son asignadas a ese mismo contexto hasta que un nuevo contexto sea declarado. Al inicio del archivo extensions. La sintaxis usada para declarar una extensión es la palabra “exten”. contiene los parámetros generales del dial plan. Esto es para asegurarnos que podremos referirnos a esa prioridad por un valor distinto a su numero. exten => Esto va seguido por el numero de la extensión.do something else exten => 123. las cuales irán siendo utilizadas por los contextos siguientes.1. al numero que se le asigna a los terminales telefónicos. Para asignar una etiqueta de texto a una prioridad.n.e. seguido de una flecha formada por una signo igual y un signo mayor p.Hangup() PRIORIDADES .2.html p. exten => 123. Existe un tipo de prioridad “no numerada” que se representa con la letra n y permite evitar problemas generados por la numeración secuencial. llamados prioridades. La sección globals.do one last thing exten => 123.n.Answer() exten => 123. exten => name.conf. el numero del paso es llamado prioridad) La aplicación (o comando) es el que realiza la acción en la llamada. existen dos contextos especiales -[General] -[Globals] La sección general. PRIORIDADES: Cada extensión puede tener multiples pasos.application() Una extensión completa esta compuesta de: El nombre (o numero) de la extensión.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk. ya que define una serie de pasos (donde cada paso contiene una aplicación) que asterisk realizara durante una llamada. exten => 123. cada prioridad es numerada secuencialmente. Esta prioridad “no numerada” significa que cada prioridad es igual a la prioridad anterior +1 Por lo tanto: n=n+1 p. y ejecutando una aplicación especifica.blogspot.application() APLICACIONES: 2 de 15 18/02/2015 13:23 . a las prioridades. EXTENSIONES: Normalmente conocemos con el nombre de extensión. La prioridad (cada extensión puede incluir múltiples pasos. contiene las variables globales del sistema.e.n.do something exten => 123. y dado que actualmente el uso de prioridades no numeradas es muy usual en el diseño de una dial plan. comenzando con 1. es muy común asignar etiquetas de texto (labels). el cual probablemente no se conozca (prioridad n).

Hangup() Vamos a construir un dial plan que consista en que . y es que este signo es utilizado para separar mas de un parámetro. and Goto() La aplicación background. CONSTRUYENDO UN DIAL PLAN SIMPLE: Answer(). tocar una melodía. las entradas (inputs) del usuario desde la extension son ignoradas. asterisk contesta la llamada. Ocasionalmente podríamos ver el pipe entre los paréntesis. pero en algunas ocasiones no es necesario. Algunas aplicaciones como Answer() o Hangup(). Playback().n.Answer() exten => 1234. Para este ejemplo vamos a asumir que ya hemos creado la extensión y que tiene como nombre de contexto “from-internal” Para la construcción de este dial plan utilizaremos las siguientes aplicaciones: Answer() Playback() Hangup() Answer(). no requieren mayor información para hacer su trabajo. Se puede utilizar al inicio de la configuración del contexto para una extension. es la aplicación que se utiliza para que la central conteste una llamada que esta timbrando.wav o . toca una melodía.com/2009/08/dial-plan-features.Hangup() CONSTRUYENDO UN DIAL PLAN INTERACTIVO: Background().n. Anwser() no tiene argumentos Playback(). al igual que playback() reproduce una grabación.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk. a esta información adicional se le conoce como parámetros. y para pasarle los parámetros a la aplicación deben colocarse entre los paréntesis. se deberá ingresar la ruta completa entre los paréntesis Playback(/home/john/sounds/filename) Lo mas comun es crear una carpeta para estos archivos dentro de la ruta por defecto Playback(custom/filename) Ahora si vamos a crear nuestro dial plan [from-internal] exten => 1234. y así sucesivamente. El background(). es la aplicación que se utiliza para reproducir un sonido grabado previamente en un archivo o a través de un canal. aceptando entradas de tono. Cuando utilizamos playback.html Las aplicaciones son el caballito de batalla del dial plan. esta aplicación si permite al usuario ingresar entradas (inputs) desde el teclado del teléfono. Por defecto playback buscara el archivo ingresado como argumento en la ruta “/var/libs/asterisk/sounds” Si se desea hacer referencia a un archivo ubicado en otra ruta. .blogspot. como por ejemplo. es la pieza vital para un dial plan interactivo.1. sin embargo existen otras aplicaciones que si requieren de cierta información adicional para procesarla. Como ya mencionamos. pero a diferencia de playback(). colgar una llamada.Playback(hello-world) exten => 1234. marcar un canal. estas entradas interrumpen la reproducción y se dirige a la extensión correspondiente. 3 de 15 18/02/2015 13:23 . y luego cuelga.mp3) como argumento entre los paréntesis. cada aplicación realiza una acción especifica sobre el canal actual.e. WaitExten(). Para utilizar playback() se debe ingresar el nombre del archivo sin la extension (p.

n. exten => 123.Answer() exten => 123.1.Playback(digits/4) Del ejemplo anterior si llamamos al 123.blogspot.1.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk.1.WaitExten() La aplicación WaitExten().e.1.Answer() exten => 123.Playback(digits/1) exten => 1.Background(main-menu) exten => 123.n.1. exten => 123. la sintaxis de la aplicación Goto().Playback(digits/2) exten => 2.Playback(digits/4) Que ocurre cuando.Playback(digits/1) 2.1.n.Answer() exten => 123.extension.Answer() 123.Goto(incoming. WaitExten().Playback(digits/2) exten => 3. requiere los argumentos contexto.1) MANEJANDO INPUTS Y TIMEOUTS [from-internal] exten => 123. le indica al sistema que espere por el ingreso de una extensión.1.Goto(incoming. pero si lo que queremos es esperar a que el usuario ingrese o marque algun codigo podemos agregarle la aplicación waitexten() al final.Playback(digits/3) exten => 4.n.1.1.n.Background(main-menu) exten => 123.1. tenemos un duplicado entre los primeros digitos de las extensiones disponibles: p.n.Answer() exten => 123. and Goto() [from-internal] exten => 123. se encuentra en la construcción de menús de voz. exten => 123.priority) Background(). exten => 123. exten exten exten exten exten exten exten => => => => => => => 123. es utilizada para enviar una llamada a otra parte del dial plan. luego de este tiempo terminara esta aplicación.1. Luego de este tiempo ejecutara la extensión según los dígitos que fueron ingresados.Goto(context.com/2009/08/dial-plan-features.n.n.WaitExten() 1.1.1. Ahora vamos a utilizar la aplicación Goto().Playback(digits/2) 3.Background(main-menu) exten => 1. la cual deberá estar dentro del contexto. pero que ocurre si solo presionamos 1. y luego presionamos la opción 123.1.1) exten => 2. y pasara a la siguiente prioridad si existiera.Answer() 4 de 15 18/02/2015 13:23 .123. Como se puede comprobar en la practica asterisk esperara unos segundos cuando se encuentra con mas de una alternativa posible.html El uso mas común que suele dársele a la aplicación background.Background(main-menu) En el ejemplo anterior por defecto se cortara la llamada.n.123. La aplicación Goto().n.n.1. Finalmente vamos a mencionar que la aplicación WaitExten() soporta como argumento el tiempo en segundos que esperara para que el usuario ingrese una extensión valida. extensión y prioridad. volveremos a ir al menú.WaitExten() exten => 2.Background(main-menu) 123.Playback(digits/3) 4.

Goto(from-internal.1. La sintaxis de Dial().html 123. se ejecuta cuando el usuario ingresa una opción invalida.Hangup() MANEJANDO INPUTS Y TIMEOUTS La opción i. [menu] exten => _98. que nos permite comunicar a dos anexos (personas) entre si. timeout.n.123. es mas compleja que la sintaxis de la funciones anteriores. con otro usuario que se puede encontrar en cualquier parte del mundo conectado a través de Internet con su teléfono IP.n.Answer() exten => s.n.1.n. como la aplicación DIAL().Hangup() Habiendo definido esto ahora pasaremos a ver otras aplicaciones muy importantes. y cuando se cumple el tiempo máximo disponible para que el usuario marque una extensión.Background(enter-ext-of-person) 123.Dial(SIP/201) exten => 202.1) i.Goto(from-internal. exten => 111.n.Playback(digits/3) 3.blogspot.1) 2.123. obtenemos un dial plan un poco mas robusto y amigable.1) [from-pstn] exten => s.Dial(IAX2/202) También se pueden llamar a un conjunto de extensiones p.s.1) 3. Dial(type/identifier.n. por ejemplo.Playback(hello-world) exten => s.Dial(SIP/202&SIP/203&SIP/204) Usando la aplicación Dial() El segundo argumento me permite colocar el tiempo máximo que se ejecutara la aplicación Dial.Playback(digits/2) 2.1. URL) p. Usando la aplicación Dial() La aplicación Dial().WaitExten() 1. Utilizando las opciones “i” y “t”.com/2009/08/dial-plan-features.1. el primero el el destino al cual esta intentando conectarte. exten => 204.n.1.1. Esto resulta muy útil sobre todo cuando los usuarios están utilizando distintos tipos de medio de comunicación. El siguiente ejercicio intentara mostrar el funcionamiento de la extensión s. se pasa a la extensión s.1. la llamada será direccionada automáticamente hacia la extensión t (el timeout por defecto es de 10 segundos).Playback(pbx-invalid) i.Goto(from-internal. 5 de 15 18/02/2015 13:23 .n. La extensión “S” es muy utilizada para generar menús en la central telefónica.Centrales Asterisk: DIAL PLAN & FEATURES exten exten exten exten exten exten exten exten exten exten exten exten => => => => => => => => => => => => http://centralesasterisk. “S” significa inicio o start.1) t.1. y puede tener hasta 4 argumentos.n.Goto(from-pstn.Goto(from-internal.1. haciendo uso de la aplicación Goto(). options. La extensión “S” Cuando una llamada entra en un contexto sin un destino especifico (por ejemplo una llamada en la línea FXO).123.Playback(vm-goodbye) t.e.1.Playback(digits/1) 1. es una de las aplicaciones mas importantes con las que cuenta asterisk. tiene la capacidad de conectar dos usuarios uno con el otro. Por ejemplo podemos utilizar la aplicación Dial() para comunicar a un usuario que llama desde un teléfono analógico a través de la rede de telefonía tradicional.123.e.

Dial(${JESUS}&${JESSICA}) Ciertamente el tema de las variables resulta mas interesante cuando las asignamos a las troncales 6 de 15 18/02/2015 13:23 .1.1. pero a su vez podemos formar un menú mas completo con el comando Dial(). FUNCIONES.Playback(vm-goodbye) exten => t.Dial(Zap/1. También sirven para agregar lógica a nuestro dial plan.1.Dial(Zap/1.1.n. y pueden encontrarla en el siguiente hipervínculo: http://www.10) exten => 123.m) exten => 123.Playback(vm-nobodyavail) exten => 123.WaitExten() exten => 1. la lista de opciones es bastante larga.Goto(from-internal.Playback(vm-nobodyavail) exten => 1. tal como se aprecia en el siguiente ejemplo: [from-pstn] exten => 123.n.Hangup() El carácter “m”.1) exten => t. Por ejemplo vamos a guardar el valor SIP/201 en la variable JESUS [globals] JESUS=SIP/201 JESSICA=SIP/202 PABLO=SIP/208 exten => 123.1.123. Variables Globales. permite que el usuario que esta llamando escuche la MOH en lugar del tono de ring.n.Hangup() DIAL PLAN: VARIABLES.e.n.Playback(pbx-invalid) exten => i.n.Answer() exten => 123.html exten => 123.10) exten => 1. Una variable es como un contenedor que puede mantener una valor durante un periodo.1.n.Dial(SIP/Jane.Dial(Zap/1.n.blogspot. se aplican a todas las extensiones en todos los contextos. CONDICIONALES Las variables pueden ser de 03 tipos: Variables Globales Variables de Canal Variables de Entorno Las variables ayudan a reducir o simplificar el contenido y la estructura del dial plan optimizando de esta manera el proceso de lectura de los archivos de configuración de nuestra centralita.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk.Hangup() exten => i. esta variables deberán ser declaradas debajo del contexto [globals].com/2009/08/dial-plan-features.org/wiki/view/Asterisk+cmd+Dial Usando la aplicación Dial() p.n.voip-info. hasta que la llamada sea contestada.Background(enter-ext-of-person) exten => 123.n.n.Playback(vm-nobodyavail) exten => 2. Cuando recibimos una llamada podemos derivarla a un menú como el que hemos creado.n.1.10.Hangup() eten => 2.10) exten => 2.1.Hangup() El tercer parámetro puede ser una cadena o carácter.n.Playback(vm-nobodyavail) exten => 123. exten => 123.

1. 6. donde var es una variable del entorno de linux o unix a la cual queremos referenciar.blogspot.html [globals] TELEFONICA=ZAP/1 1977=ZAP/2 BASE CLARO=ZAP/3 JESUS=SIP/201 JUAN=SIP/202 Este tipo de esquema nos permite elaborar un dial plan en funciona a variables y si se produce alguna modificación en el esquema.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk. ${EXTEN:0:2}=82 exten => _XXXX. 7.SayDigits(${EXTEN}) A partir de esta variable también podemos mutilar el numero marcado.1. ${EXTEN:0:1}=9 _9388211.Set(MAGICNUMBER=42) Las variables de entorno. Este tipo de variables no son de uso común en el dial plan pero están disponibles si fuesen necesarias. “X” es la posición donde comenzara el numero resultante y “Y” es la cantidad de dígitos que serán retornados exten => _XXXX. .1. las variables de canal se definen solo para la duración de la llamada actual.SayDigits(${EXTEN:2}).SayDigits(${EXTEN:3:2}). y a diferencia de las variables globales. X : equivale a un digito 0 – 9 Z : equivale a un digito 1 – 9 N : equivale a un digito 2 – 9 [15-7] : equivale a los dígitos 1.1.1. ${EXTEN:0:2}=93 _9388211.1. exten => 125. podemos hacer referencia a estas variables a través de la funciona de marcación env(). con este tipo de comodines podemos crear reglas que agrupen grandes conjuntos de números en unas cuantas líneas. solo bastara con cambiar el valor de la variable y no será necesario modificar todo nuestro dial plan. Patrones de Marcado y Variable ${EXTEN} Los patrones de marcación son comodines que nos permiten simplificar un grupo de extensiones.com/2009/08/dial-plan-features. ${EXTEN:3:2}=82 _9388211.SayDigits(${EXTEN:-4:2}). por ejemplo si seguimos la siguiente sintaxis conseguiremos recortar los primeros dígitos del numero.1. devolverá los últimos 3 dígitos que se hallan marcado 7 de 15 18/02/2015 13:23 . ${EXTEN:3}=8211 _9388211.1.1. 5. ${EXTEN:x:y} . la sintaxis de esta variables es: ${ENV(var)} . exten => _XXXX.SayDigits(${EXTEN:1}). Existen varias variables de canal predefinidas y están disponibles para ser utilizadas durante la marcación.e. toma el mismo valor que el numero de la extensión.SayDigits(${EXTEN:3}).1.SayDigits(${EXTEN:2}) Patrones de Marcado y Variable ${EXTEN} Los siguientes ejemplos ayudaran a comprender mejor las opciones: exten exten exten exten exten exten exten => => => => => => => _273443. ${EXTEN:2}=3443 _273443. ${EXTEN:1}=73443 _9388211.SayDigits(${EXTEN:0:1}). Variable de canal.SayDigits(${EXTEN:2}). esta variable se asocia solamente con una llamada. : Este comodín equivale a un o mas dígitos sin importar el valor Patrones de Marcado y Variable ${EXTEN} La variable EXTEN. p.1.SayDigits(${EXTEN:0:2}). son una forma de acceder a las variables del entorno unix desde asterisk. y solo están disponibles para los canales que participan de esa llamada.

1.Hangup() Habilitando una llamada a Numero LDI: OUTBOUNDTRUNK=ZAP/1 [fijo-local] exten => _00. sin embargo tambien podemos hacer referencia del valor de dicha funcion de la siguiente manera: ${FUNCTION_NAME(argument)} Funciones: 8 de 15 18/02/2015 13:23 .Hangup() Includes Es posible concatenar los contexto mediante el comando include.Dial(${OUTBOUNDTRUNK}/${EXTEN}) exten => _0[4-8]X[2-8]XXXXX.n.n..Hangup() Patrones de Marcado y Variable ${EXTEN} Habilitando una ruta saliente a números Fijos LDN: OUTBOUNDTRUNK=ZAP/1 [outbound-local] exten => _0[4-8]X[2-8]XXXXX.1.1..1. de esa manera se devolverá el numero que se halla marcado pero sin el 9.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk.Hangup() Habilitando una llamada a Numero Fijo Local sin prefijo 9: OUTBOUNDTRUNK=ZAP/1 [fijo-local] exten => _[2-8]XXXXXX.Congestion() exten => _9NXXXXX..com/2009/08/dial-plan-features.n. Sintaxis: FUNCTION_NAME(argument) Al igual que muchas funciones podemos referenciar a la funcion tal como esta escrito en la sintaxis. exiten varias funciones disponibles y trataremos de explicar las mas utilizadas.n. de echo lo mas común es diseñar distintos contextos para diferentes funciones de la central y luego enlazarlos para formar unos pocos para asignar a los diferentes tipos de extensiones según los privilegios o características que les queremos asignar a cada uno. Sintaxis: [contextoA] include => contextB Funciones: Las funciones nos premitiran aumentar el potencial de nuestro dial plan.n.Congestion() exten => _00.n.html Patrones de Marcado y Variable ${EXTEN} Un ejemplo mas practico seria el siguiente: Si queremos que los usuarios marquen el nueve antes del numero que van a llamar como en la mayoría de las centrales telefónicas el dial plan seria: exten => _9.Dial(${OUTBOUNDTRUNK}/${EXTEN:1}) exten => _9NXXXXX.SayDigits(${EXTEN:1}).blogspot.Dial(${OUTBOUNDTRUNK}/${EXTEN}) exten => _[2-8]XXXXXX..Congestion() exten => _0[4-8]X[2-8]XXXXX.1.Dial(${OUTBOUNDTRUNK}/${EXTEN}) exten => _00. Patrones de Marcado y Variable ${EXTEN} Habilitando una ruta saliente: OUTBOUNDTRUNK=ZAP/1 [outbound-local] exten => _9NXXXXX. listo para salir a la red publica de telefonía.Congestion() exten => _[2-8]XXXXXX.n.n.

es el tiempo máximo de espera cuando el usuario no ingresa ningún digito. Response. DIAL PLAN CONDICIONALES La aplicación Gotoif() La clave para lograr una ramificación condicional entre los contextos de nuestro dial plan es la función gotoif().blogspot. La función SayNumber().Saydigits(12) 345.. Ejemplo: exten exten exten exten exten exten => => => => => => 345.SayNumber(${LEN(${TEST})}) La función Set().com/2009/08/dial-plan-features. la cual puede recibir tres tipos de argumentos. 3. Sintaxis GotoIf(expression?destination1:destination2) Si la expresión resulta verdadera. 2.1. El valor verdadero es representado por el numero 1 y el falso por el numero 0 Los destinos posibles pueden ser los siguientes: 1. asigna el máximo de tiempo entre dígitos que puede tomarse un usuario. Cualquiera de los dos destinos puede ser omitido pero nunca se puede omitir los dos destinos al mismo tiempo. Funciones: Otra función muy utilizada es la función TIMEOUT().n.Una prioridad etiquetada dentro de la misma extensión.Hangup() DIAL PLAN VOICEMAIL 9 de 15 18/02/2015 13:23 .Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk.n..Una prioridad etiquetada de otra extensión en otro contexto.Set(TEST=example) exten => 123.. En caso de que la condicional resulte hacia uno de los destinos omitidos simplemente se proseguirá hacia la siguiente línea o prioridad.n.1. entonces la llamada saltara hacia el destino 1 si resulta falsa ira hacia el destino 2.n(uno). asigna el tiempo absoluto máximo de duración de la llamada Digit.Set(TEST=1) 345. solo uno a la vez: Absolute.Un prioridad etiquetada de otra extensión dentro del mismo contexto.Hangup() 345. reproduce el valor de un numero La función LEN().Saydigits(34) 345.n.GotoIf($[${TEST} = 1]?uno:dos) 345. Gotoif() evalúa los argumentos ingresados y reenvía al llamante a un destino especifico dependiendo si la evaluación resulto verdadera o falsa.html Una función puede encapsular otra función: ${FUNCTION_NAME(${FUNCTION_NAME(argument)})} Ejemplo: exten => 123. devuelve el valor de la longitud de una cadena de letras. asigna un valor a una variable.n(dos).

blogspot.html Una de las características mas populares de los teléfonos modernos es el sistema de buzón de voz.1. tz. la opción tz permite definir la zona horaria. callback. la sintaxis para definir un buzón de voz es la siguiente: mailbox => password. exten => 201.n.Joe Public. Asterisk puede enviar mensaje al correo. Vamos a poner algunos ejemplos de cómo configurar el buzón de voz en nuestro dial plan exten => 201.Dial(${JOHN}.conf). operator.com.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk. opcionalmente se puede agregar las letra “b” y “u”. Email: Aquí va la dirección de correo electrónico del propietario del buzón de voz. esta aplicación envía al llamante a una especifico buzón de voz para que pueda dejar el mensaje. basado en el buzón de voz.name[. review. para diferencias los tipos de saludo (ocupado y no disponible). el buzón de voz debe ser especificado como “mailbox@context” donde “context” es el nombre del contexto del correo de voz.VoiceMail(101@default.conf) Name: Es el nombre del propietario del buzón de voz. y naturalmente asterisk tenia que contar con un sistema de voz muy flexible.10) exten => 201.net. servermail. esta extensión permite llamar a la extensión de Jhon. definiremos distintos buzones de voz.jpublic@pagergateway. Saludos distintos para los estados Ocupado Saludos por defecto. algunas de las principales características del buzón de voz que nos ofrece asterisk son las siguientes: Contiene distintos fólderes para organizar los mensajes en el buzón. incluyendo el mismo audio del mensaje. Password: es la contraseña numérica que el propietario del buzón de voz utilizara para ingresar a su buzón. el directorio de la compañía utiliza este campo para realizar la búsqueda del usuario. y exitcontext. Una definición típica para un buzón de voz es la siguiente: 101 => 1234. visual con luz intermitente.tz=central|attach=yes El buzón de voz utiliza la aplicación voicemail(). y audible con tren de tonos Directorio de la compañía. usualmente lleva el mismo numero que la extensión a la que esta asociado.1. saycid.u) .Dial(${JOHN}) . Pager email: dirección de correo del localizador o celular del propietario donde se enviara un mensaje corto.jpublic@somedomain. Hay nueve opciones validas: adjuntar.email[. a las zonas previamente definidas en la sección [zonemessages] en el mismo archivo (voicemail. y personalizados Posibilidad de asociar varios teléfonos con un buzón y varios buzones con un teléfono Indicador de mensaje de espera. Estas opciones deber ingresarse respetando el formato “opción=valor” y separadas por el signo pipe “|”. Options: en esta campo pueden ir una lista de opciones que permitirán afinar la configuración del buzón de voz del propietario del buzón y prevalecen sobre la configuración global. y la u indica que Jhon no esta disponible. Ahora vamos a combinarlo con la aplicación gotoif() 10 de 15 18/02/2015 13:23 .com/2009/08/dial-plan-features.conf” Creando un Buzón: Dentro de cada contexto del correo de voz.options]]] Pero que función cumple cada uno de estos parámetros? Mailbox: es el numero del buzón de voz. con esta otra podemos hacer que la extensión de jhon timbre durante 10 segundos y si no contesta derivar la llamada al buzón de jhon. dialout. Si el propietario cambia su contraseña el sistema la actualizara en este archivo (voicemail.pager_email[. El archivo de configuración se llama “voicemail.

desde donde intentara llamar a los usuarios.Directory(default.n.Hangup() Ingresando al buzón de voz: Para acceder al buzón de voz utilizaremos la aplicación. Ejemplos: [macro-prueba] [macro-voicemail] De esta manera el sistema podrá diferenciar una macro de un contexto normal 11 de 15 18/02/2015 13:23 .VoiceMailMain() .Voicemail(101@default. por defecto el directorio realiza la búsqueda por el apellido.from-internal. VoiceMailMain() exten => 700. esto nos preemitirá ingresar al buzón de voz por medio de la extensión 700. Observemos el siguiente dial plan: exten exten exten exten exten exten => => => => => => 201. pero con la letra f se puede configurar el directorio para que realice la búsqueda por nombre.n. Otra manera también interesante de ingresar al buzón de voz es la siguiente: exten => _*982XX. Definiendo la macros La macros se definen de una manera muy similar a los contextos.f) exten => 9.u) 201.VoiceMail(101@default. y el tercero (es opcional).GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) 201.1.n(unavail).n(unavail). el segundo es el contexto en extensions.1.Hangup Aplicación Directorio: directory() Esta aplicación puede aceptar hasta 3 argumentos.conf.n. a continuación vamos a utilizar como ejemplo la creación de una macros para el buzón de voz.n.blogspot.conf. puede ser la letra f. Por ejemplo: exten => 8.n(busy).Hangup() 201.VoiceMail(101@default.u) 201.from-internal) DIAL PLAN MACROS Las macros resultan de mucha ayuda a la hora de elaborar el dial plan.html 201. ya que nos permiten simplificar aun mas la elaboración de nuestro dial plan.n.Hangup() En el hemos automatizado la forma como las llamadas ingresaran directamente al buzón de voz dependiendo del estado de la extensión utilizando la variable ${STATUS}.Centrales Asterisk: DIAL PLAN & FEATURES exten exten exten exten exten exten => => => => => => http://centralesasterisk.10) 201.1.Hangup() 201.n(busy). el primero el es contexto dentro del archivo voicemail.b) 201.VoiceMailMain(${EXTEN:3}@default) exten => _*982XX.1. debemos definir una macros entre corchetes y anteponiendo la palabra “macro-” antes del nombre de la macro que vamos a crear.10) 201.com/2009/08/dial-plan-features.Dial(${JOHN}.1.1.n. sin embargo así como esta tendríamos que agregar estas líneas por cada extensión en la central ya que esta extensión estará siempre ligada hacia el usuario Jhon o sea la extensión 201. es como crear nuestras propias funciones personalizadas para el dial plan.1.GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) 201. Utilizaremos las macros para mostrar cual es la mejor manera de configurar una buzón de voz para varias extensiones.Voicemail(101@default.b) 201.Dial(${JOHN}.Directory(default. donde buscara a los usuarios.

1. contiene el contexto original desde donde fue ejecutada la macro ${MACRO_EXTEN}.n.n.Voicemail(${MACRO_EXTEN}@default.b) exten => s.n(unavail).VoiceMail(${MACRO_EXTEN}@default. Definiendo la macros Sin embargo las macros tienen propiedades importantes a comparación de un contexto común corriente. para poder utilizarla desde cualquier extensión.n(unavail).html Definiendo la macros Veamos un ejemplo con el buzón de Jhon pero ahora dentro de una macros [macro-voicemail] exten => s. contiene el “n” mismo argumento ingresado a través de la macro.Hangup() exten => s. por ejemplo.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk.n(unavail).n.GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s.GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s.10) exten => s.n(busy).n(busy).n.u) exten => s.n(unavail).10) exten => s.GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s.n.u) exten => s. contiene el valor de la extensión original donde fue ejecutada la macro ${MACRO_PRIORITY}.n.blogspot.n(busy). En el siguiente ejemplo trataremos de explicar como se pueden utilizar esta variables especiales: [macro-voicemail] exten => s.VoiceMail(101@default.Dial(${ARG1}.GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s. para su utilización: ${MACRO_CONTEXT}. [macro-voicemail] exten => s.Voicemail(101@default.com/2009/08/dial-plan-features.Hangup() exten => s.1. Y es que permiten trabajar con algunas variables adicionales e incluso soportan el envió de argumentos Incorporando una macros al Dial Plan: exten => 201.1.1.n.Dial(${JOHN}.Voicemail(${MACRO_EXTEN}@default.Dial(${ARG1}.Hangup() De esta manera podemos llamar a la macros desde el dial plan [macro-voicemail] exten => s.b) exten => s.Hangup() Usando argumentos en las macros Ahora vamos a prepara una macros genérica gracias a los argumentos.n.b) exten => s.u) exten => s.Hangup() exten => s. el primer argumento será ${ARG1}.u) 12 de 15 18/02/2015 13:23 .Voicemail(${MACRO_EXTEN}@default. observemos el siguiente ejemplo donde por fin separamos la macros del numero de la extensión.VoiceMail(${MACRO_EXTEN}@default.10) exten => s.Macro(voicemail) Las aplicación macro define variables especiales.n.Hangup() Uno punto importante es mencionar que las macros solo soportan la extensión “S” Todo va bien solo que aun seguimos amarrados al buzón de Jhon.1.n. contiene la prioridad original desde donde fue ejecutada la macro ${ARGn}. el segundo argumento será {ARG2} y así sucesivamente.Dial(${JOHN}.10) exten => s.

1.${JANE}) exten => 103.Voicemail(${MACRO_EXTEN}@default.Hangup() [from-internal] exten => 101.Voicemail(${MACRO_EXTEN}.Macro(voicemail.Hangup() exten => s. con esto conseguiremos evitar problemas con las llamadas hacia números que comiencen con la tecla “#” como los móviles RPM por ejemplo.n. Macro(voicemail.conf.n.VoiceMail(${MACRO_EXTEN}@default.Dial(${ARG1}.html exten => s.1.1.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk. Vamos a editar el archivo de la ruta /etc/asterisk/features. Las características principales son las siguientes: Transferencia desatendida (blind transfer) Parqueo de llamadas (parking lot) Grupo para jalar llamadas (pickup group) Sala de conferencias (meetme) Para ello será necesario que editemos el archivo features.s.n.1.Dial(SIP/${ARG1}.1.n. en el ej.Hangup() exten => s. Un ejemplo mas avanzado he interesante de analizar es el siguiente: [macro-voicemail] exten => s. ASTERISK: FEATURES Podemos configurar algunas características adicionales en el archivo features.1) exten => s-BUSY.n.1) En esta ocasión estamos incluyendo el comando Goto y esto nos puede servir para reenviar la llamada hacia un menú por ejemplo donde el usuario llamante tenga mas de una opción.Macro(voicemail.Goto(incoming.b) exten => s..Voicemail(${MACRO_EXTEN}.10) exten => s.Hangup() [from-internal] exten => 1XX.${EXTEN}) Solo debemos tomar en cuenta que en esta ocasión estamos amarrados al protocolo SIP.n.VoiceMail(${MACRO_EXTEN}@default.1.1.u) exten => s.20) exten => s.${JOHN}) exten => 102.n(busy).u) exten => s-NOANSWER. TRANSFERENCIAS DESATENDIDA Normalmente por defecto la transferencia desatendida se realiza presionado el boton # Este tipo de transferencia consiste en derivar la llamada hacia otro anexo sin habernos cerciorado antes si la persona en la extensión destino se encuentra disponible para recibir la llamada.conf ubicado en la carpeta de asterisk.n.Macro(voicemail.GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => s.n.1) exten => _s-.blogspot.1. El siguiente grafico ilustrara mejor el proceso de comunicación 13 de 15 18/02/2015 13:23 .Goto(s-${DIALSTATUS}.Goto(s-NOANSWER.com/2009/08/dial-plan-features.s.1) exten => s-NOANSWER.b) exten => s.${JACK}) Incluso podemos simplificar una vez mas utilizando la variable ${EXTEN} [macro-voicemail] exten => s.n(busy).b) exten => s-BUSY.n(unavail).Goto(incoming.1. Anterior no importaba el tipo de canal utilizado ya que este se declaraba como variables globales.conf Donde buscaremos el parámetro blind transfer y cambiaremos el varo “#” por “##”.

o realizar alguna consulta). documento. Esta función consiste en aparcar una llamada en una extensión virtual dentro de nuestra central telefónica. por ejemplo *2 para simular la tecla flash PARQUEO DE LLAMADAS En algunas ocasiones durante una conversación telefónica es necesario movilizarnos ( para ir a conseguir un archivo. pero lamentablemente no es posible ni practico que todos los usuario cuenten con un anexo inalámbrico.com/2009/08/dial-plan-features. ejecutivos. El siguiente grafico nos ilustrara el proceso de comunicación.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk. de esta manera podremos recuperar esa llamada simplemente llamando a la extensión virtual creada en el momento que aparcamos la llamada Esta función se habilita en la sección [general] 14 de 15 18/02/2015 13:23 . Este tipo de transferencia suele ser necesario para trabajadores que no acostumbran contestar ni llamar directamente de su extensión. tales como funcionarios. gerentes.html Realizar una transferencia atendida. consiste en llamar al destino para confirmar la transferencia. antes de realizarla. Se puede habilitar una combinación para la transferencia atendida.blogspot. etc. en estos casos es ideal contar con la función de parqueo de llamadas.

com/2009/08/dial-plan-features. aquí definimos el rango de posiciones apra nuestro estacionamiento Context => parkedcalls. donde 1 es el número del grupo de llamada Pickupgroup=1. Parkingtime => 180. PICKUP GROUP Un Pick up group es un grupo conformado por extensiones con autorización para “jalarse” las llamadas. y llaman a una de ellas pero justo no se encuentra la persona en su extensión. entonces otra persona podrá contestar la llamadas desde su extensión (siempre que este dentro del mismo pickup group) con solo presionar: *8 Esta opción también se encuentra en la sección general y podemos definir o modificar el código por defecto *8 en el parámetro: Pickupexten = *8 Pero será necesario también que asignemos los grupos a cada extensión en el archivo sip. es decir. pero marcando previamente un código. Por ejemplo si tenemos dos extensiones en un mismo grupo. este será el tiempo máximo en segundos que una llamada se mantendrá en el estacionamiento.html Y cuenta con los siguientes parámetros: Parkext => 700 donde 700 es el numero de la extensión de entrada al estacionamiento Parkpos => 701-720. aquí definimos el nombre del contexto en para nuestro estacionamiento.Plantilla blogger por Blog and Web 15 de 15 18/02/2015 13:23 . El grupo puede asignarse mediante los parámetros: Callgroup=1.Centrales Asterisk: DIAL PLAN & FEATURES http://centralesasterisk. estas extensiones podrán contestar llamadas dirigidas hacia cualquier anexo de su grupo. donde 1 es el número del grupo para pickup | Entrada más reciente Página principal Entrada antigua Copyright emeese © 2008 Centrales Asterisk | Diseño de Arcsin Web Templates .conf.blogspot. no olvidar que este contexto debe estar incluido (include) en el contexto de las extensiones que queramos que puedan recuperar llamadas desde el estacionamiento.