Alguien tiene algun guia o repositorio de ejemplos de AGI realizados en
PHP o Perl, info que no sea de VoIP. Rapidamente les comento necesito
armar un AGI con PHP o Perl que simplemente se conecte a mysql y ejecute
un query para obtener una valor y que asterisk lo comunique a un usuario.
Martin
He hecho algo parecido.
Se ejecuta en el dialplan de llamadas salientes al extranjero (00.) y consulta
el prefijo (sin el 00) en una tabla. En caso de que no exista ese prefijo
cancela la llamada:
-----------------------------------------------------------------------------------------------------
#!/usr/bin/php -q
<?php
{
// Poner aquí la ruta a la librería "PHP-AGI":
require '/var/lib/asterisk/agi-bin/phpagi-2.14/phpagi.php';
// Base de datos de Asterisk:
$db_host = "127.0.0.1";
$db_name = "asterisk";
$db_user = "asterisk";
$db_pass = "password";
// La magia:
$agi = new AGI();
// Conexión a la BD:
$connect = mysql_connect($db_host, $db_user, $db_pass);
if (!$connect)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db($db_name) or die('Could not select database');
// Si el número es 0034944998877 nos quedamos con "34":
$prefijo = substr($agi->request[agi_extension],2,2);
$query = "SELECT prefijo FROM prefijos where prefijo='$prefijo'";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
if (mysql_num_rows($result)) {
$agi->noop("SI existe el prefijo.");
}
else {
$agi->noop("NO existe el prefijo, colgamos.");
$agi->stream_file("cancelled");
$agi->hangup();
}
mysql_close($connect);
}
?>
---------------------------------------------------------------------------------------------
IMPORTANTE: Para que esto funcione, y dando por hecho que es un Linux, hay que
instalar "php4-cli" (ó "php5-cli") y "php4-mysql", y además asegurarse de
que en el fichero /etc/php4/cli/php.ini aparezca SIN comentar esta línea:
extension=mysql.so
PD: En realidad la función "$agi->noop()" no funciona, es decir, no visualiza
nada en el CLI (salvo que hagas antes "agi debug"), pero no es la salida
normal como cuando la haces en el dialplan. Es un tema que me extraña porque
tampoco funciona con la clase de Ruby Ruby-Agi.
PPD: Tu objetivo es que ese AGI obtenga un valor y comunicárselo al usuario.
Podrías añadir al AGI algo como "$agi->set_variable(VAR=$variable)", (ojo, lo
digo al tuntún, revisa el API si lo haces así). De esta forma al terminar el
AGI has creado una variable de canal y puedes acceder a ella desde el
dialplan con #{VAR}.
Aunque yo preferiría hacerlo todo desde el AGI, e implementar lo que quede de
dialplan en el propio AGI (si es poco).
Suerte.
--
Iñaki Baz Castillo
Irontec: Internet y Sistemas sobre GNU/Linux
http://www.irontec.com
+0034 944416024
Martin Rodriguez escribió:
¿No te ha llegado mi mail con el ejemplo?
Lo pego aquí abajo por si acaso.
> Alguien tiene algun guia o repositorio de ejemplos de AGI realizados en
> PHP o Perl, info que no sea de VoIP. Rapidamente les comento necesito
> armar un AGI con PHP o Perl que simplemente se conecte a mysql y ejecute
> un query para obtener una valor y que asterisk lo comunique a un usuario.
He hecho algo parecido.