Está en la página 1de 18

Asterisk PBX y Telefona IP

Clase 14
AGI
Temas:

1.-Introduccion a AGI
2.- Casos Prcticos

Nils Alvarez Huamn Digium Certified Asterisk Professional nalvarhu@gmail.com

Programacin utilizando AGI

Introduccin
La interface AGI nos permite extender las funcionalidades del plan de discado utilizando lenguajes diferentes de programacin. Esto nos permite interactuar con bases de datos y realizar planes de discado mas complejos como IVRs monitoreo de llamadas, etc.

Objetivos
Conocer los entornos de aplicacin de AGI. Conocer los comandos de la interface AGI.

Programar scripts que utilicen la interface AGI para implementar funciones avanzadas en el plan de discado.

Asterisk Gateway Interface


Asterisk AGI provee una interfase estndar para agregar funcionalidad al servidor de comunicaciones Asterisk utilizando diversos lenguajes de programacin: PHP, Java, Python, Perl, C, Pascal, Shell.
A travs de esta interfase el plan de discado puede ser controlado por programas externos.

Asterisk Gateway Interface


Los scripts AGI se comunican con asterisk utilizando canales estndar de comunicacin salida estndar, entrada estndar y error estndar. Conocidos mas fcilmente como STDIN, STDOUT y STDERR.

Asterisk utiliza estos canales para enviar y recibir informacin del programa en ejecucin.

Asterisk Gateway Interface


Cuando creamos un script AGI para que trabaje con asterisk: - utilizamos el STDOUT para enviar informacin al servidor asterisk. - STDIN lo utilizamos para recibir informacin del servidor asterisk. - STDERR para enviar mensajes de error a la consola de asterisk.

Variables
Cuando Asterisk inicia un script AGI, enva una serie de variables al canal de entrada. Estas variables comienzan con agi_. Algunas de estas variables son: agi_channel canal llamado. agi_callerid CALLERID(num) agi_calleridname CALLERID(name)

Variables
Tambin son pasadas variables de entorno relacionadas con el sistema de archivos que apuntan a carpetas que contienen archivos de asterisk. AST_CONFIG_DIR AST_CONFIG_FILE AST_MODULE_DIR AST_SPOOL_DIR AST_MONITOR_DIR

Secuencia de comunicacin
La comunicacin entre el servidor asterisk y el script AGI se realiza siguiendo una secuencia que se mantendr hasta que el script termine su ejecucin.
Al iniciarse el script Asterisk enva una lista de variables que son ledas a travs del STDIN. Despus de terminar el envo de variables, enva una lnea en blanco para indicar que termino el envo de variables.

1)

Secuencia de comunicacin
2) Luego asterisk le da el control del plan de discado al script AGI y queda a la espera de recibir comandos por parte del script a travs del STDOUT. 3) El script enva comandos a travs del STDOUT, despus de cada comando enviado Asterisk enva un a respuesta a travs del canal STDIN. (Estas acciones continuarn durante la ejecucin de todo el script AGI)

Ejecutando un Script AGI


Para que sea posible ejecutar un script AGI este debe ser ejecutable. Para esto debemos darle los permisos correspondientes. Los scripts AGI se ejecutan generalmente desde el directorio /var/lib/asterisk/agi-bin, aunque es posible especificar otro directorio cuando el script es llamado desde el plan de discado.

Ejecutando un Script AGI


Los scripts AGI son llamados desde el plan de discado utilizando la aplicacin AGI() de la siguiente manera: exten => 2001,1,Answer() exten => 2001,2,AGI(dial_num.php)

Escribiendo un Script AGI


Crearemos el script AGI dial_num.php utilizando PHP:
#!/usr/bin/php -q <?php $stdout = fopen('php://stdout', 'w'); fwrite($stdout,"SET VARIABLE DIAL_NUM 1001 \n"); fflush($stdout); ?>

Escribiendo un Script AGI


Llamaremos al script AGI desde el plan de discado: [local] exten => 3001,1,answer() exten => 3001,2,AGI(dial_num.php) exten => 3001,3,dial(SIP/${DIAL_NUM}) exten => 3001,4,hangup

Paso de Argumentos
Los scripts AGI pueden recibir argumentos desde el plan de discado utilizando la siguiente sintaxis: AGI(prueba2.php,arg1,arg2,arg3 ) Ejemplo: exten => 2001,1,Answer() exten => 2001,2,AGI(prueba2.php,${EXTEN})

Comandos AGI
Utilizando la funcin fwrite y el manejador $stdout (creado con la funcin fopen) podemos pasar una serie de comandos que listamos a continuacin: channel status: Devuelve el status del canal conectado. exec: Ejecuta una aplicacin del plan de discado. get variable: Captura las variables del canal. hangup: Cuelga el canal actual. noop: No hace nada.

Resumen de la Unidad
Los scripts AGI se guardan en el directorio /var/lib/asterisk/agi-bin/, y son llamados desde el plan de discado. Utilizan STDIN, STDOUT y STDERR para comunicarse con el servidor enviando comandos y recibiendo respuestas.
Hay una gran variedad de comandos que pueden ser utilizados desde los scripts AGI que nos permiten controlar el plan de discado.

También podría gustarte