Sunteți pe pagina 1din 4

Macros

Como su nombre indica, los Macros sirven para simplificar la tarea repetitiva de insertar un conjunto de elementos del script del Plan de Marcacin que son comunes para un nmero elevado de extensiones. Adems como caracterstica adicional, los Macros pueden tomar argumentos adicionales, lo que los convierte en una herramienta muy verstil.

Sintaxis de Macros
Las macros se componen de dos niveles:

La Aplicacin Macro que realiza la llamada a la Macro en cuestin. La Macro en s, que se forma como un tipo de "Contexto" dentro del Plan de Marcacin.

En cuanto a la descripcin de la Macro, la sintaxis es sencilla, se especifica como un contexto cualquiera con la siguiente peculiaridad: [macro-<nombre_de_macro>] Por otro lado dentro de este contexto, se define una extensin por la cual empezar la ejecucin del mismo, la extensin de inicio (s, start), y a partir de ah ya la Macro se trata como si fuera una extensin cualquiera que sigue su curso natural. En cuanto a la aplicacin Macro la sintaxis es sencilla:

Macro(<nombre_de_macro>,<argumento_1>[,<argumento_N>])

Podemos especificar cualquier nmero de argumentos que pasaremos a la Macro en cuestin. Adems podramos plantearnos el hecho de Anidar estas Macros dentro de otras Macros. Por regla general no se recomienda anidar muchas Macros dado que Asterisk podra sufrir serios problemas de rendimiento. Adems considerar como veremos a continuacin acerca de las Variables de Canal y de Macro, que podran verse afectadas y complicar bastante el concepto. Comentar que el anidamiento est limitado por el sistema a un mximo de 7 niveles.

Variables Generales de Macros


Si utilizramos las Variables generales de Asterisk, dentro de una Macro, obtendramos valores que posiblemente no sean los que buscamos, dado que seran los especficos a la misma. Este caso se da por ejemplo con las variables ${CONTEXT} (que tendramos el nombre del contexto de la macro, macro-...), ${PRIORITY} la prioridad dentro de la macro, y ${EXTEN}, que ser regularmente la s como comentbamos en el apartado anterior.

Por eso surgen variables de Macros especficas para tratar estas situaciones, simplemente con el prefijo MACRO_ delante.

${MACRO_CONTEXT}, si hara referencia al Contexto de donde viene la Macro originalmente. ${MACRO_EXTEN}, hara referencia al nmero de extensin de donde viene la Macro, este es una de las variables ms interesantes si queremos asociar extensiones a posiblemente otros aspectos del sistema (como nombres de dispositivo SIP, o nombres de Buzones de Voz. ${MACRO_PRIORIRY}, sera la misma historia que las dos anteriores, prioridad concreta en la que se encuentra antes de saltar al "contexto especifico" de la Macro.

Variables de Argumentos
Como veamos en la sintaxis de la Aplicacin Macro, es posible pasar varios argumentos a la misma. Para poder acceder a ellos dentro de la Macro utilizamos la sintaxis: ${ARG1}, ${ARG2}, ${ARGN}, siendo N el nmero posible de argumentos especificados en el uso de la aplicacin.

Subrutinas

La principal facilidad que nos permite las Macros es reutilizar el cdigo, en nuestro caso lneas del archivo extensions.conf, las subrutinas sern invocadas de acuerdo a la lgica que definamos.

Caractersticas Generales
Poseen varios aspectos iguales o parecidos a las Macros, los cuales podramos destacar:

Mismo nombre para las variables de Argumentos ${ARG1}, ${ARG2}, etc... La aplicacin que las llama, GoSub, toma la siguiente sintaxis: o GoSub(<nombre_subrutina>,start,1(<argumento_1>[,<argumento_N>])) No existe una forma de definiras concreta como el caso de las macro con los contextos [macro-...]. En este caso, las Subrutinas se definen como un contexto cualquiera a voluntad, pero existe una convencin de utilizar algn mtodo identificativo para poder reconocerlas dentro de un Dialplan complejo, algo as como [sub-<nombre_subrutina>] o [Sub<nombre_subrutina>] pero no es crucial. Al contrario de las Macros, las subrutinas si estn diseadas para hacer verdaderos algoritmos sofisticados dentro de lo que la potencia de Asterisk nos permite. Por ello no existe una limitacin de Anidamiento como apareca con las Macros.

Retorno de Subrutinas
Cuando entramos en una subrutina, a travs de la Aplicacin GoSub, hay que considerar, que ya no volveramos al punto donde lo dejamos en nuestro DialPlan por defecto. En cierto sentido una subrutina se comporta como una especie de Salto no condicional con el pase de una serie de Parmetros (de hecho todo este sistema conceptual viene dado por lenguajes de muy bajo nivel como Ensamblador). Pero siguiendo con esta comparacin a lenguajes de bajo nivel, existe una forma de regresar al punto donde lo dejamos, con otra aplicacin que acompaa a las subrutinas: Return. Simplemente con una llamada a esta Aplicacin volveramos exactamente al punto en el flujo del Dialplan donde lo dejamos, lo que hara asemejarse de alguna forma ms, al comportamiento de las Macros.

EJERCICIO Indicar detalladamente (por cada lnea de la macro) que pasara si los anexos descritos lneas abajo realizan una llamada. Escenario Todos los telfonos tienen el contexto Internos Todos los anexos llaman al destino 1234 Los anexos que realizan la llamada (anexos descritos) son: 1500 2300 3400 0 [internos] exten => _X.,1,Macro(prueba,${EXTEN})

[macro-prueba] exten =>s,1,GotoIf($["${EXTEN}" = 0]?oper:) exten =>s,2,GotoIf($["${ARG1}" < 1001]?lima:) exten =>s,3,GotoIf($["${ARG1}" < 2001]?callao:) exten =>s,4,GotoIf(Dial(SIP/${ARG1},,) exten => s,5,Hangup() exten => s,n(lima),Noop(Esto es una Prueba) exten => s,n,Hangup() exten => s,n(callao),Playback(demo-congrats) exten => s,n,Dial(SIP/${ARG1},20,) exten => s,n,Hangup() exten => s,n(oper),Dial(SIP/${ARG1},60,) exten => s,n,Hangup()

S-ar putea să vă placă și