el código es el siguiente:
#!/usr/bin/php -q
<?php
//llamamos a las librerÃas de phpagi
require("phpagi.php");
//activamos la bandera de enviar todo lo que se realice a consola como modo depuracion
error_reporting(E_ALL);
//creamos una instancia de la clase AGI
$agi = new AGI();
//generamos el comando Answer de Asterisk, este comando siempre lo ejecutamos al inicio de un AGI
$agi->answer();
//Este demo consultará información en una base de datos y regresará la información de forma hablada por lo que generamos una conexion a la base de datos de sql
$conexion = mysql_connect("sql8.main-hosting.eu","u134395341_sopor","4d2dobdc") or die("Error: El servidor no puede conectar con la base de datos");
//Referenciamos el cursor a la base de datos
mysql_select_db("u134395341_sopor",$conexion);
//Reproducimos el archivo de audio que solicita que introduzca el número de ticket de soporte, del cual conocer su estado.
//El archivo de audio lo hemos grabado previamente desde elastix, y se almacena en /var/lib/asterisk/sounds/
//y viene a decir algo como: Despues del pitido, introduzca su numero de ticket de soporte para conocer su estado actual, o marque 0 para salir.
$agi->exec(Playback,"introduceticket");
do {
//enviamos un beep y esperamos 25 segundos en la espera de una respuesta. Podemos cambiar el 'beep', por "Archivo_de_audio_propio"
$result = $agi->get_data('beep', 3000, 25);
//obtenemos la informacion introducida desde el telefono
$numticket = $result['result'];
//si introdujo un valor el cliente entonces creamos el string la consulta sql y la ejecutamos
if($numticket!=""){
$query = "select status_id from frmv7_ticket where number=\"$numticket\" ";
$result = mysql_query($query, $conexion);
//verificamos si existe un resultado
if($re = mysql_fetch_array($result)) {
//Comprobamos si el estado recuperado de la BBD es open
if ($re[status] == "1") {
//y si es asÃ, reproduzco un audio pregrabado llamado abierta que dice algo como: Su ticket de soporte aún está en situación de resolverse. Vuelva a consultar su estado pasado pasadas unas horas.
$agi->exec(Playback,"abierta");
}
//Comprobamos si el estado recuperado de la BBD es closed
if ($_re[status] == "3") {
//y si es asÃ, reproduzco un audio pregrabado llamado cerrada que dice algo como: Su ticket de soporte está resuelto. Puede consultar en su correo la respuesta de nuestros técnicos o pasar a recoger su equipo cuando desee.
$agi->exec(Playback,"cerrada");
}
}else{
//de lo contrario enviamos un mensaje de que el ticket no pudo ser encontrado "lo sentimos, el ticket de soporte que introdujo no es válido, por favor introduzcalo de nuevo o marque 0 para terminar"
if ($numticket!='0'){
$agi->exec(Playback,"noencontrado");
}
}
if ($numticket!='0'){
$agi->exec(Playback,"introduceticket");
}
}
} while($numticket!= '0'); //Continuamos solicitando números de ticket mientras el cliente no marque 0 para salir
//Reproducimos el archivo de audio de despedida, agradeciendo el uso del sistema.
//El archivo de audio lo hemos grabado previamente desde elastix, y se almacena en /var/lib/asterisk/sounds/
//y viene a decir algo como: Gracias por utilizar el sistema de control de tickets.
$agi->exec(Playback,"despedida");
//al finalizar el script del AGI siempre es recomendable ejecutar esta función para no dejar el canal abierto.
$agi->hangup();
?>
y el error es que sencillamente al marcar la extensión se cuelga y no hace nada; en el CLI de asterisk se ve lo siguiente:
-- Executing [105@from-internal:2] AGI("SIP/103-00000007", "/var/lib/asterisk/agi-bin/comprobarticket.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/comprobarticket.php
-- <SIP/103-00000007>AGI Script /var/lib/asterisk/agi-bin/comprobarticket.php completed, returning 0