1 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2IRONTEC - http://www.irontec.com
Asterisk AGIPHPAGI
2 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2
Índice de Contenidos
● Introducción a Asterisk AGI.● PGPAGI.● Ejemplos.
Índice
3 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI
AGI (Asterisk Gateway Interface)● Interfaz para que nuestros programas puedan
comunicarse con Asterisk.● AGI es parecido a CGI:
● La comunicación de AGI con Asterisk es vía stdin/stdout.
● AGI, EAGI (audio), FastAGI (remoto), DeadAGI.● Los scripts AGI pueden ser escritos en cualquier
lenguaje. (Perl, Python, PHP, C, ... )
4 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI
AGIScript
Asterisk AGIModule
Ast
eris
k C
hann
el
Inte
rfac
eAsteriskSwitching
Core
Asterisk PBX
TDM E1
ANALOG
SIP
IAX2
MGCP
STDIN/STDOUT
Database
WWW
Coffee Maker
5 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI
Comunicación AGI <--> Asterisk● STDOUT
– Para enviar algo a Asterisk el script AGI escribe algo en stdout.
NOTA: Los comandos deben acabar en (“\n”).● STDIN
– Para recibir información de Asterisk el script AGI usa el stdin.
NOTA: Las respuestas de Asterisk tienen esta forma:200 Result=<numero>510 Invalid or unknow command.
● STDERR– Para escribir información de DEBUG en el CLI el script
usa stderr.NOTA: agi debug
6 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI
Scripts AGI
● Directorio por defecto:/usr/share/asterisk/agibin
Nota: Podemos guardarlos donde queramos, pero deberemos indicar la ruta completa.
● Debe de ser ejecutable:chmod a+x agi.php
7 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Introducción a Asterisk AGI
● Invocarla desde el dialplan:...exten => 1234, n, agi(helloWorld.php)...Nombre completo!!! (con extensión)
● Paso de parámetros...exten => 1234, n, SET Num = 1;exten => 1234,n,agi(agi.php|${NUM}|${CALLERID})...
● Deben existir en la extensión actual:– Variables dadas por el entorno Asterisk– Definidas por nosotros mismos– ...
8 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Comandos en AGI
answer Answer channel channel status Returns status of the connected channel database del Removes database key/value database deltree Removes database keytree/value database get Gets database value database put Adds/updates database value
exec Executes a given Application get data Prompts for DTMF on a channel
get full variable Evaluates a channel expression get variable Gets a channel variable get option Stream file, prompt for DTMF, with timeout hangup Hangup the current channel noop Does nothing
receive char Receives one character from channels supporting it receive text Receives text from channels supporting it
record file Records to a given file say alpha Says a given character string
say digits Says a given digittringsay number Says a given number
9 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Comandos en AGI
say phonetic Says a given character string with phonetics say date Says a given date say time Says a given time say datetime Says a given time as specfied by the format given send image Sends images to channels supporting it
send text Sends text to channels supporting it set autohangup Autohangup channel in some time set callerid Sets callerid for the current channel set context Sets channel context set extension Changes channel extension
set music Enable/Disable Music on hold generator set priority Set channel dialplan priority
set variable Sets a channel variable stream files ends audio file on channel control stream file Sends audio file on channel and allows the listner to control the stream tdd mode Toggles TDD mode (for the deaf)
verbose Logs a message to the asterisk verbose log wait for digit Waits for a digit to be pressed
10 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Primer script AGI
Un ejemplo:● script (ejemplo.php) :#!/usr/local/bin/php5<?php// Leer cabeceraswhile (fgets(STDIN) != “\n”);echo “SAY NUMBER 42 ‘’\n”;$result = fgets(STDIN);?>
● Dialplan ( extensions.conf ) :...exten => 1234, n, agi(ejemplo.php)...
11 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Primer script AGI
● Cabeceras:Asterisk envía al script una serie de cabeceras:
[agi_request] => ejem1.php[agi_channel] => SIP/ironuser[agi_language] => en [agi_callerid] => "ironuser" <500>[agi_dnid] => 500[agi_rdnis] => unknown[agi_context] => internal[agi_extension] => 500[agi_priority] => 1
12 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI
¿Para qué?
● Se encarga de las cabeceras
● Posee la mayoría de los comandos AGI
● Posee “wrappers” para las funciones● text2wave => festivalNota: Instalar festival en castellano.
aptget install festival festvoxkallpc16k
13 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Instalación
● Descargar:– Web: http://phpagi.sourceforge.net/
● Sección Descargas.● Descargar phpagi-2.14.tgz● Ejemplos phpagi-examples-2.14.tgz
NOTA (Para servidores sin X):wget http://downloads.sourceforge.net/phpagi/phpagi2.14.tgzwget http://downloads.sourceforge.net/phpagi/phpagiexamples2.14.tgz
14 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Instalación
● Descomprimir en el directorio de agi:mv phpagi2.14.tgz /var/lib/asterisk/agibin/tar zxvf phpagi2.14.tgz
● Dar permisos:cd phpagi2.14chmod a+x *.php
● Copiar phpagi.conf al directorio de configuración de Asterisk.mv /var/lib/asterisk/agibin/phpagi2.14/docs/phpagi.example.conf /etc/asterisk/phpagi.conf
15 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI
Un ejemplo sencillo.
● Pasos:– Incluir la librería.require 'phpagi.php';– Crear un objeto “AGI”.$agi = new AGI();$agi= new A GI();– Llamar a sus funciones.$agi>answer();
16 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI
Un ejemplo sencillo.
● script (ejemplo.php) :
#!/usr/bin/php5<?phprequire('phpagi2.14/phpagi.php')$agi = new AGI();$agi>answer();$agi>playback("Hello World");$agi>hangup();?>
17 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI
¿Como funciona?.
– Cuando un método es invocado el resultado se guarda en un array de variables.
– Depende del método a veces el resultado esta en la posición indicada por 'result' o por 'key'.
NOTA: Consultar siempre el código fuente de phpagi.php para conocer el comando (o la ayuda generada).http://phpagi.sourceforge.net/phpagi2/docs/
18 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI – Asterisk Manager
Asterisk Manager
● El asterisk Manager Interface es un servidor TCP, capaz de comunicarse con Asterisk, haciendo posible que aplicaciones remotas envíen comandos a AsteriskManager.conf[admin]secret = testread=system,call,log,verbose,command,agent,user,configwrite=system,call,log,verbose,command,agent,user,config
● PHPAGI incluye una librería capaz de manejar este sistema “phpagi_AsteriskManager”
19 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2PHPAGI – Asterisk Manager
Asterisk Manager (II)
● Configurar en phpagi.conf[asmanager]server=localhostport=5038username=namesecret=pass
● Y en nuestro script:$asm = $agi>new_AsteriskManager();$peer = $asm>command("sip show peer $peer");
$asm>disconnect();
20 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Consejos
● Consejos:– No hay que hacer todo con AGI, el dialplan
sigue estando ahí :)
– Usa en la medida de lo posible las variables del canal.
Es una manera “elegante” de pasar variables entre distintos scripts.
– Hacer los scripts AGI modulares.Cada script tiene una función, no intentar meter todo nuestro código en un solo AGI.
– Si el AGI crece demasiado --> refactoring
21 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Referencias
Bibliografía
● Asterisk, The Future of Telephony. Jim Van Meggelen, Jared Smith & Leif Madsen – O' Reilly
Sitios Web
● Voip-info: http://www.voip-info.org● Web PHPAGI: http://phpagi.sourceforge.net/
22 Gorka Gorrotxategi – David Santamaría
CURSO ASTERISK AGI y PHPAGI – Modulo 2Licencia
Copyright © 2007 Irontec <[email protected]>
● Detalles de la licencia– http://creativecommons.org/licenses/by/2.5/es/de
ed.es