asterisk apis agi amiasync
DESCRIPTION
TRANSCRIPT
Asterisk APIsAsterisk APIsAMI - AGIAMI - AGIAsyncAGIAsyncAGI
Nicolás Gudiñ[email protected]
4K Conference 2012 Bogotá
Nicolás Gudiñ[email protected]
4K Conference 2012 Bogotá
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Interfaz de gestión por socket Interfaz de gestión por socket TCP/5038TCP/5038
Permite monitorear estado y Permite monitorear estado y controlar Asterisk desde una controlar Asterisk desde una aplicación externa. aplicación externa.
Recepción de eventos y envío de Recepción de eventos y envío de comandos de forma asíncronacomandos de forma asíncrona
Orientado a desarrolladores y para Orientado a desarrolladores y para ser accedida por aplicaciones.ser accedida por aplicaciones.
AMI: Asterisk Manager Interface AMI: Asterisk Manager Interface
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Es un protocolo simple de texto Es un protocolo simple de texto plano (nombre/valor)plano (nombre/valor)
Desde Asterisk 1.6.2 soporta cifrado Desde Asterisk 1.6.2 soporta cifrado TLSTLS
Este tipo de interfaz no es privativa Este tipo de interfaz no es privativa de Asterisk. Freeswitch dispone de de Asterisk. Freeswitch dispone de una interfaz similar llamada Event una interfaz similar llamada Event Socket.Socket.
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
[general]enabled = yes[admin]secret = claveSuperSecretadeny=0.0.0.0/0.0.0.0permit=127.0.0.1/255.255.255.0read = allwrite = alleventfilter=!Event: RTCPSenteventfilter=!Event: RTCPReceived
/etc/asterisk/manager.conf
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Habilitando AMI en Asterisk
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Event: HangupPrivilege: call,allChannel: DAHDI/i2/555502341-2864Uniqueid: 1313184096.179300CallerIDNum: 555502341CallerIDName: <unknown>ConnectedLineNum: 555502341ConnectedLineName: <unknown>Cause: 16Cause-txt: Normal Clearing
Eventos (recepción)
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Action: LoginUsername: adminSecret: supersecret
Action: HangupChannel: SIP/609-000003d4Action: DBGetFamily: CFKey: 606ActionID: getvar!custom!CF/606
Acciones (envío)
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Action: LoginUsername: adminSecret: supersecret
Response: SuccessMessage: Authentication accepted
Las acciones generan respuestas:
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
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
Action: OriginateChannel: SIP/100Context: defaultExten: 5508Priority: 1ActionID: 12345Event: OriginateResponsePrivilege: call,allActionID: 12345Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten: 5508Reason: 4Uniqueid: 1239127577.456
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
#cli> manager show commands
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.
Obteniendo ayuda desde la consola:
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
#cli> manager show command hangup
[Syntax]Action: Hangup[ActionID:] <value>Channel: <value>[Cause:] <value>[Synopsis]Hangup channel. [Description]Hangup a channel.
Obteniendo ayuda desde la consola:
Asterisk Manager Interface - AMI
Asterisk Manager Interface - AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Interfaz síncrona de gestión Interfaz síncrona de gestión directa directa
Permite controlar el flujo de una Permite controlar el flujo de una llamada entrante desde scripts llamada entrante desde scripts externosexternos
Los lenguajes más populares para Los lenguajes más populares para AGI son PHP, Perl y PythonAGI son PHP, Perl y Python
AGI: Asterisk Gateway Interface AGI: Asterisk Gateway Interface
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Utiliza STDIN, STDOUT y STDERR Utiliza STDIN, STDOUT y STDERR para comunicación entre procesos, para comunicación entre procesos, por ese motivo los scripts deben por ese motivo los scripts deben correr en el mismo servidorcorrer en el mismo servidor
FastAGI: implementación de AGI FastAGI: implementación de AGI via TCP/IP para evitar la limitación via TCP/IP para evitar la limitación de correr en el mismo servidorde correr en el mismo servidor
AGI: Asterisk Gateway Interface AGI: Asterisk Gateway Interface
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
PHP AGI: PHP AGI: http://phpagi.sourceforge.net/
Asterisk Perl: Asterisk Perl: http://search.cpan.org/dist/ashttp://search.cpan.org/dist/asterisk-perl/
Python for Asterisk: http://sourceforge.net/projects/pyst/
Asterisk Java: Asterisk Java: https://blogs.reuchttps://blogs.reucon.com/asterisk-java/
AGI: Asterisk Gateway Interface AGI: Asterisk Gateway Interface
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Librerías para facilitar la programación Librerías para facilitar la programación AGI/AMIAGI/AMI
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
[from-internal-custom]exten => 1000,1,Answerexten => 1000,n,AGI(test.agi,arg1,..,argn)
Invocando un script AGI desde el dialplan
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
AGI: Asterisk Gateway Interface AGI: Asterisk Gateway Interface Los scripts AGI se guardan por defecto en el directorio:
/var/lib/asterisk/agi-bin
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
#cli> agi show commands
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.
Obteniendo ayuda desde la consola:
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AGI: Asterisk Gateway Interface AGI: Asterisk Gateway Interface
#!/usr/bin/env python2.5from asterisk.agi import *def prueba(): miagi = AGI() miagi.verbose("Probando AGIs en Python") callerId = miagi.env['agi_callerid'] miagi.verbose("Llamada desde %s" % callerId)miagi.answer() miagi.stream_file('demo-congrats') miagi.hangup()if __name__ == "__main__": prueba()
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
AGI: Asterisk Gateway Interface AGI: Asterisk Gateway Interface Ejemplo AGI en python (saghul):
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AGI es invocado desde el dialplan, AGI es invocado desde el dialplan, un llamado pasa a ser controlado un llamado pasa a ser controlado por un script.por un script.
AMI es accesible externamente, no AMI es accesible externamente, no se invoca desde el dialplan, sino se invoca desde el dialplan, sino que se reciben eventos de estado que se reciben eventos de estado y se pueden enviar ciertos y se pueden enviar ciertos comandos a través de una comandos a través de una conexión TCP/IP.conexión TCP/IP.
Diferencias AGI y AMIDiferencias AGI y AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AGI es síncrono, se ejecutan AGI es síncrono, se ejecutan comandos de forma secuencial. comandos de forma secuencial. Hay que esperar a que finalice un Hay que esperar a que finalice un comando para ejecutar el comando para ejecutar el siguiente.siguiente.
La interfaz AMI es asíncrona, los La interfaz AMI es asíncrona, los eventos pueden recibirse de forma eventos pueden recibirse de forma intercalada a las respuestas a intercalada a las respuestas a nuestras acciones.nuestras acciones.
Diferencias AGI y AMIDiferencias AGI y AMI
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AMI es ideal para monitoreo, pero AMI es ideal para monitoreo, pero tiene limitaciones para controlar tiene limitaciones para controlar llamadosllamados
AGI permite controlar llamados: AGI permite controlar llamados: ejecutar sonidos, aceptar dígitos y ejecutar sonidos, aceptar dígitos y actuar en consecuenciaactuar en consecuencia
AsyncAGI contribuido por Moisés AsyncAGI contribuido por Moisés Silva (moy), permite invocar Silva (moy), permite invocar comandos AGI de control desde comandos AGI de control desde AMIAMI
AMI + AGI = agi:asyncAMI + AGI = agi:async
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AMI + AGI = agi:asyncAMI + AGI = agi:async
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
[from-internal-custom]exten => 1000,1,Answerexten => 1000,n,Wait(1)exten => 1000,n,AGI(agi:async) exten => 1000,n,Hangup
Invocando agi:async desde el dialplan
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Al igual que AGI, se invoca desde el Al igual que AGI, se invoca desde el dialplan y se pone a un canal en modo dialplan y se pone a un canal en modo AGI para ser controlado asíncronamente.AGI para ser controlado asíncronamente.
AMI + AGI = agi:asyncAMI + AGI = agi:async
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
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
Evento AMI cuando se inicia AsyncAGI
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AMI + AGI = agi:asyncAMI + AGI = agi:async
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Action: AGIChannel: SIP/609-000003d4Command: EXEC Playback tt-monkeysCommandId: 1234
Ejecución de un comando AGI via AMI
Ejecución de un comando AGI via CLI
CLI>agi exec SIP/609-000003d4 “EXEC Playback tt-monkeys”
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AMI + AGI = agi:asyncAMI + AGI = agi:async
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
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
Más ejemplos de comandos AGI via AMI
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AMI + AGI = agi:asyncAMI + AGI = agi:async
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Action: AGIChannel: SIP/609-00000202Command: ASYNCAGI BREAKCommandId: 1234
Deteniendo la ejecución de agi:async
Luego de detener AsyncAGI, el control Luego de detener AsyncAGI, el control retorna al dialplan en la siguiente retorna al dialplan en la siguiente prioridad.prioridad.
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AMI + AGI = agi:asyncAMI + AGI = agi:async
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
AsyncAGI es un wrapper asíncrono para AsyncAGI es un wrapper asíncrono para una interfaz síncrona. una interfaz síncrona.
Los comandos se van encolando y Los comandos se van encolando y debemos esperar la finalización de uno debemos esperar la finalización de uno para lanzar el siguiente.para lanzar el siguiente.
Por este motivo no es una solución Por este motivo no es una solución integrada para el control y monitoreo integrada para el control y monitoreo completo de llamados, sino una interfaz completo de llamados, sino una interfaz híbrida.híbrida.
Problemas a enfrentar al utilizar las APIs de Asterisk
Problemas a enfrentar al utilizar las APIs de Asterisk
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Los nombres de canal no son Los nombres de canal no son estables, y por lo tanto tampoco lo estables, y por lo tanto tampoco lo es su identificador: uniqueides su identificador: uniqueid
En AMI, el formato nombre/valor En AMI, el formato nombre/valor dificulta el envío de listas o datos dificulta el envío de listas o datos estructuradosestructurados
La naturaleza síncrona de AGI La naturaleza síncrona de AGI dificulta la creación de dificulta la creación de aplicaciones realmente aplicaciones realmente interactivas.interactivas.
Problemas a enfrentar al utilizar las APIs de Asterisk
Problemas a enfrentar al utilizar las APIs de Asterisk
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012 Asterisk APIs: AMI, AGI, AsyncAGI 4K
Conference 2012
Afortunadamente, ya se está Afortunadamente, ya se está trabajando en tratar de solucionar trabajando en tratar de solucionar estos problemas para la versión 12 estos problemas para la versión 12 de Asterisk. Participen de la de Asterisk. Participen de la discusión!discusión!
https://wiki.asterisk.org/wiki/display/AST/Asterisk+12+API+Improvements
¿ ¿ Preguntas ?Preguntas ?
Nicolás Gudiñ[email protected]
Nicolás Gudiñ[email protected]
Asterisk APIs: AMI, AGI, agi:async 4K
Conference 2012 Asterisk APIs: AMI, AGI, agi:async 4K
Conference 2012
Nicolás Gudiño - http://www.asternic.net Nicolás Gudiño - http://www.asternic.net