Diferencia entre revisiones de «Dialplan Avanzado»

De Asterisk Wiki
Ir a la navegación Ir a la búsqueda
Línea 48: Línea 48:
 
Como veíamos en la sintaxis de la Aplicación 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 número posible de argumentos especificados en el uso de la aplicación.
 
Como veíamos en la sintaxis de la Aplicación 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 número posible de argumentos especificados en el uso de la aplicación.
  
 +
== Subrutinas ==
  
 +
Podríamos ir un paso más allá de las Macros, que como sabemos, no son mas que simplemente una "[http://es.wikipedia.org/wiki/Macro|Macroinstrucción]" (de alguna forma resumida, una simplificación en la abstracción del código), utilizando las Subrutinas del Dialplan.
 +
 +
=== Características Generales ===
 +
 +
Poseen varios aspectos iguales o parecidos a las Macros, los cuales podríamos destacar:
 +
 +
* Mismo nombre para las variables de Argumentos ${ARG1}, ${ARG2}, etc...
 +
 +
* La aplicación que las llama, GoSub, toma la siguiente sintaxis:
 +
** GoSub(<nombre_subrutina>,start,1(<argumento_1>[,<argumento_N>]))
 +
 +
* No existe una forma de definirías 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 convención de utilizar algún método 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 están diseñadas para hacer verdaderos algoritmos sofisticados dentro de lo que la potencia de Asterisk nos permite. Por ello no existe una limitación de Anidamiento como aparecía con las Macros.
 +
 +
=== Retorno de Subrutinas ===
 +
 +
Cuando entramos en una subrutina, a través de la Aplicación GoSub, hay que considerar, que ya no volveríamos 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 Parámetros (de hecho todo este sistema conceptual viene dado por lenguajes de muy bajo nivel como Ensamblador).
 +
 +
Pero siguiendo con esta comparación a lenguajes de bajo nivel, existe una forma de regresar al punto donde lo dejamos, con otra aplicación que acompaña a las subrutinas: '''Return'''. Simplemente con una llamada a esta Aplicación volveríamos exactamente al punto en el flujo del Dialplan donde lo dejamos, lo que haría asemejarse de alguna forma más, al comportamiento de las Macros.
  
 
== Referencias ==
 
== Referencias ==

Revisión del 00:55 24 may 2012

Format.png Formatear
Esta página necesita ser editada para cumplir los requisitos del wiki.
Puedes revisar todas las páginas sin suficiente formato en este enlace.
Alert.png To Do
Esta página necesita ser completada.
Puedes revisar todas las páginas por completar en este enlace.


Toda la parte que podríamos considerar como "Avanzada" del Plan de Marcación de Asterisk es aquella que no es imprescindible para poder realizar instalaciones de pequeña escala, pero se vuelve fundamental cuando empezamos a trabajar de forma intensiva con el sistema Asterisk. Todo lo básico y necesario para montar un sistema funcional podemos verlo en el apartado de Introducción, y profundizando aún mas en las Aplicaciones de uso más común. Con el uso de toda la batería de Módulos de Asterisk podemos diseñar y escalar un sistema de Telefonía totalmente hecho a medida.

Logo Asterisk

Macros

Como su nombre indica, los Macros sirven para simplificar la tarea repetitiva de insertar un conjunto de elementos del script del Plan de Marcación que son comunes para un número elevado de extensiones. Además como característica adicional, los Macros pueden tomar argumentos adicionales, lo que los convierte en una herramienta muy versátil

Sintaxis de Macros

Las macros se componen de dos niveles:

  • La Aplicación Macro que realiza la llamada a la Macro en cuestión
  • La Macro en si, que se forma como un tipo de "Contexto" dentro del Plan de Marcación.

En cuanto a la descripción de la Macro, la sintaxis es sencilla, se especifica como un contexto cualquiera con la siguiente pecularidad:

[macro-<nombre_de_macro>]

Por otro lado dentro de este contexto, se define una extensión por la cual empezará la ejecución del mismo, la extensión de inicio (s, start), y a partir de ahí ya la Macro se trata como si fuera una extensión cualquiera que sigue su curso natural.

En cuanto a la aplicación Macro la sintaxis es sencilla:

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

Podemos especificar cualquier número de argumentos que pasaremos a la Macro en cuestión.

Además podríamos plantearnos el hecho de Anidar estas Macros dentro de otras Macros. Por regla general no se recomienda anidar muchas Macros dado que Asterisk podría sufrir serios problemas de rendimiento. Además considerar como veremos a continuación acerca de las Varibles de Canal y de Macro, que podrían verse afectadas y complicar bastante el concepto. Comentar que el anidamiento esta limitado por el sistema a un máximo de 7 niveles. [1]

Variables Generales de Macros

Si utilizáramos las Variables generales de Asterisk, dentro de una Macro, obtendríamos valores que posiblemente no sean los que buscamos, dado que serían los específicos a la misma. Este caso se da por ejemplo con las variables ${CONTEXT} (que tendríamos el nombre del contexto de la macro, macro-...), ${PRIORITY} la prioridad dentro de la macro, y ${EXTEN}, que será regularmente la s como comentábamos en el apartado anterior.

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

  • ${MACRO_CONTEXT}, si haría referencia al Contexto de donde viene la Macro originalmente
  • ${MACRO_EXTEN}, haría referencia al número de extensión de donde viene la Macro, este es una de las variables más interesantes si queremos asociar extensiones a posiblemente otros aspectos del sistema (como nombres de dispositivo SIP, o nombres de Buzones de Voz.
  • ${MACRO_PRIORIRY}, sería la misma historía que las dos anteriores, prioridad concreta en la que se encuentra antes de saltar al "contexto especifico" de la Macro.

Variables de Argumentos

Como veíamos en la sintaxis de la Aplicación 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 número posible de argumentos especificados en el uso de la aplicación.

Subrutinas

Podríamos ir un paso más allá de las Macros, que como sabemos, no son mas que simplemente una "[1]" (de alguna forma resumida, una simplificación en la abstracción del código), utilizando las Subrutinas del Dialplan.

Características Generales

Poseen varios aspectos iguales o parecidos a las Macros, los cuales podríamos destacar:

  • Mismo nombre para las variables de Argumentos ${ARG1}, ${ARG2}, etc...
  • La aplicación que las llama, GoSub, toma la siguiente sintaxis:
    • GoSub(<nombre_subrutina>,start,1(<argumento_1>[,<argumento_N>]))
  • No existe una forma de definirías 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 convención de utilizar algún método 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 están diseñadas para hacer verdaderos algoritmos sofisticados dentro de lo que la potencia de Asterisk nos permite. Por ello no existe una limitación de Anidamiento como aparecía con las Macros.

Retorno de Subrutinas

Cuando entramos en una subrutina, a través de la Aplicación GoSub, hay que considerar, que ya no volveríamos 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 Parámetros (de hecho todo este sistema conceptual viene dado por lenguajes de muy bajo nivel como Ensamblador).

Pero siguiendo con esta comparación a lenguajes de bajo nivel, existe una forma de regresar al punto donde lo dejamos, con otra aplicación que acompaña a las subrutinas: Return. Simplemente con una llamada a esta Aplicación volveríamos exactamente al punto en el flujo del Dialplan donde lo dejamos, lo que haría asemejarse de alguna forma más, al comportamiento de las Macros.

Referencias

  1. Asterisk Macros, Digium Inc. (2012)

Véase también

Enlaces Externos