03.5.Asterisk- Dialplan Avanzado

17

Click here to load reader

description

:)

Transcript of 03.5.Asterisk- Dialplan Avanzado

  • AsteriskConfiguracinManejo de variablescondicionales

  • VariablesEn 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:${variable}*Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo

  • Manejo de variablesAsignacin 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 345Longitud: ${LEN(Variable)}Concatenacin: ${Variable1}${Variable2}*Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo

  • Variables globalesPermite 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/juanPEPE=IAX2/pepe*Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo

  • 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()*Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo

  • 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()*Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo

  • Variables de canal definidas automticamenteListado 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 marcadosSi x es negativo, devuelve los ltimos x dgitos marcadosExten => _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

  • PatronesSe 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 llamadasSe 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/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()

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

  • Manipulacin de expresiones y variablesLas 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])exten => 1003,n,SayNumber(${NEWCOUNT})*Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo

  • Bifurcacin condicionalPermite 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

  • 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

  • Bifurcacin condicional basada en tiempoVerifica 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

  • Bifurcacin condicional basada en tiempohora. Lista de uno o ms rangos de horario en formato de 24 horas. 09:00-17:00dias_de_semana. Lista de uno o ms das de la semana mon, tuedias_del_mes. Da numrico del mes 7-12,15meses. Lista de uno o ms meses del ao jun, apr, jul* Matchea con cualquier valorEtiqueta 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 al contexto open, extensin s, prioridad 1*Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo

  • Lab 5

    Dialplan avanzado*Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo

  • Julin Dunayevich, Lzaro Baca, Andrs Brassara, Santiago Alberch, Antonio Lobo*Curso elaborado por Jlian Dunayevich [email protected] Lzaro Baca [email protected] Brassara [email protected] Alberch [email protected] Lobo [email protected]

    Detalles de la licencia:http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_ARAutores: 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: [email protected] (CC)Asterisk, The Future of Telephony, Jim Meggelen, Jared Smith, and Leif Madsen, OREILLY, 2005

    ****************