Asterisk

17
Asterisk Configuración Manejo de variables condicionales

description

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. - PowerPoint PPT Presentation

Transcript of Asterisk

Page 1: Asterisk

Asterisk

ConfiguraciónManejo de variables

condicionales

Page 2: Asterisk

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}

2

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 3: Asterisk

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}

3

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 4: Asterisk

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

4

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 5: Asterisk

Agregar variables al dialplan

[globals]JUAN=SIP/juan ; define la variable JUANPEPE=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()

5

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 6: Asterisk

Agregar variables al dialplanexten => 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()

6

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 7: Asterisk

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.

7

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 8: Asterisk

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

marcadosSi x es negativo, devuelve los últimos x dígitos

marcadosExten => _XXXXX,1,Answer()

exten => _XXXXX,n,SayDigits(${EXTEN:1})exten => _XXXXX,n,SayDigits(${EXTEN:-1})

8

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 9: Asterisk

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)

9

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 10: Asterisk

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/juanPEDRO=IAX2/PEPETRUNKDESALIDA=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()

10

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 11: Asterisk

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 => 1003,1,Answer()exten => 1003,n,Set(COUNT=3)

exten => 1003,n,Set(NEWCOUNT=$[${COUNT} + 1])exten => 1003,n,SayNumber(${NEWCOUNT})

11

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 12: Asterisk

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.

12

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 13: Asterisk

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

13

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 14: Asterisk

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.

14

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 15: Asterisk

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 semanamon, tue

dias_del_mes. Día numérico del mes7-12,15

meses. Lista de uno o más meses del añojun, 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 s, prioridad 1

15

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 16: Asterisk

Lab 5

Dialplan avanzado

16

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo

Page 17: Asterisk

Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch,

Antonio Lobo 17

Curso elaborado por

Júlian Dunayevich [email protected]

Lázaro Baca [email protected]

Andrés Brassara [email protected]

Santiago Alberch [email protected]

Antonio Lobo [email protected]

Detalles de la licencia:http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_ARAutores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio LoboAutores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5

Trabajo originalmente basado en bibliografía de:Irontec: [email protected] (CC)Asterisk, The Future of Telephony, Jim Meggelen, Jared Smith, and Leif Madsen, O´REILLY, 2005