Cómo ejecutar AGI de forma asíncrona
Lo primero que hay que saber es qué es un AGI y qué es el AMI.
Una vez sepamos la diferencia entre estas dos maneras de ejecutar aplicaciones de manera que interactúen con Asterisk, nos daremos cuenta que los AGI deben ejecutarse cuando se realiza una llamada (para consultar un número de teléfono en una base de datos, o similar), mientras que el AMI está contínuamente conectado a Asterisk y puede ejecutar comandos cuando quiera independientemente de cuando haya o no llamadas activas.
El objetivo de esta técnica, consiste en ejecutar AGI cuando se produzca un evento, no cuando se ejecute desde el dialplan.
Combinando las dos técnicas (AGI y AMI), se puede llegar a hacer esto:
# telnet localhost 5038
Action: Login
Username: test
Secret: testAction: AGI
Channel: SIP/33-blah
Command: EXEC Playback tt-monkeys
CommandID: MyCommandID
En este caso, habremos ejecutado un comando de AGI en el instante que hayamos decidido, no hace falta que lo ejecute el propio dialplan de Asterisk.
Otra idea estupenda sería poder ejecutar comandos AGI incluso desde la consola de Asterisk:
tcore*CLI> agi exec SIP/testing-09a5b960 “EXEC startmusiconhold”
tcore*CLI> agi exec SIP/testing-09a5b960 “EXEC stopmusiconhold”
tcore*CLI> agi exec SIP/testing-09a5b960 “EXEC Dial(Agent/23)”
Para esto, hay un parche que permite utilizar los comandos AGI desde la consola:
http://www.moythreads.com/asterisk-1.4.15-async-agi.patch
Una técnica más para poder llegar a hacer aquello que tenemos en la cabeza. 🙂
Vía: http://www.moythreads.com/wordpress/2007/12/24/asterisk-asynchronous-agi/