Voip en Español

[[asterisk_configuracion_extensions.conf]]

Traza: » asterisk_configuracion_extensions.conf

Login

¡Actualmente no estás identificado! Introduce abajo tus datos de identificación para abrir una sesión. Necesitas tener las cookies activadas para identificarte.

Ingresar

Has olvidado tu contraseña? Obten una nueva.: Enviar nueva contraseña

Configuración del Extensions.conf

El Dialplan de Asterisk

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:

Inclusión de contextos:

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:

  • El contexto default permite marcar tres extensiones de teléfono: Marcos, Willy, y Operador.
  • El contexto local tiene un patrón de extensiones para permitir marcar solamente números de 8 dígitos (llamadas locales), y también incluye al contexto “default”, permitiendo así que un usuario pueda llamar a Marcos, a Willy, o a Operador.
  • El contexto long distance tiene un patrón de extensiones que permite hacer una llamada interurbana, y también incluye al contexto local, permitiendo así que el usuario haga llamadas locales y también pueda llamar a Marcos, Willy o a Operador.

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.

Extensiones

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”.

Nombres predefinidos de extensión

El Asterisk utiliza algunos nombres de extensión para propósitos especiales:

  • i: Inválido
  • s: Start
  • h: Hangup
  • t: Timeout
  • T: Timeout Absoluto
  • o: Operador

Ver las extensiones estandar de Asterisk para mas detalles.

Definir extensiones

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:

  • la llamada termina (hangup),
  • un comando retorna un código de resultado -1 (indicando falla),
  • un comando con prioridad más alta no existe (nota: Asterisk “no saltará prioridades que falten”), o
  • la llamada se rutea a una nueva extensión.

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:

  • la extensión es el nombre de la extensión, y puede ser una secuencia constante literal (alfanumérica más algunos símbolos especiales permitidos) o un patrón evaluado dinámicamente (véase abajo) para machear muchos números de teléfonos posibles, por ejemplo. Cada línea de comando que es parte de dicha extensión tiene el mismo nombre.
  • la prioridad es generalmente un número entero (véase la nota). Es solo un número de secuencia para cada línea de comando de una extensión. El primer comando ejecutable de la extension tiene la prioridad “1”, así que cuando el Asterisk transfiere una llamada a una extensión, buscará un comando con la prioridad 1. Si no hay una línea con una prioridad de 1, entonces la extensión no macheara con el número marcado. Después de ejecutar el comando con la prioridad 1, el Asterisk incrementará la prioridad a “2” a menos que el comando en sí mismo determine la prioridad siguiente que se ejecutará. Si esta prioridad siguiente no se define en la extensión, el Asterisk termina el procesamiento de esta extensión, aun cuando exista otro comando con una prioridad más alta que la que falta.

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).

  • “comando” es el nombre de la función (también llamado “aplicacion”) a ejecutarse. Ver la lista de funciones de Asterisk.
  • los “parámetros” dependen del comando. Algunos comandos no toman ningún parámetro, en este caso puedes omitir los paréntesis.

Ejemplo

 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!

Variables y expresiones

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

Recargando

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”.

¿Un archivo grande o varios pequeños?

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.

Controlando el extensions.conf desde afuera

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
:
: 

Ejemplos

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}) 

Vea también

  • AEL: La lengua de extensiones del Asterisk
  • AEL2: La lengua v2 de la extensión del asterisco.