SlideShare una empresa de Scribd logo
Asterisk
Asterisk Gateway Interface
AGI
 La AGI (o Asterisk Gateway Interface) provee
una interfaz estándar para que programas
externos puedan controlar el plan de marcación.
 Generalmente, los scripts AGI se utilizan para
realizar lógica avanzada, comunicarse con base
de datos relacionales, etc.
 Los lenguajes más comunes de programación
de scripts AGI son: PHP, Python y Perl, aunque
se puede utilizar cualquier otro lenguaje.
2
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI
 El intercambio de información del script con
Asterisk se realiza vía los canales de
comunicación: STDIN, STDOUT y STDERR.
 Lee desde STDIN para obtener información.
 Escribe en STDOUT para enviar información.
 Escribe en STDERR para enviar información de
debugging.
 El script AGI envía comandos a Asterisk
escribiendo en el STDOUT. Seguidamente
Asterisk envía una respuesta por cada uno de
ellos que es leída por el script.
3
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI
 La respuesta del servidor Asterisk ante un pedido es de
la sig forma:
<code> result=<result> [data]
donde
 code es un código de respuesta similar a HTTP (200 en caso de
éxito, 5XX en caso de error).
 result es el resultado del comando (los valores más
convencionales son -1 para errores, 0 si fue exitosa la
ejecución)
 data es un conjunto de datos adicionales que pueden ser
enviados por comando específicos (por ej, “timeout” para un
comando temporizado)
4
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI
 Cuando Asterisk comienza la llamada al script,
envía un conjunto de variables relacionadas con
el canal en el STDIN.
Por ejemplo:
 agi_request: nombre del script
 agi_channel: nombre del canal
 agi_language: lenguaje del canal (en, es)
 agi_type: tipo de canal (sip, iax, etc.)
 etc.
5
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI
 Algunos ejemplos de comandos son:
 ANSWER: atiende.
 HANGUP: cuelga.
 SAY [NUMBER | DIGITS | ALPHA | PHONETICS]: dice un
número, dígito, caracter o un cadena fonéticamente.
 SET [CONTEXT | EXTENSION | PRIORITY]: establece un
nuevo contexto, extensión o prioridad luego de finalizada la
ejecución de script.
 VERBOSE: imprime un mensaje en el log.
 WAIT FOR DIGIT: espera que se presione un dígito.
 [SET | GET] VARIABLE: asigna u obtiene el valor de una
variable del plan de marcación.
6
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI
 El programa debe:
 Tener derechos de ejecución y presentar un
intérprete válido
 Ej yum –y install php; chmod 755 mi_script.php
 Estar localizado por defecto en /var/lib/asterisk/agi-
bin
 Cómo llamar al script desde el dialplan:
exten => 123,1,Answer()
exten => 123,2,AGI(mi_script.php,arg1,..,argn)
7
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI: ejemplo en PHP
 El siguiente script está escrito en PHP y dicta los
números que se encuentran en el archivo que se le
pasa como parámetro:
#!/usr/bin/php -q
<?php
// Esta línea es para que que haga no mantenga en un buffer el output
ob_implicit_flush(true);
set_time_limit(60);
error_reporting(0);
// Se abren los diferentes archivos (STDIN, STDOUT y un archivo de log del AGI)
$in = fopen("php://stdin","r");
$out = fopen("php://stdout","w");
$stdlog = fopen("/var/log/asterisk/my_agi.log", “a");
// Si debug es true, escribe en el archivo de log definido anteriormente
$debug = true;
8
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI: ejemplo en PHP
// Toma el nombre del archivo con los números a dictar del primer parámetro
$archivo = $argv[1];
// Define la funcion read, que lee el input del STDIN
function read() {
global $in, $debug, $stdlog;
$input = str_replace("n", "", fgets($in, 4096));
if ($debug) fputs($stdlog, "read: $inputn");
return $input;
}
// Define la funcion write, que escribe el output en el STDOUT
function write($line) {
global $debug, $stdlog, $out;
if ($debug) fputs($stdlog, "write: $linen");
fputs($out,$line."n");
fflush($out);
}
9
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI: ejemplo en PHP
// Parsea los headers del AGI (variables de entorno, etc)
while ($env=read()) {
$s = split(": ",$env);
$agi[str_replace("agi_","",$s[0])] = trim($s[1]);
if (($env == "") || ($env == "n")) {
break;
}
}
// Lee el archivo que se paso como parametro
$lines = file($archivo);
10
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI: ejemplo en PHP
// Reproduce los digitos contenidos en cada linea del mismo
// informando en el log del Asterisk la accion realizada
foreach ($lines as $line) {
$line=trim($line);
for ($i=0;$i<strlen($line);$i++) {
write("VERBOSE "REPRODUCIENDO DIGITO $line[$i]"");
read();
write("SAY DIGITS $line[$i] """);
read();
sleep(1);
}
}
// Se cierran todos los handlers de archivos
fclose($in);
fclose($out);
fclose($stdlog);
exit;
11
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI: ejemplo en PHP
 Por ejemplo, si se quiere asociar el script
a la extensión 200, se debe agregar al
dialplan:
exten => 200,1,Answer();
exten => 200,2,AGI(dicta.php,/tmp/numeros.txt)
exten => 200,3,Hangup()
12
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
AGI: CLI
 Los siguientes comandos pueden ser
ejecutados en la CLI para obtener información
sobre la AGI:
 agi show commands topic <command>: muestra
información sobre el comando <command> del AGI.
 agi show commands: lista todos los comandos del agi
 agi set debug on/off: activa/desactiva el debugging de
la ejecución de scripts vía la AGI
13
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
Ejercicio 10: AGI
 Implementar una funcionalidad en
Asterisk utilizando AGI
14
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo
Curso elaborado por
Julián Dunayevich, Lázaro Baca, Andrés Brassara,
Santiago Alberch y Antonio Lobo
Detalles de la licencia:
http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR
Autores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, SantiagoAutores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago
Alberch, Antonio LoboAlberch, Antonio Lobo
(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5
Basándose en: Irontec: contacto@irontec.com (CC)
Asterisk, The Future of Telephony, Jim Meggelen, Jared Smith, and Leif Madsen, O´REILLY, 2005
julian@dunayevich.com
lazaro.baca@gmail.com
abrassara@gmail.com
salberch@gmail.com
antoniwolf@gmail.com
15
Julián Dunayevich, Lázaro Baca,
Andrés Brassara, Santiago Alberch,
Antonio Lobo

Más contenido relacionado

PPT
Capítulo 3 - QoS - Calidad de Servicio
PDF
Capítulo VIII - Microondas - Características de los equipos de radio enlaces ...
PPTX
Tipos y topologías de redes
PPT
Chapter03 a - network media
PDF
Capítulo I - Fundamentos de Comunicaciones Móviles
PDF
Conmutación de Etiquetas Mult-Protocolo
PPTX
Cable, directo, cruzado y rollover
PPTX
EtherChannel.pptx
Capítulo 3 - QoS - Calidad de Servicio
Capítulo VIII - Microondas - Características de los equipos de radio enlaces ...
Tipos y topologías de redes
Chapter03 a - network media
Capítulo I - Fundamentos de Comunicaciones Móviles
Conmutación de Etiquetas Mult-Protocolo
Cable, directo, cruzado y rollover
EtherChannel.pptx

La actualidad más candente (20)

ODP
Presentación tcp y udp
PDF
Conmutación telefónica
PPTX
Protocolo ARP
PDF
Cap1 mod4(sol)
PPTX
Gateway
PPTX
Nap y roseta
PPTX
Conceptos y protocolos de enrutamiento: 1.1 Configuración básica de una red -...
PPTX
8.1 El canal óptico: la fibra óptica
PPTX
Sesión n° 20 com sat (1)
PPTX
Análisis de Internet de las Cosas (IoT) en el proceso de enseñanza de ingenie...
PDF
Comandos de configuracion de dispositivos cisco
DOCX
5.2.2.6 lab configuring dynamic and static nat - ilm
PDF
Tema 2: Large-scale path loss
PPTX
Conmutación Telefónica
PDF
CI19. Presentación 4. Large scale path loss (completa)
PPT
Comunicaciones digitales
PDF
Introducción a Asterisk
PPT
Claves para el diseño conceptual de Centro de Datos
DOCX
La Ionosfera y las Comunicaciones
Presentación tcp y udp
Conmutación telefónica
Protocolo ARP
Cap1 mod4(sol)
Gateway
Nap y roseta
Conceptos y protocolos de enrutamiento: 1.1 Configuración básica de una red -...
8.1 El canal óptico: la fibra óptica
Sesión n° 20 com sat (1)
Análisis de Internet de las Cosas (IoT) en el proceso de enseñanza de ingenie...
Comandos de configuracion de dispositivos cisco
5.2.2.6 lab configuring dynamic and static nat - ilm
Tema 2: Large-scale path loss
Conmutación Telefónica
CI19. Presentación 4. Large scale path loss (completa)
Comunicaciones digitales
Introducción a Asterisk
Claves para el diseño conceptual de Centro de Datos
La Ionosfera y las Comunicaciones
Publicidad

Destacado (13)

DOCX
Institutional research
PPTX
Grade de cursos
PDF
Study-on-Consumption-and-Saving-Patters
PDF
Deducibilità perdite su crediti e recupero iva aics verona 20161116
PDF
Econchar Tunderwater112009
PPTX
Integrating specification in to BIM process and delivery | Empowering you in ...
PDF
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
DOCX
Trade Operations TRADE NEGOTIATIONS
PDF
IBOR Middle Office Information Delivery
DOCX
Assignment on foreign trade policy
PPTX
global digital healthcare market
PPTX
BIM Through The Project Timeline | Ecobuild 2016
Institutional research
Grade de cursos
Study-on-Consumption-and-Saving-Patters
Deducibilità perdite su crediti e recupero iva aics verona 20161116
Econchar Tunderwater112009
Integrating specification in to BIM process and delivery | Empowering you in ...
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
Trade Operations TRADE NEGOTIATIONS
IBOR Middle Office Information Delivery
Assignment on foreign trade policy
global digital healthcare market
BIM Through The Project Timeline | Ecobuild 2016
Publicidad

Similar a 04.3.asterisk agi (20)

ODP
Charla sobre Desarrollo de Aplicaciones en Asterisk con AGI para el ENLI 2012
PPT
Asterisk apis agi amiasync
PDF
Extendiendo Elastix: AGIs para encuestas y consultas de datos
PDF
Practica 5
PDF
Asterisk Rest Interface - ARI
PPT
Asterix: simplemente...
PPT
PPT
Sistemas de VoIP con Asterisk
PDF
GNU Bash - Text User Interfaces (TUI).pdf
PPT
03.asterisk introduccion shared by voip.com.vn
PPT
PDF
Curso de VoIP / Parte 04: Conceptos avanzados
PPT
Charla Asterisk - UPCI
PPT
07.asterisk conceptos basicos
PPT
06.asterisk administracion
PDF
PDF
Asterisk
PDF
Curso php-my sql-clase-2
PDF
Tesis Paper
PDF
José Luis Verdeguer - FreePBX for fun & profit [Rooted CON 2013]
Charla sobre Desarrollo de Aplicaciones en Asterisk con AGI para el ENLI 2012
Asterisk apis agi amiasync
Extendiendo Elastix: AGIs para encuestas y consultas de datos
Practica 5
Asterisk Rest Interface - ARI
Asterix: simplemente...
Sistemas de VoIP con Asterisk
GNU Bash - Text User Interfaces (TUI).pdf
03.asterisk introduccion shared by voip.com.vn
Curso de VoIP / Parte 04: Conceptos avanzados
Charla Asterisk - UPCI
07.asterisk conceptos basicos
06.asterisk administracion
Asterisk
Curso php-my sql-clase-2
Tesis Paper
José Luis Verdeguer - FreePBX for fun & profit [Rooted CON 2013]

Último (15)

DOCX
646686699-SESION-Nº-7-SE-COMUNICA-ORALMENTE-EN-SU-LENGUA-MATERNA.docx
PPTX
Casa de Boyacá informe de actividades 2024
PPTX
Proyectos de Inversión y sus requerimientos
PDF
La castidad nos hace libres para amar (Jovenes).pdf
PPTX
Cierra ciclos en tu vida cristiana con Jesús
PPTX
Curso Protección Auditiva Trabajo (1).pptx
PPT
USO_Y_MANTENIMIENTO_DE_EPP PARA EL TRABAJADOR.ppt
DOCX
ACTIV. DE AP. 30 DE JUNIO 2025 PLANIFIC PROYECTO.docx
PPTX
La-Problematica-de-la-Pobreza-a-Nivel-Mundial-Un-Desafio-Urgente.pptx
PPTX
Conceptos Basicos de construccion concreto
PDF
Tratado Arias-Roosevelt de la República de Panamá
PPTX
CONSOLIDADO DE AFECTACIONES POR LLUVIAS MAYO JUNIO 2025 BARINAS ACTUALIZADO.pptx
DOCX
SESIÓN DE CLASE ACTIV. AP 27 DE JUNIO PLANTAS PARA LA TOS.docx
PDF
LA TIC en la vida cotidiana y en la sociedad.pdf
DOCX
SESIÓN DE CLASE ACTIV. DE AP. 30 DE JUNIO 2025 PLANIFIC PROYECTO.docx
646686699-SESION-Nº-7-SE-COMUNICA-ORALMENTE-EN-SU-LENGUA-MATERNA.docx
Casa de Boyacá informe de actividades 2024
Proyectos de Inversión y sus requerimientos
La castidad nos hace libres para amar (Jovenes).pdf
Cierra ciclos en tu vida cristiana con Jesús
Curso Protección Auditiva Trabajo (1).pptx
USO_Y_MANTENIMIENTO_DE_EPP PARA EL TRABAJADOR.ppt
ACTIV. DE AP. 30 DE JUNIO 2025 PLANIFIC PROYECTO.docx
La-Problematica-de-la-Pobreza-a-Nivel-Mundial-Un-Desafio-Urgente.pptx
Conceptos Basicos de construccion concreto
Tratado Arias-Roosevelt de la República de Panamá
CONSOLIDADO DE AFECTACIONES POR LLUVIAS MAYO JUNIO 2025 BARINAS ACTUALIZADO.pptx
SESIÓN DE CLASE ACTIV. AP 27 DE JUNIO PLANTAS PARA LA TOS.docx
LA TIC en la vida cotidiana y en la sociedad.pdf
SESIÓN DE CLASE ACTIV. DE AP. 30 DE JUNIO 2025 PLANIFIC PROYECTO.docx

04.3.asterisk agi

  • 2. AGI  La AGI (o Asterisk Gateway Interface) provee una interfaz estándar para que programas externos puedan controlar el plan de marcación.  Generalmente, los scripts AGI se utilizan para realizar lógica avanzada, comunicarse con base de datos relacionales, etc.  Los lenguajes más comunes de programación de scripts AGI son: PHP, Python y Perl, aunque se puede utilizar cualquier otro lenguaje. 2 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 3. AGI  El intercambio de información del script con Asterisk se realiza vía los canales de comunicación: STDIN, STDOUT y STDERR.  Lee desde STDIN para obtener información.  Escribe en STDOUT para enviar información.  Escribe en STDERR para enviar información de debugging.  El script AGI envía comandos a Asterisk escribiendo en el STDOUT. Seguidamente Asterisk envía una respuesta por cada uno de ellos que es leída por el script. 3 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 4. AGI  La respuesta del servidor Asterisk ante un pedido es de la sig forma: <code> result=<result> [data] donde  code es un código de respuesta similar a HTTP (200 en caso de éxito, 5XX en caso de error).  result es el resultado del comando (los valores más convencionales son -1 para errores, 0 si fue exitosa la ejecución)  data es un conjunto de datos adicionales que pueden ser enviados por comando específicos (por ej, “timeout” para un comando temporizado) 4 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 5. AGI  Cuando Asterisk comienza la llamada al script, envía un conjunto de variables relacionadas con el canal en el STDIN. Por ejemplo:  agi_request: nombre del script  agi_channel: nombre del canal  agi_language: lenguaje del canal (en, es)  agi_type: tipo de canal (sip, iax, etc.)  etc. 5 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 6. AGI  Algunos ejemplos de comandos son:  ANSWER: atiende.  HANGUP: cuelga.  SAY [NUMBER | DIGITS | ALPHA | PHONETICS]: dice un número, dígito, caracter o un cadena fonéticamente.  SET [CONTEXT | EXTENSION | PRIORITY]: establece un nuevo contexto, extensión o prioridad luego de finalizada la ejecución de script.  VERBOSE: imprime un mensaje en el log.  WAIT FOR DIGIT: espera que se presione un dígito.  [SET | GET] VARIABLE: asigna u obtiene el valor de una variable del plan de marcación. 6 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 7. AGI  El programa debe:  Tener derechos de ejecución y presentar un intérprete válido  Ej yum –y install php; chmod 755 mi_script.php  Estar localizado por defecto en /var/lib/asterisk/agi- bin  Cómo llamar al script desde el dialplan: exten => 123,1,Answer() exten => 123,2,AGI(mi_script.php,arg1,..,argn) 7 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 8. AGI: ejemplo en PHP  El siguiente script está escrito en PHP y dicta los números que se encuentran en el archivo que se le pasa como parámetro: #!/usr/bin/php -q <?php // Esta línea es para que que haga no mantenga en un buffer el output ob_implicit_flush(true); set_time_limit(60); error_reporting(0); // Se abren los diferentes archivos (STDIN, STDOUT y un archivo de log del AGI) $in = fopen("php://stdin","r"); $out = fopen("php://stdout","w"); $stdlog = fopen("/var/log/asterisk/my_agi.log", “a"); // Si debug es true, escribe en el archivo de log definido anteriormente $debug = true; 8 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 9. AGI: ejemplo en PHP // Toma el nombre del archivo con los números a dictar del primer parámetro $archivo = $argv[1]; // Define la funcion read, que lee el input del STDIN function read() { global $in, $debug, $stdlog; $input = str_replace("n", "", fgets($in, 4096)); if ($debug) fputs($stdlog, "read: $inputn"); return $input; } // Define la funcion write, que escribe el output en el STDOUT function write($line) { global $debug, $stdlog, $out; if ($debug) fputs($stdlog, "write: $linen"); fputs($out,$line."n"); fflush($out); } 9 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 10. AGI: ejemplo en PHP // Parsea los headers del AGI (variables de entorno, etc) while ($env=read()) { $s = split(": ",$env); $agi[str_replace("agi_","",$s[0])] = trim($s[1]); if (($env == "") || ($env == "n")) { break; } } // Lee el archivo que se paso como parametro $lines = file($archivo); 10 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 11. AGI: ejemplo en PHP // Reproduce los digitos contenidos en cada linea del mismo // informando en el log del Asterisk la accion realizada foreach ($lines as $line) { $line=trim($line); for ($i=0;$i<strlen($line);$i++) { write("VERBOSE "REPRODUCIENDO DIGITO $line[$i]""); read(); write("SAY DIGITS $line[$i] """); read(); sleep(1); } } // Se cierran todos los handlers de archivos fclose($in); fclose($out); fclose($stdlog); exit; 11 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 12. AGI: ejemplo en PHP  Por ejemplo, si se quiere asociar el script a la extensión 200, se debe agregar al dialplan: exten => 200,1,Answer(); exten => 200,2,AGI(dicta.php,/tmp/numeros.txt) exten => 200,3,Hangup() 12 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 13. AGI: CLI  Los siguientes comandos pueden ser ejecutados en la CLI para obtener información sobre la AGI:  agi show commands topic <command>: muestra información sobre el comando <command> del AGI.  agi show commands: lista todos los comandos del agi  agi set debug on/off: activa/desactiva el debugging de la ejecución de scripts vía la AGI 13 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 14. Ejercicio 10: AGI  Implementar una funcionalidad en Asterisk utilizando AGI 14 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo
  • 15. Curso elaborado por Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch y Antonio Lobo Detalles de la licencia: http://creativecommons.org/licenses/by-nc-sa/2.5/deed.es_AR Autores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, SantiagoAutores: Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio LoboAlberch, Antonio Lobo (cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5(cc) Creative Commons - Attribute Non-Commercial Share-Alike 2.5 Basándose en: Irontec: contacto@irontec.com (CC) Asterisk, The Future of Telephony, Jim Meggelen, Jared Smith, and Leif Madsen, O´REILLY, 2005 julian@dunayevich.com lazaro.baca@gmail.com abrassara@gmail.com salberch@gmail.com antoniwolf@gmail.com 15 Julián Dunayevich, Lázaro Baca, Andrés Brassara, Santiago Alberch, Antonio Lobo