Traza: » asterisk_configuracion_capi.conf » asterisk_configuracion_cdr_mysql.conf » asterisk_configuracion_cdr_odbc.conf » asterisk_configuracion_cdr_pgsql.conf » asterisk_configuracion_dnsmgr.conf » asterisk_configuracion_dundi.conf » asterisk_configuracion_enum.conf » asterisk_configuracion_enumagi.conf » asterisk_configuracion_extensions.ael » asterisk_configuracion_extensions.conf
¡Actualmente no estás identificado! Introduce abajo tus datos de identificación para abrir una sesión. Necesitas tener las cookies activadas para identificarte.
Has olvidado tu contraseña? Obten una nueva.: Enviar nueva contraseña
El archivo de configuración “extensions.conf” contiene el dialplan del asterisk, el plan maestro de control o de flujo de ejecución para todas las operaciones. Controla cómo se manejan y se encaminan las llamadas entrantes y salientes. Aquí es donde configuras el comportamiento de todas las conexiones con tu PBX.
El contenido del “extensions.conf” se organiza en secciones, que pueden ser tanto para seteos estáticos y definiciones, o para los componentes ejecutables del dialplan a los cuales nos referimos con el nombre de contextos. Las secciones de seteos son general y globals y los nombres de los contextos son definidos enteramente por el administrador de sistema. Un tipo especial de contextos son las macros, identificados por un nombre definido por el usario el cual tiene como prefijo macro-. Éstos son patrones reutilizables de ejecución, como los procedimientos en un lenguaje de programación. Cada sección del extensions.conf comienza con el nombre de la secciones contenida dentro de corchetes. Esto da al archivo extensions.conf una estructura similar al formato tradicional del archivo .ini del mundo de Windows.
Planeamiento del Dialplan de Asterisk - discusión general sobre la organización del dialplan
Nuevo en Asterisk v1.2: Por defecto, hay una nueva opción llamada “autofallthrough” en el extensions.conf que viene seteada en yes. El comportamiento de asterisk 1.0 (y anteriores) era esperar que una extensión se marcará después de que no hubiera mas extensiones que ejecutar. El “autofallthrough” cambia este comportamiento de modo que la llamada sea terminada inmediatamente con BUSY, CONGESTION, o HANGUP basado en la mejor conjetura por Asterisk. Si estás escribiendo una extensión para IVR, debes utilizar la funcion WaitExten si el “autofallthrough” se setea en “yes”.
[general]
Al principio de tu archivo extensions.conf, configuras algunos ajustes generales en la sección llamada [general]. Para mas detalles, ver:
[globals]
Después, en la sección [globals], puedes definir variables globales (o constantes) y sus valores iniciales. Para mas detalles, ver:
Contextos y extensiones
Después de [general] y de la categoría [globals], el resto del archivo extensions.conf es utilizado para la definición del Dialplan. El Dialplan consiste en una colección de contextos. Cada contexto consiste en una colección de extensiones. Para una introducción a estos asuntos, ver:
Patrones de la extensión
Cuando defines las extensiones dentro de un contexto, puedes no sólo utilizar números literales, no sólo nombres alfanuméricos, pero también puedes definir extensiones que matchean sets enteros de números marcados usando patrones de extensión. Para más información sobre esto, ver:
Un contexto de puede incluir el contenido de otro contexto. Por ejemplo, considere los siguientes contextos:
Context "default":
Extension Descripcion
101 Marcos
102 Willy
0 Operador
Context "local":
Extension Descripcion
_4NXXXXXXX Llamadas locales
include => "default"
Context "longdistance":
Extension Descripcion
_0NXXNXXXXXX Llamadas larga distancia
include => "local"
Aquí hemos definido tres extensiones:
Usando contextos, puedes controlar cuidadosamente quién tiene acceso a los distintos servicios.
Si más de un patrón coincide con un número marcado, el Asterisk puede no utilizar el que esperas. Ver
Orden de los patrones de extensiones
Cuando el Asterisk recibe una conexión entrante en un canal, Asterisk mira el contexto definido para ese canal buscando funciones que le digan que debe hacer. El contexto define diversos sets de funciones dependiendo de qué extensión haya sido marcada por el usuario. Por ejemplo, un contexto pudo proporcionar un set de funciones para hacer si el usuario marca “123”, y otro set de funciones para que qué haga si el usuario marca “9”, y otro set de funciones para que qué haga si el usuario marca cualquier número que comienze con “555”.
Para algunas clases de conexiones - como llamadas entrantes desde una línea telefónica externa - el usuario no ha marcado ninguna extensión. En ese caso, el Asterisk se comporta como si el usuario hubiera marcado una extensión especial llamada “s” (start). El Asterisk buscará una extensión “número” s en la definición del contexto para ese canal por instrucciones sobre lo que debe hacer para manejar la llamada.
Digamos, por ejemplo, que tienes un canal “Zap/1” que es una conexión a un teléfono fijo en tu edificio. Y digamos que en el archivo de configuración para los canales Zap (zapata.conf), has definido el context=Juan para el canal Zap 1. Cuando utilizas ese teléfono para marcar un número, el asterisk busca un contexto con el nombre “Juan” en el extensions.conf para saber lo que debe hacer. Comienzas la definición de un contexto en el extensions.conf poniendo el nombre del contexto entre corchetes en una línea, de esta forma:
[Juan]
Para cada contexto, necesitas definir unas o más extensiones que Asterisk utiliza para comparar contra el número marcado. Para cada extensión, se le dice al Asterisk qué hacer mediante una lista de comandos.
Una extensión puede ser uno de dos tipos: un literal o un patrón.
Una extensión literal puede ser un número, como 123, y puede también contener los símbolos estándar * y # que aparecen en los teléfonos ordinarios, así que 12#89* es una extensión válida. Algunos teclados numéricos de teléfono tienen teclas especiales de DTMF etiquetadas A, B, C y D, y las extensiones se pueden definir con estas letras también. De hecho, el nombre de una extensión puede contener cualquier letra o numero así como algunos signos de puntuación. Observese que muchos teléfonos VOIP pueden marcar “numeros” de extensión que pueden ser cualquier string de texto arbitrario, tal como “oficina”. Esta perfectamente permitido definir una extensión con el nombre “oficina” en Asterisk.
¿Son los nombres de extensiones sensibles a mayúsculas? Bien, son y no son. Son sensibles en el sentido que cuando el Asterisk está intentando machear la extensión que un usuario marcó con las extensiones definidas para un contexto, la extensión debe machear exactamente. Así que si un usuario marca la extensión “OFICINA” en su teléfono VOIP, el asterisk no comenzará a ejecutar los comandos que has definido para una extensión llamada “oficina”. Por otra parte, los nombres de extensión no son sensibles a mayusculas en el sentido que no puedes definir diversas extensiones (en el mismo contexto) que tengan los mismos nombres diferenciados solamente en las mayúsculas. No puedes definir un set de comandos para la extensión “oficina” y otro set de comandos para la extensión “OFICINA”.
El Asterisk utiliza algunos nombres de extensión para propósitos especiales:
Ver las extensiones estandar de Asterisk para mas detalles.
A diferencia de una PBX tradicional, donde las extensiones se asocian a teléfonos, interfaces, menús, y así sucesivamente, en Asterisk una extensión se define mediante una lista de comandos a ejecutar. Los comandos se ejecutan generalmente en el orden definido por su “prioridad”, pero algunos comandos, tales como los comandos Dial y GotoIf, tienen la capacidad de redireccionarse a alguna otra parte, basado en ciertas condiciones.
Cuando se marca una extensión, el comando marcado con prioridad de 1 es ejecutado, seguido por el comando con prioridad 2, y así sucesivamente. Esto continua asi hasta que:
En la sintaxis del archivo extensions.conf, cada paso de la ejecución en una extensión se escribe en este formato:
exten = extensión, prioridad, comando (los parámetros)
donde el signo igual se puede representar como flecha, es decir, “⇒“, una forma vista más a menudo en muchos ejemplos.
Ok, entonces un “contexto” tiene un nombre, como “Juan”. Y en cada contexto, puedes definir una o más “extensiones”. Para cada extensión, defines un sistema de comandos. ¿Cómo defines estas extensiones y los comandos para manejarlas? Necesitas editar el archivo extensions.conf con un editor de textos. Sin embargo, hay algunas herramientas disponibles para ayudarte: Herramientas Gráficas.
Los componentes de un comando de ejecución de una extensión son los siguientes:
Nota: Strings de texto se pueden también utilizar en lugar de prioridades numéricas en situaciones especiales (véa las extensiones estándar de Asterisk).
exten => 1234,1,Answer exten => 1234,2,Playback(tt-weasels) exten => 1234,3,Voicemail(44) exten => 1234,4,Hangup
Ésta es la definición de una sola extensión con el nombre “1234”. Cuando una llamada se hace a la extensión 1234, el Asterisk contestará la llamada (Answer), reproducirá un archivo de sonido llamado “tt-weasels”, da ra al usuario la oportunidad de dejar un mensaje de voicemail para la casilla 44, y entonces cortara (Hangup).
Observese que al Asterisk no le importa el orden en el cual pones las líneas en el archivo extensions.conf. Podrías mezclar las líneas en diverso orden, como este ejemplo siguiente, y no habria ninguna diferencia porque el Asterisk utiliza la prioridad de cada línea para determinar el orden de la ejecución:
exten => 1234,4,Hangup exten => 1234,1,Answer exten => 1234,3,Voicemail(44) exten => 1234,2,Playback(tt-weasels)
Otras opciones para definir extensiones incluyen una opción designada comúnmente como la lógica de la ex-novia. Esta lógica macheara la extensión marcada, halla venido del exterior o del interior, basada en el callerid de la persona que llama. Por ejemplo:
exten => 1234/100,1,Answer() exten => 1234/100,2,Playback(tt-weasels) exten => 1234/100,3,Voicemail(123) exten => 1234/100,4,Hangup()
Esto macheara la extensión 1234 y realizará las opciones siguientes SOLAMENTE si el número de callerid del usuario que llama es 100. Esto se puede también lograr mediante patrones, como vemos abajo:
exten => 1234/_256NXXXXXX,1,Answer() y así sucesivamente...
Esto macheara solamente con 1234 si el número de identificación de llamada es algo que comienze con 256.
Hasta puedes hacer esto:
exten => s,1,Answer exten => s/9184238080,2,Set(CALLERID(name)=ALGUIEN QUE ODIO) exten => s,2,Set(CALLERID(name)=Buena Persona) exten => s,3,Dial(SIP/buenapersona)
La llamada entra, en 2 filtras a la gente que no te cae bien, todos los demas pasan y en 3 todos siguen en la trayectoria principal.
Sintaxis para definir un contexto: las palabras clave son exten, include, ignorepat y switch.
Una de las desventajas de este método de almacenar la información de la extensión es que si necesitas insertar o suprimir una prioridad, hay que numerar manualmente todos los números después de él y toda etiqueta referente a ellos.
Desde Asterisk 1.2 existe una nueva manera de resolver esto. Numerar la primer prioridad y “nombrar” las prioridades siguientes con “n”. Ver prioridades del Asterisk para mas detalles!
Hay soporte para usar variables usando la construcción del tipo ${NOMBREDEVARIABLE}. Puedes también utilizar expresiones con la construcción del tipo $[EXPRESIÓN], donde las expresiones pueden ser expresiones regulares, comparaciones, suma, resta y mucho más. Ver variables del Asterisk para las variables estándares y readme.variables para una explicación de las expresiones.
Para más información sobre como usar variables globales y variables de canal en el extensions.conf, vea
Nuevas en la version 1.2 son las funciones del dialplan, consideran
Si deseas recargar el dialplan después de hacer cambios, sin la recarga de todos los modulos de configuración del Asterisk, utiliza el comando “extensions reload”.
Con la declaración #include <archivo> en el extensions.conf, otros archivos pueden ser incluidos. De esta manera puedes crear un sistema donde el archivo extensions.conf es el principal, users.conf contiene a tus usuarios locales, services.conf contienes varios servicios, como conferencias. De esta forma, el dialplan es más fácil de mantener, dependiendo del tamaño de tu sistema. La declaración #include <archivo> no es lo mismo que la declaración include <contexto>. La declaración #include funciona en todos los archivos de configuración del Asterisk.
Reenvio a otro Asterisk
Sintaxis:
[iaxprovider] switch => IAX2/user:[key]@server/context
Especifica el reenvio a otro servidor. El usuario y la clave necesitan ser definido en el archivo iax.conf del servidor al que se llama. context es un contexto dentro del extensions.conf del servidor que es llamado.
Ejemplo de un archivo extensions.conf usando la declaración #include
#include "mi-archivo-de-configuracion-extra" [globals] ALL=Zap/1&SIP/1000&SIP/1001 [default] exten => s,1,Answer exten => s,2,Playback(welcome-message) exten => s,3,Goto(context-in-include-file,s,1) ; ve al contexto definido en el archivo incluido : :
Usando una macro para crear extensiones
[globals]
PHONE1=Zap/1
PHONE2=SIP/6002
[macro-oneline]
exten => s,1,Dial(${ARG1},20,t)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,3,Hangup
exten => s,102,Voicemail(b${MACRO_EXTEN})
exten => s,103,Hangup
[local]
exten => 6601,1,Macro(oneline,${PHONE1})
exten => 6602,1,Macro(oneline,${PHONE2})