Hola a todos, primero que nada feliz año y disculpen la demora aqui van los pasos:
1- Creamos un archivo llamado prueba.php en la ruta /var/lib/asterisk/agi-bin/
2- Agregamos el siguiente contenido dentro de prueba.php:
#!/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("LaIpDeTuServidorMysql","TuNombreDeUsuario","TuPass") or die("Error: El servidor no puede conectar con la base de datos");
//Referenciamos el cursor a la base de datos
mysql_select_db("NombreDeTuBBDD",$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 número 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 información 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 from tabla where ticketID=\"$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] == "open") {
//y si es así, reproduzco un audio pregrabado llamado abierta que dice algo como: Su incidencia 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] == "closed") {
//y si es así, reproduzco un audio pregrabado llamado cerrada que dice algo como: Su incidencia está resuelta. Puede recoger su equipo cuando desee.
$agi->exec(Playback,"cerrada");
}
}else{
//de lo contrario enviamos un mensaje de que el ticket no pudo ser encontrado
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();
?>
3- Ingresamos a nuestro servidor issabel >> PBX >> Tools >> Asterisk File Editor >> En el buscador escribimos extensions_custom.conf, hacemos click en el y agregamos lo siguiente:
- En [from-internal-custom] al final (Despues de include => agentlogin) agregamos include => custom-agiphp
- Al final del archivo agregamos
[custom-agiphp]
exten => 2000,1,Answer
exten => 2000,2,AGI(/var/lib/asterisk/agi-bin/prueba.php)
exten => 2000,3,Hangup
Despues guardan y hacen click en reload Asterisk.
Para validar que funcione solo deben llamar a la extension 2000, si al realizar el llamado este se corta es por la sencilla razon de que deben validar la Query y deben cargar los siguientes audios en /var/lib/asterisk/sounds/, estos deben tener los siguientes nombres:
introduceticket.wav
abierta.wav
cerrada.wav
noencontrado.wav
introduceticket.wav
despedida.wav
Quedo atento a cualquier duda.
Saludos