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

Destacado

Institutional research
Institutional researchInstitutional research
Institutional research
PeterKirkman89
 
Grade de cursos
Grade de cursosGrade de cursos
Grade de cursos
esteliodalison
 
WHSE
WHSEWHSE
Study-on-Consumption-and-Saving-Patters
Study-on-Consumption-and-Saving-PattersStudy-on-Consumption-and-Saving-Patters
Study-on-Consumption-and-Saving-Patters
Chofor Che Christian-A
 
Deducibilità perdite su crediti e recupero iva aics verona 20161116
Deducibilità perdite su crediti e recupero iva aics verona 20161116Deducibilità perdite su crediti e recupero iva aics verona 20161116
Deducibilità perdite su crediti e recupero iva aics verona 20161116
daniele vitali
 
Econchar Tunderwater112009
Econchar Tunderwater112009Econchar Tunderwater112009
Econchar Tunderwater112009Gapa News
 
Integrating specification in to BIM process and delivery | Empowering you in ...
Integrating specification in to BIM process and delivery | Empowering you in ...Integrating specification in to BIM process and delivery | Empowering you in ...
Integrating specification in to BIM process and delivery | Empowering you in ...
The NBS
 
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
Audit Vault. Auditiert, und dann? - DOAG Regio Essen 2011 - OPITZ CONSULTING ...
OPITZ CONSULTING Deutschland
 
Trade Operations TRADE NEGOTIATIONS
Trade Operations TRADE NEGOTIATIONSTrade Operations TRADE NEGOTIATIONS
Trade Operations TRADE NEGOTIATIONS
EFI REGKLI
 
IBOR Middle Office Information Delivery
IBOR Middle Office Information DeliveryIBOR Middle Office Information Delivery
IBOR Middle Office Information Delivery
Burak S. Arikan
 
Assignment on foreign trade policy
Assignment on foreign trade policyAssignment on foreign trade policy
Assignment on foreign trade policy
Sonali Kukreja
 
global digital healthcare market
 global digital healthcare market global digital healthcare market
global digital healthcare market
AzothAnalytics
 
BIM Through The Project Timeline | Ecobuild 2016
BIM Through The Project Timeline | Ecobuild 2016BIM Through The Project Timeline | Ecobuild 2016
BIM Through The Project Timeline | Ecobuild 2016
The NBS
 

Destacado (13)

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

Similar a 04.3.asterisk agi

Practica 5
Practica 5Practica 5
Practica 5
Jose Cordova
 
Taller de Shell Scripting
Taller de Shell ScriptingTaller de Shell Scripting
Taller de Shell Scripting
Enrique Verdes
 
The linux shell. Shell Scripting desde 0
The linux shell. Shell Scripting desde 0The linux shell. Shell Scripting desde 0
The linux shell. Shell Scripting desde 0
Remigio Salvador Sánchez
 
Curso php dia2
Curso php dia2Curso php dia2
Curso php dia2
cognos_uie
 
Ficheros C++
Ficheros C++Ficheros C++
Ficheros C++
LeninAntonio
 
Flex y Bison
Flex y BisonFlex y Bison
Flex y Bison
Guiru Xd
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Semana 9 entradas salidas estandar y pipes
Semana 9 entradas salidas estandar y pipesSemana 9 entradas salidas estandar y pipes
Semana 9 entradas salidas estandar y pipes
victdiazm
 
Exposicion
ExposicionExposicion
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
perlallamas
 
Asterisk
AsteriskAsterisk
Asterisk
Dupi Rueda
 
A1 u1-16230227
A1 u1-16230227A1 u1-16230227
A1 u1-16230227
erikalejo
 
Los scripts de linux
Los scripts de linuxLos scripts de linux
Los scripts de linux
Fernando Muñoz
 
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En RedesLw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
guest5d7f33c
 
Lw2010 Pedro Valera
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valera
guestf280e2
 
PYTHON.pptx
PYTHON.pptxPYTHON.pptx
Administración básica de ubuntu server parte 3
Administración básica de ubuntu server   parte 3Administración básica de ubuntu server   parte 3
Administración básica de ubuntu server parte 3
Santiago Márquez Solís
 
Perl4 io
Perl4 ioPerl4 io
Perl4 io
Alfonso Alba
 
Programación c
Programación cProgramación c
Programación c
Programación cProgramación c
Programación c
victdiazm
 

Similar a 04.3.asterisk agi (20)

Practica 5
Practica 5Practica 5
Practica 5
 
Taller de Shell Scripting
Taller de Shell ScriptingTaller de Shell Scripting
Taller de Shell Scripting
 
The linux shell. Shell Scripting desde 0
The linux shell. Shell Scripting desde 0The linux shell. Shell Scripting desde 0
The linux shell. Shell Scripting desde 0
 
Curso php dia2
Curso php dia2Curso php dia2
Curso php dia2
 
Ficheros C++
Ficheros C++Ficheros C++
Ficheros C++
 
Flex y Bison
Flex y BisonFlex y Bison
Flex y Bison
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Semana 9 entradas salidas estandar y pipes
Semana 9 entradas salidas estandar y pipesSemana 9 entradas salidas estandar y pipes
Semana 9 entradas salidas estandar y pipes
 
Exposicion
ExposicionExposicion
Exposicion
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Asterisk
AsteriskAsterisk
Asterisk
 
A1 u1-16230227
A1 u1-16230227A1 u1-16230227
A1 u1-16230227
 
Los scripts de linux
Los scripts de linuxLos scripts de linux
Los scripts de linux
 
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En RedesLw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
 
Lw2010 Pedro Valera
Lw2010 Pedro ValeraLw2010 Pedro Valera
Lw2010 Pedro Valera
 
PYTHON.pptx
PYTHON.pptxPYTHON.pptx
PYTHON.pptx
 
Administración básica de ubuntu server parte 3
Administración básica de ubuntu server   parte 3Administración básica de ubuntu server   parte 3
Administración básica de ubuntu server parte 3
 
Perl4 io
Perl4 ioPerl4 io
Perl4 io
 
Programación c
Programación cProgramación c
Programación c
 
Programación c
Programación cProgramación c
Programación c
 

Último

Taller sobre la Eucaristia. Elementos doctrinarios..pdf
Taller sobre la Eucaristia. Elementos doctrinarios..pdfTaller sobre la Eucaristia. Elementos doctrinarios..pdf
Taller sobre la Eucaristia. Elementos doctrinarios..pdf
JorgeHPereaG
 
Bill Ding - eRetail Day - Edición México 2024
Bill Ding - eRetail Day - Edición México 2024Bill Ding - eRetail Day - Edición México 2024
Bill Ding - eRetail Day - Edición México 2024
eCommerce Institute
 
PROBLEMAS-RESUELTOS-DE-INGENIERIA-QUIMICA-Y-BIOQUIMICA-
PROBLEMAS-RESUELTOS-DE-INGENIERIA-QUIMICA-Y-BIOQUIMICA-PROBLEMAS-RESUELTOS-DE-INGENIERIA-QUIMICA-Y-BIOQUIMICA-
PROBLEMAS-RESUELTOS-DE-INGENIERIA-QUIMICA-Y-BIOQUIMICA-
Akemmy123
 
Daniela Orozco - eRetail Day - Edición México 2024
Daniela Orozco - eRetail Day - Edición México 2024Daniela Orozco - eRetail Day - Edición México 2024
Daniela Orozco - eRetail Day - Edición México 2024
eCommerce Institute
 
FUNDAMENTOS DE ADMINISTRACION AGROPECUARIA I PARCIAL.pptx
FUNDAMENTOS DE ADMINISTRACION AGROPECUARIA I PARCIAL.pptxFUNDAMENTOS DE ADMINISTRACION AGROPECUARIA I PARCIAL.pptx
FUNDAMENTOS DE ADMINISTRACION AGROPECUARIA I PARCIAL.pptx
AmilcarRMatamorosAlv
 
Mapa conceptuales de proyectos social y productivo.pdf
Mapa conceptuales de proyectos social y productivo.pdfMapa conceptuales de proyectos social y productivo.pdf
Mapa conceptuales de proyectos social y productivo.pdf
YudetxybethNieto
 
EL ADVIENTO. Definición, características y actitudes.pptx
EL ADVIENTO. Definición, características y actitudes.pptxEL ADVIENTO. Definición, características y actitudes.pptx
EL ADVIENTO. Definición, características y actitudes.pptx
leonel175044
 
Roberto Butragueño Revenga - eRetail Day - edición México 2024
Roberto Butragueño Revenga - eRetail Day - edición México 2024Roberto Butragueño Revenga - eRetail Day - edición México 2024
Roberto Butragueño Revenga - eRetail Day - edición México 2024
eCommerce Institute
 
Moisés Hamui Abadi, Gerardo Morera - eRetail Day - Edición México 2024
Moisés Hamui Abadi, Gerardo Morera - eRetail Day - Edición México 2024Moisés Hamui Abadi, Gerardo Morera - eRetail Day - Edición México 2024
Moisés Hamui Abadi, Gerardo Morera - eRetail Day - Edición México 2024
eCommerce Institute
 
Wendy Vázquez, Itzel Díaz de León - eRetail Day - Edición México 2024
Wendy Vázquez, Itzel Díaz de León - eRetail Day - Edición México 2024Wendy Vázquez, Itzel Díaz de León - eRetail Day - Edición México 2024
Wendy Vázquez, Itzel Díaz de León - eRetail Day - Edición México 2024
eCommerce Institute
 

Último (10)

Taller sobre la Eucaristia. Elementos doctrinarios..pdf
Taller sobre la Eucaristia. Elementos doctrinarios..pdfTaller sobre la Eucaristia. Elementos doctrinarios..pdf
Taller sobre la Eucaristia. Elementos doctrinarios..pdf
 
Bill Ding - eRetail Day - Edición México 2024
Bill Ding - eRetail Day - Edición México 2024Bill Ding - eRetail Day - Edición México 2024
Bill Ding - eRetail Day - Edición México 2024
 
PROBLEMAS-RESUELTOS-DE-INGENIERIA-QUIMICA-Y-BIOQUIMICA-
PROBLEMAS-RESUELTOS-DE-INGENIERIA-QUIMICA-Y-BIOQUIMICA-PROBLEMAS-RESUELTOS-DE-INGENIERIA-QUIMICA-Y-BIOQUIMICA-
PROBLEMAS-RESUELTOS-DE-INGENIERIA-QUIMICA-Y-BIOQUIMICA-
 
Daniela Orozco - eRetail Day - Edición México 2024
Daniela Orozco - eRetail Day - Edición México 2024Daniela Orozco - eRetail Day - Edición México 2024
Daniela Orozco - eRetail Day - Edición México 2024
 
FUNDAMENTOS DE ADMINISTRACION AGROPECUARIA I PARCIAL.pptx
FUNDAMENTOS DE ADMINISTRACION AGROPECUARIA I PARCIAL.pptxFUNDAMENTOS DE ADMINISTRACION AGROPECUARIA I PARCIAL.pptx
FUNDAMENTOS DE ADMINISTRACION AGROPECUARIA I PARCIAL.pptx
 
Mapa conceptuales de proyectos social y productivo.pdf
Mapa conceptuales de proyectos social y productivo.pdfMapa conceptuales de proyectos social y productivo.pdf
Mapa conceptuales de proyectos social y productivo.pdf
 
EL ADVIENTO. Definición, características y actitudes.pptx
EL ADVIENTO. Definición, características y actitudes.pptxEL ADVIENTO. Definición, características y actitudes.pptx
EL ADVIENTO. Definición, características y actitudes.pptx
 
Roberto Butragueño Revenga - eRetail Day - edición México 2024
Roberto Butragueño Revenga - eRetail Day - edición México 2024Roberto Butragueño Revenga - eRetail Day - edición México 2024
Roberto Butragueño Revenga - eRetail Day - edición México 2024
 
Moisés Hamui Abadi, Gerardo Morera - eRetail Day - Edición México 2024
Moisés Hamui Abadi, Gerardo Morera - eRetail Day - Edición México 2024Moisés Hamui Abadi, Gerardo Morera - eRetail Day - Edición México 2024
Moisés Hamui Abadi, Gerardo Morera - eRetail Day - Edición México 2024
 
Wendy Vázquez, Itzel Díaz de León - eRetail Day - Edición México 2024
Wendy Vázquez, Itzel Díaz de León - eRetail Day - Edición México 2024Wendy Vázquez, Itzel Díaz de León - eRetail Day - Edición México 2024
Wendy Vázquez, Itzel Díaz de León - eRetail Day - Edición México 2024
 

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