Configuracion de Asterisk 1.6.X - Tercera parte - extensions.conf

Actualizado 08 Septiembre 2009

El archivo de configuración estensions.conf es seguramente el más importantes para la puesta en marcha de nuestra centralita. En él se define todo lo relacionado con el plan de llamadas. Cualquier numero marcado desde una extensión será procesado dentro de este archivo. Como el sip.conf está dividido en tres bloques:

  • la parte general donde se configuran algunos parámetros generales
  • la parte globals donde se definen las variables globales que se van a utilizar en la centralita
  • una ultima parte donde queda toda las configuración de las llamadas

Empezamos con la parte general

[general]
static=yes ; si static es yes y writeprotect es no, para guardar los cambios hechos desde la consola de asterisk tendremos que escribir el comando dialplan reload.
writeprotect=no ;  En caso contrario se actualizará automáticamente pero perderemos todos los comentarios presentes en el archivo
autofallthrough=yes ; si es yes cuando alguna llamada, por algún motivo se sale del plan se terminará
priorityjumping=yes ; Algunas aplicaciones y/o funciones tienen la capacidad, bajo algunas circunstancias de "saltar" desde la prioridad donde se encuentran a una prioridad que normalmente es n=+101 donde n es el numero de la línea que se está ejecutando. (ya veremos más adelante que significa prioridad y que son esos números). Si está en yes hará ese salto sino no.

[globals]
SUP = SIP/2100
FUL = SIP/0057310000000
JUST = SIP/justvoip

En Globals configuramos las variables que queremos usar en el dialplan, por ejemplo si llamamos a menudo un numero y queremos configurarlo con una sigla o un nombre es en esta parte del archivo que lo podemos hacer. Puse tres líneas para presentar tres casos distintos. Para llamar la extensión 2100 (configurada en sip.conf) podré usar la variable SUP, si llamo a menudo el numero de celular de mi amigo fulano en vez de poner el numero por extenso podré indicar la variable FUL; para concluir si para las llamadas uso el proveedor Justvoip podré usar la variable JUST.

En la tercera parte es donde vamos a configurar el verdadero dialplan. El dialplan se compone de contextos y dentro de cada contexto, extensiones y prioridades. Podemos, para empezar, definir dos contextos, uno para las llamadas internas y otro para las llamadas externas.

[internas] ; esta etiqueta indica que todo lo que aparecerá a partir de esta línea se considerará perteneciente al contexto internas

exten => 123,1,Aswer()

todas las líneas de configuración están estructuradas de la siguiente manera. exten => en cada línea. 123 es el numero de extensión (cuando marcaremos este numero desde nuestros teléfonos IP, hardware o software, asterisk procesará la llamada empezando por esta línea). 1 es la prioridad. Asterisk procesa las líneas secuencialmente, del numero más bajo al más alto. Aswer es la aplicación que permite contestar la llamada. Seguimos

exten => 123, 2,Playback(hello-world)

esta es la segunda línea que será procesada. 123 la misma extensión de la primera línea, 2 es la prioridad (progresiva). Playback es la aplicación que le permite a asterisk de enviar el contenido audio de un archivo; en este caso el archivo audio es hellp-world que hace parte de las locuciones que vienen con la centralita.

exten => 123,3,Hangup

esta es la tercera línea. 123 la extensión , 3 la prioridad, Hangup la aplicación que sirve para colgar una llamada.

Si llamamos el numero 123, asterisk abrirá un canal para la llamada (Answer), escucharemos una voz diciendo Hello World y luego la centralita colgará.

[internas]
exten => 123,1,Answer()
exten => 123,2,Playback(hello-world)
exten => 123,3,Hangup()

Podemos también escribirlo así

[internas]
exten => 123,1,Answer()
exten => 123,n,Playback(hello-world)
exten => 123,n,Hangup()

En la segunda y tercera línea en el numero de la prioridad aparece una n La n significa next y sirve para no tener que escribir en cada línea el numero progresivo de la prioridad. Esto es muy cómodo cuando se modifica el dialplan porque cuando vamos a insertar una línea no tendremos que renumerar todas las demas.

Ahora vamos a definir un contexto muy sencillo para las llamadas externas

[externas]

exten => _0057.,1,Dial(${JUST}/${EXTEN})

la primera línea le dice a asterisk que para todos los numero marcados que empiecen por 0057 deberá usar esta parte del dialplan. El _ se pone cuando no indicamos el numero exacto sino solamente una parte. El . indica que después del 0057 pueden haber cualquier numero de cifras. Dial es la aplicación que se utiliza para  hacer una llamada. En otro articulo explicaremos de forma más detallada las variables y opciones que usa esta aplicación. Por ahora nos interesa saber que ${JUST} es la variable que configuramos en globals y corresponde a SIP/justvoip, es decir nuestro proveedor de llamadas VoIP. ${EXTEN} es una variable interna de asterisk donde la centralita guarda el numero que se está llamando.

exten => _0057.,n,Playback(all-outgoing-lines-unavailable)

si por algún motivo la llamada no va a buen fin, se procesará la segunda línea donde escucharemos un voz que nos dirá que todas las líneas están ocupadas o no disponibles

exten => _0057.,n,Hangup()

Con la tercera línea la llamada se terminará

Ahora podemos definir dos contextos más, uno para las extensiones que tienen acceso a las líneas externas y uno para aquellas que solo pueden hacer llamadas internas. Estos contextos hay que definirlos en la configuración de cada extensión (vease sip.conf) para decidir quienes tienen acceso a que.

[solo-internas]

include => internas

Con esto le decimos a asterisk que todas las extensiones configuradas con el contexto solo-internas tendrán acceso solo a la parte del dialplan contenido bajo la etiqueta [internas]

[todas]

include => internas

include => externas

con estas líneas le decimos a asterisk que todas las extensiones configuradas con el contexto todas tendrán acceso a los contextos del dialplan [internas] y [externas]

Como se puede entender esto es muy útil porque a través de los contextos podemos crear grupos distintos de extensiones y hasta grupos cerrados de usuarios, es decir grupos donde las extensiones solo se puedan llamar entre ellas.

Resumiendo, nuestro dialplan será:

[general]
static=yes 
writeprotect=no 
autofallthrough=yes 
priorityjumping=yes

[globals]
SUP = SIP/2100
FUL = SIP/0057310000000
JUST = SIP/justvoip

[internas]
exten => 123,1,Answer()
exten => 123,2,Playback(hello-world)
exten => 123,3,Hangup()

[externas]
exten => _00573.,1,Dial(${JUST}/${EXTEN})
exten => _00573.,n,Playback(all-outgoing-lines-unavailable)
exten => _00573.,n,Hangup()

[solo-internas]
include => internas

[todas]
include => internas
include => externas

Para actualizar la configuración entramos en nuestra consola

asterisk -rvvvvvvvvvv

y escribimos el comando

CLI> dialplan reload

para tener una idea de los comandos que podemos usar con el dialplan podemos escribir:

CLI> help dialplan

dialplan add extension Add new extension into context
        dialplan add ignorepat Add new ignore pattern
          dialplan add include Include context in other context
               dialplan reload Reload extensions and *only* extensions
     dialplan remove extension Remove a specified extension
     dialplan remove ignorepat Remove ignore pattern from context
       dialplan remove include Remove a specified include from context
dialplan set extenpatternmatch Use the Old extension pattern matching algorithm.
dialplan set extenpatternmatch Use the New extension pattern matching algorithm.
                 dialplan show Show dialplan

Espero no haberme enredado demasiado. Sugerencias?

Hasta la proxima

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

12 comentarios

Bastante claro

Para nada enredado. Andaba buscando una explicación básica y sencilla del archivo extensions.conf de asterisk y aquí la encontré. Muchas gracias.

Inconveniente en el dialplan

Holas, me parece excelente esta comunidad, he aprendido varias cosas =).

tengo un pequeño problema con el dialplan, cuando marco un numero que no esta declarado en el Sip.conf ni en el extensions.conf sale una voz diciendo " The person you are calling is unavailable, please try again" , las voces esta en español, es el unico mensaje que me sale en ingles, no estoy seguro si es del asterisk o del X-lite, si podrian ayudarme estaria muy agradecido.

A mi me queda una duda.

Hola, me queda casi todo claro, solo me pregunto si debo declarar cada extencion en este archivo?, me refiero si tengo 100 anexos, debo hacer 100 declaraciones?, he visto en algunas configuraciones que no es asi, se usa algun tipo de variable que toma todas las extenciones y les da un procedimiento a seguir, sin tenet que declararla una por una. Es asi o no he entedido bien?

Saludos y gracias, muy buena la pagina.

Re: duda

Tienes toda la razón. Es posible utilizar los que en ingles llaman "Pattern-matching":

X - puede ser un numero entre 0 y 9

Z - un numero entre 1 y 9

N - un numero entre 2 y 9

Por ejemplo. si tienes 200 extensiones y van de 101 a 299 puedes utilizar:

exten => _[12]XZ,1,NoOp

[12] indica que el primer digito debe ser un 1 o un 2

etcetera.

Saludos

Buenas, sigo teniendo un

Buenas, sigo teniendo un inconveniente con los anexos, al llamar (softphone)a uno no declarado hay alguna manera de que devuleva un mensaje de no existe, pongo mi pequeño codigo es solo en lan, un pequeño proyecto universitario, gracias de antemano.

[interno]
exten=>_2[1-5]XX,1,Macro(marcador,SIP/${EXTEN})
[macro-marcador]
exten=>s,1,Dial(${ARG1}|30|TtKk)
exten=>s,n,VoiceMail(${MACRO_EXTEN}|u)
exten=>s n,Hangup()

ayuda con dialplan para poder utilizar el ht503 como trunk

buenos noches,
ya he configurado asterisk bien siguiendo las guías de esta pagina, tengo un ht503 el cual quiero utilizar como sip trunk, ya he creado la configuración en el sip.conf, he hecho la configuración del ht503 y se registra, las llamadas entrantes las pasa a una determinada extensión, pero el problema viene cuando quiero utilizar la linea que esta conectada a el, no se como realizar el dialplan para que las llamadas salgan, lo máximo que he logrado es que al marcar la extensión que tiene configurada el fxo me de tono de marcado como para marcar el siguiente numero, pero marco números y no hace nada.
en el contexto de configuración el ht503 donde esta conectada la linea esta conectado al asterisk utilizando Internet osea no están en la misma red.

de antemano gracias con la ayuda

problema solucionado

el dialplan como lo tenia la primera vez estaba bien, me faltba eran unas caracteristicas al momento de crear el trunk.
de todas formas gracias de antemano, dejo la configuracion por si otra persona la necesita.

en sip.conf

[ht503-fxo]
type=friend
secret=elpassword
qualify=yes
nat=yes
host=dynamic
directmedia=no
context=ht503
dtmfmode=rfc2833
language=es
;callerid=numero teléfono ; esta linea la comente ya que estando activa las llamadas entrantes me salen con el numero puesto aqui, sin ella sale el caller id de la persona que llama
allowtransfer=yes
allowsubscribe=yes
subscribecontext=subscribe
callcounter=yes
disallow=all
allow=ulaw
allow=g729

extensions.conf

en mi caso, como la linea es un celular tengo este dialplan, y al marcar un numero celular en Colombia que empiezan por el numero 3 y tienen 10 dígitos la llamada va directamente por ese canal

[ht503]

exten => _3XXNXXXXXX,1,Dial(SIP/ht503-fxo,45,D(${EXTEN}))
exten => _3XXNXXXXXX,2,Playback(all-outgoing-lines-unavailable)
exten => _3XXNXXXXXX,3,Hangup()

y en el contexto para las llamadas entrantes adicione esta linea

exten => 200,1,Dial(SIP/200,30)
exten => 200,n,Hangup

para que las llamadas entrantes vayan a la extensión 200 de mi asterisk

Consulta forw PSTN

Hola amigos, excelente material el que ustedes ponen a disposición de los visitantes. Me gustaría hacer una consulta con respecto al código publicado, ¿De que manera tendría que modificarlo, para poder transferir de forma automática todas las llamadas que llegan desde el PSTN?

Gracias de antemano.

Saludos desde Chile.

Suscribirse a Comentarios de "Configuracion de Asterisk 1.6.X - Tercera parte - extensions.conf" Suscribirse a VozToVoice - Todos los comentarios