ban

Configuración del archivo extensions.conf (DialPlan)

Configuración del archivo extensions.conf (DialPlan)


El archivo extensions.conf es el más importante del Asterisk y tiene como misión principal definir el dialplan o plan de numeración que seguirá la centralita para cada contexto y por tanto para cada usuario.

El fichero extensions.conf se compone de secciones o contextos entre corchetes []
Hay dos contextos especiales que están siempre presentes que son [general] y [globals]

Contexto [general]
El contexto [general] configura unas pocas opciones generales como son:

- static : Indica si se ha de hacer caso a un comando "save dialplan" desde la consola. Por defecto es "yes". Funciona en conjunto con "writeprotect"
- writeprotect : Si writeprotect=no y static=yes se permite ejecutar un comando "save dialplan" desde la consola. El valor por defecto es " no" .
- autofallthrough : Si está activado y una extensión se queda sin cosas que hacer termina la llamada con BUSY, CONGESTION o HANGUP Si no está activada se queda esperando otra extensión. Nunca debería suceder que una extensión se quede sin cosas que hacer como explicaremos posteriormente.
- clearglobalvars : Si está activado se liberan las variables globales cuando se recargan las extensiones o se reinicia Asterisk.
- priorityjumping : Si tiene valor 'yes', la aplicación soporta 'jumping' o salto a diferentes prioridades. En desuso

En general estas opciones no son muy importantes y se pueden dejar tal y como aparecen por defecto.

Contexto [globals]
En este contexto se definen las variables globales que se van a poder utilizar en el resto de los contextos. Por ejemplo

CONSOLE=Console/dsp ;indica que cuando hagamos referencia a la variable CONSOLE estamos llamando a /Console/dsp

Las variables suelen ponerse siempre en mayusculas para diferenciarlas posteriormente.

Resto de Contextos []

Esto es lo más importente de este fichero. Vamos a indicar ahora como crear un contexto especifico y asignar un plan de numeración. Todas las lineas de un determinado contexto tienen el mismo formato:

exten => extension , prioridad, Comando(parametros)

La extensión hace referencia al numero marcado
La prioridad al orden en que se ejecutan las instrucciones. Primero se ejecuta la de prioridad 1, luego la 2 y sucesivamente
El Comando hace referencia a la acción a ejecutar

Vamos a ir viendo unos ejemplos para ir aprendiendo los comandos

Ejemplo 1: Colgar la linea
exten => 333,1,Hangup ; indica que cuando alguien llame al 333 saltará la prioridad 1 y el sistema colgará la llamada

Ejemplo 2 : Llamar a el usuario SIP 3000 y que salte el contestador si no contesta
exten => 3000,1,Dial(SIP/3000,30,Ttm) ; intenta llamar al usuario 3000 de sip que tiene que estar definido en sip.conf con ese contexto
exten => 3000,2,Hangup ; cuando acaba la llamada cuelga
exten => 3000,102,Voicemail(3000) ; La prioridad 102 significa que el usuario no estaba conectado y salta el contestador al buzon 3000
exten => 3000,103,Hangup ; se cuelga después de dejar el mensaje

En este caso al llamar a la extension 3000 usuamos el comando Dial (destino, tiempo de timeout, opciones)
El destino es el usuario 3000 del archivo sip.conf, 30 segundos de timeout. El usuario 3000 deberia existir en sip.conf
las opciones hacen referencia a opciones del comando dial:
la "T" permite al usuario llamante transferir la llamada pulsando #
la "t" permite al usuario llamado transferir la llamada pulsando #
la "m" indica que vamos a oir una musica especial mientras esperamos a que el otro conteste: Podeís probar a quitarla.

Si el usuario 3000 no está conectado salta a la prioridad +101 (en nuestro caso a la 102=1+101 ya que estabamos en la prioridad 1) y hacemos que salte el contestador para dejar un mensaje.

Es importante que por cada rama siempre se cierre el camino y se cuelgue la llamada con un Hangup

Ejemplo 3 : Comprobación de latencia y eco
exten => 600,1,Playback(demo-echotest) ; Se pone el sonido de que es una demo de eco
exten => 600,2,Echo ; Se ejecuta el test de eco
exten => 600,3,Playback(demo-echodone) ; Se repite lo que dijimos
exten => 600,4,Hangup ; Se cuelga

En este caso llamando al 600 nos va a repetir lo mismo que nosotros dijimos. Podremos comprobar la latencia del sistema.

Ejemplo 4 : Extensión start

exten => s,1,Wait,1 ; Esperamos un segundo
exten => s,2,Answer ; respondemos. EL Asterisk coge la llamada
exten => s,3,DigitTimeout,5 ; Ponemos Digit Timeout a 5 segundos
exten => s,4,ResponseTimeout,10 ; Ponemos Response Timeout a 10 segundos
exten => s,5,BackGround(demo-congrats) ; Ejecutamos un archivo de voz
exten => s,6,hangup ; Colgamos
exten => 1000,1,Goto(micontexto,s,1) ; Al llamar al 1000 vamos a la extensión s con prioridad 1 del contexto "micontexto"

En este caso presentamos la extensión start s que es la que coge las llamadas cuando se esta en ese contexto pero no se sabe la extensión. También se puede entrar desde otra extensión como en este caso marcando la extensión 1000. Con Goto podemos ir al contexto, extensión y prioridad que queramos.

Ejemplo 5 : LLamar a un proveedor de Voz IP

exten => _340.,1,Dial(SIP/${EXTEN:3}@Proveedorsip,90,Tt)
exten => _340.,2,hangup ; Colgamos

exten => _20.,1,Dial(SIP/${EXTEN:2}@Proveedorsip,90,Tt)
exten => _20.,2,hangup ; Colgamos


En este caso lo que hacemos es que siempre que marquemos el 340 seguido de cualquier numero (el 340 como perfijo) llamaremos a una extension SIP. Por ejemplo en el primer caso si marcamos al 340600600 llamaremos al 600600 a la dirección IP del "proveedorsip" definido en sip.conf. (EXTEN:3 significa que quitamos los tres primeros numeros)

En el segundo caso si marcamos 2060600 también estaremos llamando al mismo numero 600600 del "proveedorsip" (EXTEN:2)

En los casos anteriores el . sustituye a cualquier caracter pero podíamos haber utilizado también
X - Acepta un numero de 0 al 9
Z - Acepta un numero de 1 al 9
N - Acepta un numero de 2 al 9
[1,5-7] - Acepta el 1, el 5, el 6 o el 7

exten => _20XX,1,Dial(SIP/${EXTEN:2}@Proveedorsip,90,Tt) ; Deberiamos marcar 20 y dos numeros (no valen caracteres)
exten => _20ZZ.,1,Dial(SIP/${EXTEN:2}@Proveedorsip,90,Tt) ; Deberiamos marcar 20, dos numeros del 1 al 9 y cualquier cosa
exten => _20[1-3]..,1,Dial(SIP/${EXTEN:2}@Proveedorsip,90,Tt) ; Deberiamos marcar 20, un numero del 1 al 3 y cualquier cosa

0 comentarios:

Publicar un comentario