Asterisk apis agi amiasync
Upcoming SlideShare
Loading in...5
×
 

Asterisk apis agi amiasync

on

  • 1,195 views

 

Statistics

Views

Total Views
1,195
Views on SlideShare
1,195
Embed Views
0

Actions

Likes
0
Downloads
24
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Asterisk apis agi amiasync Asterisk apis agi amiasync Presentation Transcript

  • Asterisk APIs AMI - AGI AsyncAGI AsyncAGI AsyncAGI Nicolás Gudiño asternic@gmail.com 4K Conference 2012 BogotáNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012AMI: 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
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk 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
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk Manager Interface - AMI Habilitando AMI en Asterisk /etc/asterisk/manager.conf [general]enabled = yes [admin]secret = claveSuperSecretadeny=0.0.0.0/0.0.0.0permit=127.0.0.1/2 55.255.255.0read = allwrite = alleventfilter=!Event: RTCPSenteventfilter=!Event: RTCPReceivedNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk Manager Interface - AMIEventos (recepción) Event: HangupPrivilege: call,allChannel: DAHDI/i2/555502341- 2864Uniqueid: 1313184096.179300CallerIDNum: 555502341CallerIDName: <unknown>ConnectedLineNum: 555502341ConnectedLineName: <unknown>Cause: 16Cause-txt: Normal ClearingNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk Manager Interface - AMIAcciones (envío) Action: Login Username: admin Secret: supersecret Action: HangupChannel: SIP/609-000003d4Action: DBGetFamily: CFKey: 606ActionID: getvar!custom!CF/606Nicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk Manager Interface - AMI Las acciones generan respuestas: Action: Login Username: admin Secret: supersecret Response: SuccessMessage: Authentication acceptedNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk 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 rescateNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk Manager Interface - AMIAction: OriginateChannel: SIP/100Context: defaultExten:5508Priority: 1ActionID: 12345Event: OriginateResponsePrivilege: call,allActionID: 12345Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten:5508Reason: 4Uniqueid: 1239127577.456Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten:5508Reason: 4Uniqueid: 1239127577.456Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten:5508Reason: 4Uniqueid: 1239127577.456Nicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk Manager Interface - AMIObteniendo ayuda desde#cli> manager show commands la consola: Action Privilege Synopsis ------ -----------------Monitor call,all Monitor a channel. Reload system,config,aSend a reload event. Originate originate,all Originate acall. Atxfercall,all Attended transfer. Redirect call,all Redirect (transfer)a call. Getvarcall,reporting, Gets a channel variable. Setvar call,all Set a channelvariable. Hangupsystem,call,all Hangup channel.Nicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Asterisk Manager Interface - AMIObteniendo 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
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012AGI: 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 PythonNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012AGI: 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 servidorNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012AGI: Asterisk Gateway InterfaceLibrerías para facilitar la programación PHP AGI:AGI/AMI http://phpagi.sourceforge.net/Asterisk Perl:http://search.cpan.org/dist/asterisk-perl/Python for Asterisk:http://sourceforge.net/projects/pyst/Asterisk Java:https://blogs.reucon.com/asterisk-java/Nicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012AGI: 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
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012AGI: Asterisk Gateway InterfaceObteniendo ayuda#cli> agi show commands desde la consola:Command Description answer Answer channel asyncagi break Interrupts Async AGIchannel status Returns status of the connected channel.database del Removes database key/value execExecutes a given Application get data Prompts for DTMF on a channel hangup Hangup a channel. say digitsSays a given digit string. answer Answer channel asyncagibreak Interrupts Async AGI channel status Returns statusof the connected channel. database del Removes databasekey/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
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012AGI: Asterisk Gateway Interface Ejemplo AGI en python (saghul): #!/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
  • 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
  • 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
  • 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 AMINicolás Gudiño - http://www.asternic.net
  • 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,HangupAl igual que AGI, se invoca desde eldialplan y se pone a un canal en modoAGI para ser controlado asíncronamente. Nicolás Gudiño - http://www.asternic.net
  • 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%20deviceNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 AMI + AGI = agi:asyncEjecución de un comando AGI via AMIAction: AGIChannel: SIP/609-000003d4Command: EXECPlayback tt-monkeysCommandId: 1234Ejecución de un comando AGI via CLICLI>agi exec SIP/609-000003d4 “EXEC Playback tt-monkeys”Nicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 AMI + AGI = agi:asyncMás ejemplos de comandos AGI via AMIAction: AGIChannel: SIP/609-00000201Command: SAYPHONETIC 4K 1CommandId: 1234Action: AGIChannel: SIP/609-00000203Command: EXEC AMD2000,2000,1000,5000,120,50,4,256CommandId: 1234Nicolás Gudiño - http://www.asternic.net
  • 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: 1234Luego de detener AsyncAGI, el controlretorna al dialplan en la siguienteprioridad.Nicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 AMI + AGI = agi:asyncAsyncAGI es un wrapper asíncrono parauna interfaz síncrona.Los comandos se van encolando ydebemos esperar la finalización de unopara lanzar el siguiente.Por este motivo no es una soluciónintegrada para el control y monitoreocompleto de llamados, sino una interfazhíbrida.Nicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Problemas 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
  • Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012Problemas 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/ASTNicolás Gudiño - http://www.asternic.net
  • Asterisk APIs: AMI, AGI, agi:async 4K Conference 2012 ¿ Preguntas ? Nicolás Gudiño asternic@gmail.comNicolás Gudiño - http://www.asternic.net