SlideShare uma empresa Scribd logo
1 de 29
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 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
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
Asterisk APIs: AMI, AGI, AsyncAGI          4K Conference 2012




Asterisk 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: RTCPReceived




Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI                  4K Conference 2012




Asterisk Manager Interface - AMI
Eventos (recepción)



 Event: HangupPrivilege: call,allChannel: DAHDI/i2/555502341-
 2864Uniqueid: 1313184096.179300CallerIDNum:
 555502341CallerIDName: <unknown>ConnectedLineNum:
 555502341ConnectedLineName: <unknown>Cause: 16Cause-txt: Normal
 Clearing




Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI                  4K Conference 2012




Asterisk Manager Interface - AMI
Acciones (envío)



 Action: Login
 Username: admin
 Secret: supersecret

 Action: HangupChannel: SIP/609-000003d4Action: DBGetFamily:
 CFKey: 606ActionID: getvar!custom!CF/606




Nicolás Gudiño - http://www.asternic.net
Asterisk APIs: AMI, AGI, AsyncAGI                     4K Conference 2012




Asterisk Manager Interface - AMI
  Las acciones generan respuestas:

  Action: Login
  Username: admin
  Secret: supersecret

  Response: SuccessMessage: Authentication accepted




Nicolás Gudiño - http://www.asternic.net
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
Asterisk APIs: AMI, AGI, AsyncAGI                 4K Conference 2012




Asterisk Manager Interface - AMI

Action: OriginateChannel: SIP/100Context: defaultExten:
5508Priority: 1ActionID: 12345
Event: OriginateResponsePrivilege: call,allActionID: 12345
Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten:
5508Reason: 4Uniqueid: 1239127577.456
Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten:
5508Reason: 4Uniqueid: 1239127577.456
Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten:
5508Reason: 4Uniqueid: 1239127577.456




Nicolás Gudiño - http://www.asternic.net
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
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
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
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
Asterisk APIs: AMI, AGI, AsyncAGI   4K Conference 2012




AGI: Asterisk Gateway Interface
Librerías para facilitar la programación
 PHP AGI:
AGI/AMI
 http://phpagi.sourceforge.net/
Asterisk Perl:
http://search.cpan.org/dist/as
terisk-perl/
Python for Asterisk:
http://sourceforge.net/projects/pyst/
Asterisk Java:
https://blogs.reuc
on.com/asterisk-java/
Nicolás Gudiño - http://www.asternic.net
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
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
Asterisk APIs: AMI, AGI, AsyncAGI                 4K Conference 2012




AGI: 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
         AMI
Nicolá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,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
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
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
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
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
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
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
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
Asterisk APIs: AMI, AGI, agi:async          4K Conference 2012




                           ¿ Preguntas ?

                          Nicolás Gudiño
                       asternic@gmail.com




Nicolás Gudiño - http://www.asternic.net

Mais conteúdo relacionado

Mais procurados

Curso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzadosCurso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzadosIrontec
 
Curso de VoIP / Parte 02: SIP
Curso de VoIP / Parte 02: SIPCurso de VoIP / Parte 02: SIP
Curso de VoIP / Parte 02: SIPIrontec
 
Seguridad en VoIP
Seguridad en VoIPSeguridad en VoIP
Seguridad en VoIPIrontec
 
Curso de introducción a Sphinx | Irontec
Curso de introducción a Sphinx | IrontecCurso de introducción a Sphinx | Irontec
Curso de introducción a Sphinx | IrontecIrontec
 
Introducción a la VoIP con Asterisk
Introducción a la VoIP con AsteriskIntroducción a la VoIP con Asterisk
Introducción a la VoIP con AsteriskElio Rojano
 
Homologación Avanzada7 Panasonic KX TGP550
Homologación Avanzada7 Panasonic KX TGP550Homologación Avanzada7 Panasonic KX TGP550
Homologación Avanzada7 Panasonic KX TGP550avanzada7
 
Conectando a la red telefónica: Dispositivos Openvox
Conectando a la red telefónica: Dispositivos OpenvoxConectando a la red telefónica: Dispositivos Openvox
Conectando a la red telefónica: Dispositivos OpenvoxPaloSanto Solutions
 
Seguridad en Asterisk: Un acercamiento detallado
Seguridad en Asterisk: Un acercamiento detalladoSeguridad en Asterisk: Un acercamiento detallado
Seguridad en Asterisk: Un acercamiento detalladoPaloSanto Solutions
 
El control de la informacion
El control de la informacionEl control de la informacion
El control de la informacionElio Rojano
 
Protocolos wan tema4_ciclo_i_2016
Protocolos wan tema4_ciclo_i_2016Protocolos wan tema4_ciclo_i_2016
Protocolos wan tema4_ciclo_i_2016luisantonio222
 
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...PaloSanto Solutions
 
Ejercicios de repaso subredes
Ejercicios de repaso subredesEjercicios de repaso subredes
Ejercicios de repaso subredesAnita Sichique
 
Irontec - Presentación de servicios de telefonía IP
Irontec - Presentación de servicios de telefonía IPIrontec - Presentación de servicios de telefonía IP
Irontec - Presentación de servicios de telefonía IPIrontec
 
Integración segura de extensiones remotas con Elastix utilizando Sangoma SBC
Integración segura de extensiones remotas con Elastix utilizando Sangoma SBCIntegración segura de extensiones remotas con Elastix utilizando Sangoma SBC
Integración segura de extensiones remotas con Elastix utilizando Sangoma SBCPaloSanto Solutions
 

Mais procurados (20)

Curso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzadosCurso de VoIP / Parte 04: Conceptos avanzados
Curso de VoIP / Parte 04: Conceptos avanzados
 
Curso de VoIP / Parte 02: SIP
Curso de VoIP / Parte 02: SIPCurso de VoIP / Parte 02: SIP
Curso de VoIP / Parte 02: SIP
 
Seguridad en VoIP
Seguridad en VoIPSeguridad en VoIP
Seguridad en VoIP
 
(in) seguridad en VoIP
(in) seguridad en VoIP(in) seguridad en VoIP
(in) seguridad en VoIP
 
Curso de introducción a Sphinx | Irontec
Curso de introducción a Sphinx | IrontecCurso de introducción a Sphinx | Irontec
Curso de introducción a Sphinx | Irontec
 
Introducción a la VoIP con Asterisk
Introducción a la VoIP con AsteriskIntroducción a la VoIP con Asterisk
Introducción a la VoIP con Asterisk
 
Curso de Asterisk (e-Verano 2007)
Curso de Asterisk (e-Verano 2007)Curso de Asterisk (e-Verano 2007)
Curso de Asterisk (e-Verano 2007)
 
Homologación Avanzada7 Panasonic KX TGP550
Homologación Avanzada7 Panasonic KX TGP550Homologación Avanzada7 Panasonic KX TGP550
Homologación Avanzada7 Panasonic KX TGP550
 
Conectando a la red telefónica: Dispositivos Openvox
Conectando a la red telefónica: Dispositivos OpenvoxConectando a la red telefónica: Dispositivos Openvox
Conectando a la red telefónica: Dispositivos Openvox
 
Seguridad en Asterisk: Un acercamiento detallado
Seguridad en Asterisk: Un acercamiento detalladoSeguridad en Asterisk: Un acercamiento detallado
Seguridad en Asterisk: Un acercamiento detallado
 
Tema 5
Tema 5Tema 5
Tema 5
 
El control de la informacion
El control de la informacionEl control de la informacion
El control de la informacion
 
Protocolos wan tema4_ciclo_i_2016
Protocolos wan tema4_ciclo_i_2016Protocolos wan tema4_ciclo_i_2016
Protocolos wan tema4_ciclo_i_2016
 
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
Tres componentes fundamentales de un buen PBX IP: seguridad, alta disponibili...
 
Utilerias
UtileriasUtilerias
Utilerias
 
Ejercicios de repaso subredes
Ejercicios de repaso subredesEjercicios de repaso subredes
Ejercicios de repaso subredes
 
Tema 5
Tema 5Tema 5
Tema 5
 
Irontec - Presentación de servicios de telefonía IP
Irontec - Presentación de servicios de telefonía IPIrontec - Presentación de servicios de telefonía IP
Irontec - Presentación de servicios de telefonía IP
 
Integración segura de extensiones remotas con Elastix utilizando Sangoma SBC
Integración segura de extensiones remotas con Elastix utilizando Sangoma SBCIntegración segura de extensiones remotas con Elastix utilizando Sangoma SBC
Integración segura de extensiones remotas con Elastix utilizando Sangoma SBC
 
Tema 5
Tema 5Tema 5
Tema 5
 

Semelhante a Asterisk APIs

App engine
App engineApp engine
App engineThirdWay
 
Integración Continua con Gitlab + Fastlane
Integración Continua con Gitlab + FastlaneIntegración Continua con Gitlab + Fastlane
Integración Continua con Gitlab + FastlaneJesús Martín Alonso
 
Consiguiendo superpoderes para construir aplicaciones modernas en la JVM con ZIO
Consiguiendo superpoderes para construir aplicaciones modernas en la JVM con ZIOConsiguiendo superpoderes para construir aplicaciones modernas en la JVM con ZIO
Consiguiendo superpoderes para construir aplicaciones modernas en la JVM con ZIOJorge Vásquez
 
Aula Virtual utilizando utilizando Conference XP de Microsoft
Aula Virtual utilizando utilizando Conference XP de MicrosoftAula Virtual utilizando utilizando Conference XP de Microsoft
Aula Virtual utilizando utilizando Conference XP de MicrosoftJulián Santiago Bruno
 
Charla Asterisk - UPCI
Charla Asterisk - UPCICharla Asterisk - UPCI
Charla Asterisk - UPCIguest1e22df3
 
Airbase y KARMetasploit
Airbase y KARMetasploitAirbase y KARMetasploit
Airbase y KARMetasploitDaniel
 
2015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 22015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 2Tomás García-Merás
 
Comunicaciones ADS-B
Comunicaciones ADS-BComunicaciones ADS-B
Comunicaciones ADS-BAlex Casanova
 
internet of things day 2014 (taller)
internet of things day 2014 (taller)internet of things day 2014 (taller)
internet of things day 2014 (taller)David Sánchez Falero
 
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboards
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboardsTaller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboards
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboardsSofia2 Smart Platform
 
Charla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + IonicCharla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + IonicRubén Aguilera
 
Análisis de clientes ICA
Análisis de clientes ICAAnálisis de clientes ICA
Análisis de clientes ICAJoaquin Herrero
 
Securizando por construcción mediante MDE
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDEPedro J. Molina
 

Semelhante a Asterisk APIs (20)

App engine
App engineApp engine
App engine
 
Integración Continua con Gitlab + Fastlane
Integración Continua con Gitlab + FastlaneIntegración Continua con Gitlab + Fastlane
Integración Continua con Gitlab + Fastlane
 
Consiguiendo superpoderes para construir aplicaciones modernas en la JVM con ZIO
Consiguiendo superpoderes para construir aplicaciones modernas en la JVM con ZIOConsiguiendo superpoderes para construir aplicaciones modernas en la JVM con ZIO
Consiguiendo superpoderes para construir aplicaciones modernas en la JVM con ZIO
 
Aula Virtual utilizando utilizando Conference XP de Microsoft
Aula Virtual utilizando utilizando Conference XP de MicrosoftAula Virtual utilizando utilizando Conference XP de Microsoft
Aula Virtual utilizando utilizando Conference XP de Microsoft
 
Charla Asterisk - UPCI
Charla Asterisk - UPCICharla Asterisk - UPCI
Charla Asterisk - UPCI
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
Asterisk seminario web
Asterisk seminario webAsterisk seminario web
Asterisk seminario web
 
Airbase y KARMetasploit
Airbase y KARMetasploitAirbase y KARMetasploit
Airbase y KARMetasploit
 
2015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 22015 10 - Curso Cliente @firma INAP día 2
2015 10 - Curso Cliente @firma INAP día 2
 
Comunicaciones ADS-B
Comunicaciones ADS-BComunicaciones ADS-B
Comunicaciones ADS-B
 
Modelo Comercial Plataforma Sofia2
Modelo Comercial Plataforma Sofia2Modelo Comercial Plataforma Sofia2
Modelo Comercial Plataforma Sofia2
 
OpenAPI 3.0.2
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
 
Voice OVER IP
Voice OVER IPVoice OVER IP
Voice OVER IP
 
internet of things day 2014 (taller)
internet of things day 2014 (taller)internet of things day 2014 (taller)
internet of things day 2014 (taller)
 
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboards
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboardsTaller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboards
Taller IoT: desarrollo visual en Sofia2 con Raspberry Pi, Node-RED y dashboards
 
Charla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + IonicCharla GDG Madrid: Cordova + AngularJS + Ionic
Charla GDG Madrid: Cordova + AngularJS + Ionic
 
Análisis de clientes ICA
Análisis de clientes ICAAnálisis de clientes ICA
Análisis de clientes ICA
 
Node.js on Raspberry PI
Node.js on Raspberry PINode.js on Raspberry PI
Node.js on Raspberry PI
 
Presentación shodan
Presentación   shodanPresentación   shodan
Presentación shodan
 
Securizando por construcción mediante MDE
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
 

Asterisk APIs

  • 1. 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
  • 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
  • 4. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 Asterisk 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: RTCPReceived Nicolás Gudiño - http://www.asternic.net
  • 5. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 Asterisk Manager Interface - AMI Eventos (recepción) Event: HangupPrivilege: call,allChannel: DAHDI/i2/555502341- 2864Uniqueid: 1313184096.179300CallerIDNum: 555502341CallerIDName: <unknown>ConnectedLineNum: 555502341ConnectedLineName: <unknown>Cause: 16Cause-txt: Normal Clearing Nicolás Gudiño - http://www.asternic.net
  • 6. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 Asterisk Manager Interface - AMI Acciones (envío) Action: Login Username: admin Secret: supersecret Action: HangupChannel: SIP/609-000003d4Action: DBGetFamily: CFKey: 606ActionID: getvar!custom!CF/606 Nicolás Gudiño - http://www.asternic.net
  • 7. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 Asterisk Manager Interface - AMI Las acciones generan respuestas: Action: Login Username: admin Secret: supersecret Response: SuccessMessage: Authentication accepted 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
  • 9. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 Asterisk Manager Interface - AMI Action: OriginateChannel: SIP/100Context: defaultExten: 5508Priority: 1ActionID: 12345 Event: OriginateResponsePrivilege: call,allActionID: 12345 Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten: 5508Reason: 4Uniqueid: 1239127577.456 Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten: 5508Reason: 4Uniqueid: 1239127577.456 Response: SuccessChannel: SIP/100-0000ae1Context: defaultExten: 5508Reason: 4Uniqueid: 1239127577.456 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
  • 14. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 AGI: Asterisk Gateway Interface Librerías para facilitar la programación PHP AGI: AGI/AMI http://phpagi.sourceforge.net/ Asterisk Perl: http://search.cpan.org/dist/as terisk-perl/ Python for Asterisk: http://sourceforge.net/projects/pyst/ Asterisk Java: https://blogs.reuc on.com/asterisk-java/ 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
  • 17. Asterisk APIs: AMI, AGI, AsyncAGI 4K Conference 2012 AGI: 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
  • 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
  • 29. Asterisk APIs: AMI, AGI, agi:async 4K Conference 2012 ¿ Preguntas ? Nicolás Gudiño asternic@gmail.com Nicolás Gudiño - http://www.asternic.net