Asterisk apis agi amiasync

Preview:

DESCRIPTION

 

Citation preview

Asterisk APIsAsterisk APIsAMI - AGIAMI - AGIAsyncAGIAsyncAGI

Nicolás Gudiñoasternic@gmail.com

4K Conference 2012 Bogotá

Nicolás Gudiñoasternic@gmail.com

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ñoasternic@gmail.com

Nicolás Gudiñoasternic@gmail.com

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

Recommended