You are on page 1of 18

Asterisk

Configuración
Manejo de variables
condicionales
Variables
 En el dialplan de Asterisk existen variables, que
pueden ser modificadas por el propio Asterisk en su
ejecución lógica o por comandos expresos
(aplicaciones) del dialplan.
 Las variables reducen la escritura, agregan
claridad al dialplan y le aportan lógica.
 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:
${variable} Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 2
Manejo de variables
 Asignación 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)}
 Concatenación: ${Variable1}${Variable2}
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 3
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
sólo 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
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 4
Agregar variables al dialplan
[globals]
JUAN=SIP/juan ; define la variable JUAN
PEPE=IAX2/pepe
[internos]
exten => 5200,1,Answer( )
exten => 5200,n,Background(enter-ext-of-person)

exten => 5201,1,Answer()


exten => 5201,n(LlamaJ),Dial(${JUAN},10)
exten => 5201,n,Playback(vm-nobodyavail)
exten => 5201,n,Hangup()
exten => 5201,LlamaJ+101,Playback(tt-allbusy)
exten => 5201,n,Hangup()
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 5
Agregar variables al dialplan
exten => 5202,1,Answer()
exten => 5202,n(LlamaP),Dial(${PEPE},10)
exten => 5202,n,Playback(vm-nobodyavail)
exten => 5202,n,Hangup()
exten => 5202,llamaP+101,Playback(tt-allbusy)
exten => 5202,n,Hangup()

exten => i,1,Playback(pbx-invalid)


exten => i,2,Goto(5200,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup()
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 6
Variables de canal definidas automáticamente
 Listado de variables más importantes:
 ${CALLERID}: caller ID actual, nombre y número.
 ${CONTEXT}: contexto actual.
 ${EXTEN}: extensión 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.
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 7
Variable ${EXTEN}
 Permite saber cuál es la extensión que fue
marcada.
 Se utiliza comunmente para eliminar dígitos
marcados: ${EXTEN:x}
Si x es positivo, quita los primeros x dígitos
marcados
Si x es negativo, devuelve los últimos x dígitos
marcados
Exten => _XXXXX,1,Answer()
exten => _XXXXX,n,SayDigits(${EXTEN:1})
exten => _XXXXX,n,SayDigits(${EXTEN:-1})
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 8
Patrones
 Se utilizan principalmente para llamadas salientes.
 Comienzan con el signo _
 Le dicen a Asterisk que haga match con un patrón y no con un número
de extensión.
 X. Hace match con cualquier dígito de 0 a 9.
 Z Hace match con cualquier dígito de 1 a 9.
 N Hace match con cualquier dígito del 2 al 9.
 [15-7] Hace match con el rango de dígitos especificados, en este
ejemplo matchea los números 1,5,6,7.
 . (punto) Hace match con uno o mas caracteres.
 exten => _NXX,1,Playback(auth-thankyou)
 Si Asterisk encuentra más de 1 patrón para una extensión marcada, se
usa la más específica:
 exten => _555XXXX,1,Playback(digits/1)
 exten => _55512XX,1,Playback(digits/1)
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 9
Habilitar salida de llamadas
 Se generan contextos especificos para llamadas locales a la PSTN.
 Con ello se regula y controla quiénes 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 => _9NXXXXXX,1,Dial(${TRUNKDESALIDA}/${EXTEN}:1)
exten => _9NXXXXXX,2,Congestion()
exten => _9NXXXXXX,102,Congestion()
[llamadas-larga-distancia]
exten => _901XXXXXXXXXX,1,Dial(${TRUNKDESALIDA}/$
{EXTEN}:1)
exten => _901XXXXXXXXXX,2,Congestion()
exten => _901XXXXXXXXXX,102,Congestion()
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 10
Include
 Puede utilizarse un contexto dentro de otro contexto a
través de la directiva include
 Permite habilitar derechos de acceso a las diferentes
secciones del dialplan.
 Por ejemplo, que los dispositivo del contexto [internos]
puedan hacer llamadas por la red PSTN

include => context

 Primero trata de encontrar las extensiones en el


contexto actual.
 Si no la encuentra, trata de encontrarla en el primer
contexto incluido, y después en el segundo y así
sucesivamente.
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 11
Manipulación de expresiones y
variables
 Las expresiones son una combinación de variables,
operadores y valores que arrojan un resultado.
Sintaxis:
$[expr1 operador expr2]
 Operadores lógicos: |(or) , &(AND)
 Operadores de comparación: =, !=, <, >, <=, >=
 Operadores aritméticos: +, -, *, /, %
 [...] , Ejemplo:
exten => 5203,1,Set(COUNT=3)
exten => 5203,2,Set(NEWCOUNT=$[${COUNT} + 1])
exten => 5203,3,SayNumber(${NEWCOUNT})
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 12
Bifurcación condicional
 Permite tomar desiciones dentro del dialplan.
 Aplicación GotoIf()
 GotoIf(expresion1?destino1:destino2)
 Si la expresión evaluada es verdadera, la llamada es
enviada a destino1, de lo contrario es enviada a
destino2.
 Una cadena vacía y el número 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 extensión actual.
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 13
Ejemplo de GotoIf()
exten => 5204,1,Answer()
exten => 5204,n,Set(TEST=1)
exten => 5204,n,GotoIf($[${TEST} = 1]?Iguanas:)
exten => 5204,n,Playback(weasels-eaten-phonesys)
exten => 5204,n,Hangup()
exten => 5204,n(Iguanas),Playback(office-iguanas)
exten => 5204,n,Hangup()

exten => 5205,1,Answer()


exten => 5205,n,Set(COUNT=10)
exten => 5205,n(Ciclo),GotoIf($[${COUNT} > 0 ]?:Fin)
exten => 5205,n,SayNumber(${COUNT})
exten => 5205,n,Wait(1)
exten => 5205,n,Set(COUNT=$[${COUNT} - 1])
exten => 5205,n,Goto(Ciclo)
exten => 5205,n(Fin),Hangup()

exten => 5206,1,Answer()


Exten => 5206,n,NoOp(CALLERID(num))
exten => 5206,n,GotoIf($[$[CALLERID(num)] = 101] ? 20:10)
exten => 5206,10,Dial(Sip/Juan)
exten => 5206,n,Hangup()
exten => 5206,20,Playback(abandon-all-hope)
Julián Dunayevich, Lázaro Baca,
exten => 5206,n,Hangup() Andrés Brassara, Santiago Alberch,
Antonio Lobo 14
Bifurcación 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)

 Envía la llamada a etiqueta si la fecha y hora actual


concuerdan con el criterio especificado por los
parámetros.
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 15
Bifurcación condicional basada
en tiempo
 hora. Lista de uno o más rangos de horario en formato de
24 horas.
09:00-17:00
 dias_de_semana. Lista de uno o más días de la semana
mon, tue
 dias_del_mes. Día numérico del mes
7-12,15
 meses. Lista de uno o más meses del año
jun, apr, jul
 * Matchea con cualquier valor
 Etiqueta puede ser una prioridad dentro de una misma
extensión, una prioridad y extensión dentro del mismo
contexto o un contexto, extensión y prioridad.
 Exten => s, 1, GotoIfTime(*,*,2, nov?open,s,1) ; se envía
al contexto open, extensión
Julián Dunayevich,s, prioridad
Lázaro Baca, 1
Andrés Brassara, Santiago Alberch,
Antonio Lobo 16
Complementando el IVR

Lab 5

Julián Dunayevich, Lázaro Baca,


Andrés Brassara, Santiago Alberch,
Antonio Lobo 17
Curso elaborado por
Julián Dunayevich, Lázaro Baca, Andrés Brassara,
Santiago Alberch y Antonio Lobo
julian@dunayevich.com
lazaro.baca@gmail.com
abrassara@gmail.com
salberch@gmail.com
antoniwolf@gmail.com
Detalles de la licencia:
http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR
Autores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago
Alberch, Antonio Lobo
(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5
Basándose en: Irontec: contacto@irontec.com (CC)
Asterisk, The Future of Telephony, Jim Meggelen, Jared Smith, and Leif Madsen, O´REILLY, 2005
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo 18

You might also like