2. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AMI: Asterisk Manager Interface
Interfaz de gestión por socket
TCP/5038
Permite monitorear estado y
controlar Asterisk desde una
aplicación externa.
Recepción de eventos y envío de
comandos de forma asíncrona
Orientado a desarrolladores y para
ser accedida por aplicaciones.
Nicolás Gudiño - http://www.asternic.net
3. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
Asterisk Manager Interface - AMI
Es un protocolo simple de texto
plano (nombre/valor)
Desde Asterisk 1.6.2 soporta cifrado
TLS
Este tipo de interfaz no es privativa
de Asterisk. Freeswitch dispone de
una interfaz similar llamada Event
Socket.
Nicolás Gudiño - http://www.asternic.net
8. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
Asterisk Manager Interface - AMI
La naturaleza asíncrona de la interfaz
hace a veces dificil identificar una
respuesta si se envían múltiples acciones
de forma simultánea.
ActionID al rescate
Nicolás Gudiño - http://www.asternic.net
10. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
Asterisk Manager Interface - AMI
Obteniendo ayuda desde
#cli> manager show commands la consola:
Action Privilege Synopsis
------ ---------
--------
Monitor call,all Monitor a channel.
Reload system,config,a
Send a reload event.
Originate originate,all Originate a
call. Atxfer
call,all Attended transfer.
Redirect call,all Redirect (transfer)
a call. Getvar
call,reporting, Gets a channel variable.
Setvar call,all Set a channel
variable. Hangup
system,call,all Hangup channel.
Nicolás Gudiño - http://www.asternic.net
11. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
Asterisk Manager Interface - AMI
Obteniendo ayuda desde la consola:
#cli> manager show command hangup
[Syntax]Action: Hangup[ActionID:] <value>Channel:
<value>[Cause:] <value>[Synopsis]Hangup channel.
[Description]Hangup a channel.
Nicolás Gudiño - http://www.asternic.net
12. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AGI: Asterisk Gateway Interface
Interfaz síncrona de gestión directa
Permite controlar el flujo de una
llamada entrante desde scripts
externos
Los lenguajes más populares para
AGI son PHP, Perl y Python
Nicolás Gudiño - http://www.asternic.net
13. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AGI: Asterisk Gateway Interface
Utiliza STDIN, STDOUT y STDERR
para comunicación entre
procesos, por ese motivo los
scripts deben correr en el mismo
servidor
FastAGI: implementación de AGI
via TCP/IP para evitar la limitación
de correr en el mismo servidor
Nicolás Gudiño - http://www.asternic.net
15. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AGI: Asterisk Gateway Interface
Los scripts AGI se guardan por defecto en
el directorio:
/var/lib/asterisk/agi-bin
Invocando un script AGI desde el dialplan
[from-internal-custom]exten => 1000,1,Answer
exten => 1000,n,AGI(test.agi,arg1,..,argn)
Nicolás Gudiño - http://www.asternic.net
16. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AGI: Asterisk Gateway Interface
Obteniendo ayuda
#cli> agi show commands desde la consola:
Command Description answer Answer channel
asyncagi break Interrupts Async AGI
channel status Returns status of the connected channel.
database del Removes database key/value exec
Executes a given Application get data
Prompts for DTMF on a channel hangup
Hangup a channel. say digits
Says a given digit string.
answer Answer channel asyncagi
break Interrupts Async AGI channel status Returns status
of the connected channel. database del Removes database
key/value exec Executes a given Application
get data Prompts for DTMF on a channel
hangup Hangup a channel.
say digits Says a given digit string.
Nicolás Gudiño - http://www.asternic.net
18. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
Diferencias AGI y AMI
AGI es invocado desde el dialplan,
un llamado pasa a ser controlado
por un script.
AMI es accesible externamente, no
se invoca desde el dialplan, sino
que se reciben eventos de estado
y se pueden enviar ciertos
comandos a través de una
conexión TCP/IP.
Nicolás Gudiño - http://www.asternic.net
19. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
Diferencias AGI y AMI
AGI es síncrono, se ejecutan
comandos de forma secuencial.
Hay que esperar a que finalice un
comando para ejecutar el
siguiente.
La interfaz AMI es asíncrona, los
eventos pueden recibirse de forma
intercalada a las respuestas a
nuestras acciones.
Nicolás Gudiño - http://www.asternic.net
20. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AMI + AGI = agi:async
AMI es ideal para monitoreo, pero
tiene limitaciones para controlar
llamados
AGI permite controlar llamados:
ejecutar sonidos, aceptar dígitos y
actuar en consecuencia
AsyncAGI contribuido por Moisés
Silva (moy), permite invocar
comandos AGI de control desde
AMI
Nicolás Gudiño - http://www.asternic.net
21. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AMI + AGI = agi:async
Invocando agi:async desde el dialplan
[from-internal-custom]exten => 1000,1,Answer
exten => 1000,n,Wait(1)
exten => 1000,n,AGI(agi:async)
exten => 1000,n,Hangup
Al igual que AGI, se invoca desde el
dialplan y se pone a un canal en modo
AGI para ser controlado asíncronamente.
Nicolás Gudiño - http://www.asternic.net
22. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AMI + AGI = agi:async
Evento AMI cuando se inicia AsyncAGI
Event: AsyncAGIPrivilege: agi,allSubEvent:
StartChannel: SIP/609-000003d4Env: agi_request%3A
%20async%0Aagi_channel%3A%20SIP%2F609-
000003d4%0Aagi_language%3A%20es%0Aagi_type%3A%20SIP
%0Aagi_uniqueid%3A%201354405084.1864%0Aagi_version%3A
%201.8.13.0-rc1%0Aagi_callerid%3A
%20609%0Aagi_calleridname%3A%20device
Nicolás Gudiño - http://www.asternic.net
23. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AMI + AGI = agi:async
Ejecución de un comando AGI via AMI
Action: AGIChannel: SIP/609-000003d4Command: EXEC
Playback tt-monkeysCommandId: 1234
Ejecución de un comando AGI via CLI
CLI>agi exec SIP/609-000003d4 “EXEC Playback tt-monkeys”
Nicolás Gudiño - http://www.asternic.net
24. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AMI + AGI = agi:async
Más ejemplos de comandos AGI via AMI
Action: AGIChannel: SIP/609-00000201Command: SAY
PHONETIC 4K 1CommandId: 1234Action: AGIChannel: SIP/609-
00000203Command: EXEC AMD
2000,2000,1000,5000,120,50,4,256CommandId: 1234
Nicolás Gudiño - http://www.asternic.net
25. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AMI + AGI = agi:async
Deteniendo la ejecución de agi:async
Action: AGIChannel: SIP/609-00000202Command: ASYNCAGI
BREAKCommandId: 1234
Luego de detener AsyncAGI, el control
retorna al dialplan en la siguiente
prioridad.
Nicolás Gudiño - http://www.asternic.net
26. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
AMI + AGI = agi:async
AsyncAGI es un wrapper asíncrono para
una interfaz síncrona.
Los comandos se van encolando y
debemos esperar la finalización de uno
para lanzar el siguiente.
Por este motivo no es una solución
integrada para el control y monitoreo
completo de llamados, sino una interfaz
híbrida.
Nicolás Gudiño - http://www.asternic.net
27. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
Problemas a enfrentar al utilizar
las APIs de Asterisk
Los nombres de canal no son
estables, y por lo tanto tampoco lo
es su identificador: uniqueid
En AMI, el formato nombre/valor
dificulta el envío de listas o datos
estructurados
La naturaleza síncrona de AGI
dificulta la creación de aplicaciones
realmente interactivas.
Nicolás Gudiño - http://www.asternic.net
28. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012
Problemas a enfrentar al utilizar
las APIs de Asterisk
Afortunadamente, ya se está
trabajando en tratar de solucionar
estos problemas para la versión 12
de Asterisk. Participen de la
discusión!
https://wiki.asterisk.org/wiki/display/AST
Nicolás Gudiño - http://www.asternic.net