FUNCIONA! Consulta estado de un caso mediante DTMF
Funciona!!!
Por fin he dado con ello.
SISTEMA COMPLETO DE ESTADO DE TICKETS USANDO ELASTIX Y OSTICKET.
-----------------------------------------------------------------
En primer lugar, creamos el siguiente archivo:
comprobarticket.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 ost_ticket 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();
?>
Una vez echo esto, subirlo al servidor mediante WinSCP o similar a la ruta /var/lib/asterisk/agi-bin/
A continuación, es importante que cambies los permisos del archivo a 775
Cread los archivos de audio. Para ello, leed los comentarios del archivo php creado.
Ahora, hay que crear la llamada al AGI de la siguiente manera:
Editar el archivo extensions_custom.conf y crea el siguiente contexto:
[custom-agiphp]
exten => 101,1,Answer
exten => 101,2,AGI(/var/lib/asterisk/agi-bin/comprobarticket.php)
exten => 101,3,Hangup
y añadirlo en
[from-internal-custom]
exten => 1234,1,Playback(demo-congrats) ; extensions can dial 1234
exten => 1234,2,Hangup()
exten => h,1,Hangup()
include => agentlogin
include => conferences
include => calendar-event
include => weather-wakeup
include => custom-agiphp
Salvamos.
Si llamamos a la extensión 101, ya debería funcionar.
Ahora, si queremos que funcione mediante el uso de IVR, tan solo hay que ir a MISC DESTINATIONS, y crear uno que sea, por ejemplo:
Descripción: tickets
Marcar: 101
Creamos el IVR con las opciones que queramos, entre ellas una que solicite acceder al sistema de control de tickets, en la cual, seleccionaremos como destino:
Misc Destinations: tickets.
Salvar.
Recomiendo reiniciar elastix y a funcionar.
Revisad bien la conexión a la BBDD y que seguramente tendréis que mover los audios creados de la carpeta /var/lib/asterisk/sounds/custom a /var/lib/asterisk/sounds/, si no, no oireis nada más que el beep.
1. Accedes a la consola de tu elastix mediante la aplicación Putty, eso si, logueandote como root, y escribes lo siguiente:
cd /var/lib/asterisk/agi-bin (pulsas intro)
chmod 775 comprobarticket.php (pulsas intro)
Y ya está.
Opción 2. Hacer lo mismo, pero desde la consola local de la máquina, siempre y cuando tengas un teclado y pantalla conectado a tu elastix. En ese caso no necesitarías acceder mediante putty
Opción 3. Acceder a tu elastix mediante filezilla como root, e ir a la dirección /var/lib/asterisk/agi-bin. Una vez ahí veras el listado de archivos que la carpeta agi-bin contiene. Te posicionas sobre el archivo comprobarticket.php y pulsas botón derecho. Seleccionas cambiar permisos, y en el cuadro de abajo, borrar los números que vengan por defecto y escribes 775. Pulsas intro o guardar y listo.