You are on page 1of 17

Asterisk

Configuracin
Manejo de variables
condicionales

Variables

En el dialplan de Asterisk existen variables, que


pueden ser modificadas por el propio Asterisk en su
ejecucin lgica o por comandos expresos
(aplicaciones) del dialplan.
Las variables reducen la escritura, agregan
claridad al dialplan y le aportan lgica.
Los tipos de variables son:
Globales: declaradas en extensions.conf (o por
comando).
Canal: asociadas con un canal particular.
Entorno: variables de entorno (UNIX Like).
La sintaxis de una variable es:
Julin Dunayevich, Lzaro Baca,
${variable}
Andrs Brassara, Santiago Alberch,
Antonio Lobo

Manejo de variables
Asignacin

de variables:

Set(Variable=valor)
Global(Variable=valor)

Manejo de cadenas:
Subcadenas:

${Variable : offset : longitud }

Devuelve

la subcadena de variable que comienza


en offset y con la longitud especificada.
Ejemplos:
${123456789:2:3} devuelve 345
Longitud:

${LEN(Variable)}
Concatenacin: ${Variable1}${Variable2}
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

Variables globales

Permite que se pueda hacer referencia a ellas en


todos los contextos, en todas las extensiones, a
diferencia de las variables convencionales que
slo tienen validez en el canal actual.
Es til para tener claridad manejabilidad en el
dialplan.
Se pueden definir en el contexto [globals] al inicio
de extensions.conf
[globals]
JUAN=SIP/juan
PEPE=IAX2/pepe
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

Agregar variables al dialplan


[globals]
JUAN=SIP/juan
; define la variable JUAN
PEPE=IAX2/pepe
[internos]
exten => 1000,1,Answer( )
exten => 1000,n,Background(vm-enter-num-to-call)
exten => 1001,1,Answer()
exten => 1001,n(LlamaJ),Dial(${JUAN},10)
exten => 1001,n,Playback(vm-nobodyavail)
exten => 1001,n,Hangup()
exten => 1001,LlamaJ+101,Playback(tt-allbusy)
exten => 1001,n,Hangup()
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

Agregar variables al dialplan


exten => 1002,1,Answer()
exten => 1002,n(LlamaP),Dial(${PEPE},10)
exten => 1002,n,Playback(vm-nobodyavail)
exten => 1002,n,Hangup()
exten => 1002,llamaP+101,Playback(tt-allbusy)
exten => 1002,n,Hangup()
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(1002,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup()
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

Variables de canal definidas automticamente

Listado de variables ms importantes:


${CALLERID}:

caller ID actual, nombre y nmero.


${CONTEXT}: contexto actual.
${EXTEN}: extensin actual.
${CHANNEL}: canal actual.
${DIALSTATUS}: estado de la llamada: unavailable,
congestion, busy, noanswer, answer, cancel, hangup.
${DATETIME}: hora actual.

Un comando til para ver el contenido es NoOp:


NoOp

( ${VARIABLE} )

Mostrar en el CLI el valor.


Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

Variable ${EXTEN}
Permite

saber cul es la extensin que fue


marcada.
Se utiliza comunmente para eliminar dgitos
marcados: ${EXTEN:x}
Si x es positivo, quita los primeros x dgitos
marcados
Si x es negativo, devuelve los ltimos x dgitos
marcados
Exten => _XXXXX,1,Answer()
exten => _XXXXX,n,SayDigits(${EXTEN:1})
exten => _XXXXX,n,SayDigits(${EXTEN:-1})
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

Patrones

Se utilizan principalmente para llamadas salientes.


Comienzan con el signo _
Le dicen a Asterisk que haga match con un patrn y no con un nmero de
extensin.
X. Hace match con cualquier dgito de 0 a 9.
Z Hace match con cualquier dgito de 1 a 9.
N Hace match con cualquier dgito del 2 al 9.
[15-7] Hace match con el rango de dgitos especificados, en este
ejemplo matchea los nmeros 1,5,6,7.
. (punto) Hace match con uno o mas caracteres.
exten

=> _NXX,1,Playback(auth-thankyou)

Si Asterisk encuentra ms de 1 patrn para una extensin marcada, se


usa la ms especfica:
exten => _555XXXX,1,Playback(digits/1)
exten => _55512XX,1,Playback(digits/1)
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

Habilitar salida de llamadas

Se generan contextos especificos para llamadas locales a la PSTN.


Con ello se regula y controla quines tienen permiso de hacer llamadas
y qu tipo de llamadas pueden hacer

:
[globals]
JUAN=SIP/juan
PEDRO=IAX2/PEPE
TRUNKDESALIDA=Dahdi/1
[llamadas-locales]
exten =>_9ZXXXXXX,1,Answer()
exten =>_9ZXXXXXX,n,SayDigits(${EXTEN:1})
exten => _9ZXXXXXX,n,Hangup()
[llamadas-larga-distancia]
exten =>_ 901XXXXXXXXXX,1,Answer()
exten =>_901XXXXXXXXXX,n,SayDigits(${EXTEN:1})
exten=> _901XXXXXXXXXX,n,Hangup()
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

10

Manipulacin de expresiones y
variables

Las expresiones son una combinacin de variables,


operadores y valores que arrojan un resultado.
Sintaxis:
$[expr1 operador expr2]
Operadores lgicos: |(or) , &(AND)
Operadores de comparacin: =, !=, <, >, <=, >=
Operadores aritmticos: +, -, *, /, %
[...] , Ejemplo:
exten => 1003,1,Answer()
exten => 1003,n,Set(COUNT=3)
exten => 1003,n,Set(NEWCOUNT=$[${COUNT} + 1])
Julin Dunayevich, Lzaro Baca,
exten => 1003,n,SayNumber(${NEWCOUNT})
Andrs Brassara, Santiago Alberch,
Antonio Lobo

11

Bifurcacin condicional

Permite tomar desiciones dentro del dialplan.


Aplicacin GotoIf()
GotoIf(expresion1?destino1:destino2)
Si la expresin evaluada es verdadera, la llamada es
enviada a destino1, de lo contrario es enviada a
destino2.
Una cadena vaca y el nmero 0 son evaluados con
falso, cualquier otro valor es verdadero.
Cualquiera de los destinos puede ser omitido, pero debe
estar alguno de los 2.
Si el destino omitido es el camino que debe seguir la
llamada, el flujo que se sigue es la siguiente prioridad
dentro de la extensin actual.
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

12

Ejemplo de GotoIf()
exten => 1004,1,Answer()
exten => 1004,n,Set(TEST=1)
exten => 1004,n,GotoIf($[${TEST} = 1]?Iguanas:)
exten => 1004,n,Playback(demo-thanks)
exten => 1004,n,Hangup()
exten => 1004,n(Iguanas),Playback(demo-congrats)
exten => 1004,n,Hangup()
exten => 1005,1,Answer()
exten => 1005,n,Set(COUNT=10)
exten => 1005,n(Ciclo),GotoIf($[${COUNT} > 0 ]?:Fin)
exten => 1005,n,SayNumber(${COUNT})
exten => 1005,n,Wait(1)
exten => 1005,n,Set(COUNT=$[${COUNT} - 1])
exten => 1005,n,Goto(Ciclo)
exten => 1005,n(Fin),Hangup()
exten => 1006,1,Answer()
Exten => 1006,n,NoOp(CALLERID(num))
exten => 1006,n,GotoIf($[${CALLERID(num)} = 101] ? Cuelga:LlamaPepe)
exten => 1006,n(LlamaPepe),Dial(SIP/pepe)
exten => 1006,n,Hangup()
exten => 1006,n(Cuelga),Playback(demo-congrats)
exten => 1006,n,Hangup()
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

13

Bifurcacin condicional basada


en tiempo

Verifica la hora actual del servidor, permitiendo


tomar decisiones basadas en tiempo.
Se utiliza cuando se quiere dar una bienvenida
diferente en horarios de trabajo y fuera de trabajo.

GotoIfTime(hora,dias_de_semana,dias_del_mes,meses?etiqueta)

Enva la llamada a etiqueta si la fecha y hora actual


concuerdan con el criterio especificado por los
parmetros.
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

14

Bifurcacin condicional basada


en tiempo

hora. Lista de uno o ms rangos de horario en formato de


24 horas.
09:00-17:00
dias_de_semana. Lista de uno o ms das de la semana
mon, tue
dias_del_mes. Da numrico del mes
7-12,15
meses. Lista de uno o ms meses del ao
jun, apr, jul
* Matchea con cualquier valor
Etiqueta puede ser una prioridad dentro de una misma
extensin, una prioridad y extensin dentro del mismo
contexto o un contexto, extensin y prioridad.
Exten => s, 1, GotoIfTime(*,*,2, nov?open,s,1) ; se enva
Julin Dunayevich, Lzaro Baca,
al contexto open, extensin
s, prioridad 1
Andrs Brassara, Santiago Alberch,
Antonio Lobo

15

Lab 5

Dialplan avanzado

Julin Dunayevich, Lzaro Baca,


Andrs Brassara, Santiago Alberch,
Antonio Lobo

16

Curso elaborado por


Jlian Dunayevich

julian@dunayevich.com

Lzaro Baca

lazaro.baca@gmail.com

Andrs Brassara

abrassara@gmail.com

Santiago Alberch

salbech@gmail.com

Antonio Lobo

antoniwolf@gmail.com

Detalles de la licencia:
http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR
Autores: Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo
(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5

Trabajo originalmente basado en bibliografa de:


Irontec: contacto@irontec.com (CC)
Asterisk, The Future of Telephony, Jim Meggelen, Jared Smith, and Leif Madsen, OREILLY, 2005
Julin Dunayevich, Lzaro Baca,
Andrs Brassara, Santiago Alberch,
Antonio Lobo

17

You might also like