Diferencia entre revisiones de «Dialplan Avanzado»

De Asterisk Wiki
Ir a la navegación Ir a la búsqueda
Línea 79: Línea 79:
 
=== Aplicación Read ===
 
=== Aplicación Read ===
  
Mientras que la mayoría de las operadoras automáticas, pueden formalizarse utilizando aplicaciones específicamente diseñadas para este propósito como [[Aplicaciones Básicas|Background y WaitExten}}, para poder diseñar un IVR, es muy probable que necesitemos utilizar adicionalmente a los sistemas [[TTS y ASR|ASR]] para el recoger información por el medio de voz, también poder acompañar con un medio dígital, basado en la marcación de tonos [[DTMF]].
+
Mientras que la mayoría de las operadoras automáticas, pueden formalizarse utilizando aplicaciones específicamente diseñadas para este propósito como [[Aplicaciones Básicas|Background y WaitExten}}, para poder diseñar un IVR, es muy probable que necesitemos utilizar adicionalmente a los sistemas [[TTS y ASR|ASR]] para el recoger información por el medio de voz, también poder acompañar con un medio digital, basado en la marcación de tonos [[DTMF]].
  
 
Con la aplicación Read podemos hacer prácticamente los mismo que con las dos anteriores, aún un poco más complejo tenemos más versatilidad, y se desarrollo expresamente para cumplir el cometido de poder generar IVR de manera eficiente.
 
Con la aplicación Read podemos hacer prácticamente los mismo que con las dos anteriores, aún un poco más complejo tenemos más versatilidad, y se desarrollo expresamente para cumplir el cometido de poder generar IVR de manera eficiente.
Línea 87: Línea 87:
 
* '''variable''': podemos definir el nombre de una variable en el que almacenaremos los dígitos marcados a través de esta aplicación. Con ello conseguimos la posibilidad de extender nuestra funcionalidad, más allá de 1 solo dígito como es el caso de las Operadoras Automáticas, sino incluso, podríamos crear un menú de dos o hasta tres dígitos.
 
* '''variable''': podemos definir el nombre de una variable en el que almacenaremos los dígitos marcados a través de esta aplicación. Con ello conseguimos la posibilidad de extender nuestra funcionalidad, más allá de 1 solo dígito como es el caso de las Operadoras Automáticas, sino incluso, podríamos crear un menú de dos o hasta tres dígitos.
 
* '''pista_audio''': podemos definir tantas pistas de audio como queremos que se reproduzcan consecutivamente. Hay que considerar que la marcación de lectura puede realizarse mientras se escuchan las pistas de sonido.
 
* '''pista_audio''': podemos definir tantas pistas de audio como queremos que se reproduzcan consecutivamente. Hay que considerar que la marcación de lectura puede realizarse mientras se escuchan las pistas de sonido.
* '''máximos_dígitos''': podemos definir, el número máximo de dígitos que han de ser marcados, es posible interrumpir la inserción de dígitos con la tecla '''#'''
+
* '''máximos_dígitos''': podemos definir, el número máximo de dígitos que han de ser marcados, es posible interrumpir la inserción de dígitos con la tecla '''#'''. Si ponemos 0, entonces no hay limite y tendremos que acabar con '''#''' o cuando se acabe el tiempo de espera.
* '''opciones
+
* '''intentos''': número máximo de intentos, hasta que demos por finalizada la operación, en caso que acabe el tiempo de espera.
 
+
* '''tiempo_de_espera''': tiempo en segundos máximo que esperara la aplicación antes de darse por terminada.
 
+
* '''opciones''': aquí se pueden especificar algunas opciones que pueden variar el comportamiento:
 
+
** '''s''': si no hemos lanzado una apliación Answer (o se ha respondido la linea indirectamente), saltaríamos esta aplicación
 +
** '''n''': justo lo contrario que la '''s''', aunque no haya sido respondida, intentamos leer digitos del llamante
 +
** '''i''': podemos lanzar un tono dentro de '''indications.conf''' en vez de una pista de audio si ponemos esta opción
  
  

Revisión del 14:23 8 jun 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.

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

Subrutinas de Bajo Nivel

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.

Interactive Voice Response

Un IVR como su traducción literal, es un sistema interactivo de respuesta por voz. Esto quiere decir, que una máquina que incorpore este sistema integra las dos partes fundamentales de iteracción de una máquina y una persona, por voz, utilizando un mecanismos TTS y ASR, especialmente si hablamos de un sistema de telefonía.

Podria considerarse hasta cierto punto, un tipo de Operadora Automática pero con un nivel más avanzado de gestión, dado que por regla general, los sistemas IVR suelen interactuar con otros sistemas del entorno, mientras que las operadoras automáticas, se restringen a la funcionalidad que aporta el sistema PBX en sí.

Aplicación Read

Mientras que la mayoría de las operadoras automáticas, pueden formalizarse utilizando aplicaciones específicamente diseñadas para este propósito como [[Aplicaciones Básicas|Background y WaitExten}}, para poder diseñar un IVR, es muy probable que necesitemos utilizar adicionalmente a los sistemas ASR para el recoger información por el medio de voz, también poder acompañar con un medio digital, basado en la marcación de tonos DTMF.

Con la aplicación Read podemos hacer prácticamente los mismo que con las dos anteriores, aún un poco más complejo tenemos más versatilidad, y se desarrollo expresamente para cumplir el cometido de poder generar IVR de manera eficiente.

La sintaxis específica de esta aplicación es la siguiente: Read(<variable>,<pista_audio_1>[,<pista_audio_N>],,<máximos_dígitos>,<opciones>,<intentos>,<tiempo_de_espera>)

  • variable: podemos definir el nombre de una variable en el que almacenaremos los dígitos marcados a través de esta aplicación. Con ello conseguimos la posibilidad de extender nuestra funcionalidad, más allá de 1 solo dígito como es el caso de las Operadoras Automáticas, sino incluso, podríamos crear un menú de dos o hasta tres dígitos.
  • pista_audio: podemos definir tantas pistas de audio como queremos que se reproduzcan consecutivamente. Hay que considerar que la marcación de lectura puede realizarse mientras se escuchan las pistas de sonido.
  • máximos_dígitos: podemos definir, el número máximo de dígitos que han de ser marcados, es posible interrumpir la inserción de dígitos con la tecla #. Si ponemos 0, entonces no hay limite y tendremos que acabar con # o cuando se acabe el tiempo de espera.
  • intentos: número máximo de intentos, hasta que demos por finalizada la operación, en caso que acabe el tiempo de espera.
  • tiempo_de_espera: tiempo en segundos máximo que esperara la aplicación antes de darse por terminada.
  • opciones: aquí se pueden especificar algunas opciones que pueden variar el comportamiento:
    • s: si no hemos lanzado una apliación Answer (o se ha respondido la linea indirectamente), saltaríamos esta aplicación
    • n: justo lo contrario que la s, aunque no haya sido respondida, intentamos leer digitos del llamante
    • i: podemos lanzar un tono dentro de indications.conf en vez de una pista de audio si ponemos esta opción


Referencias

  1. Asterisk Macros, Digium Inc. (2012)

Véase también

Enlaces Externos