
Prefiere el consumo de lo Hecho en México
BúsquedaHagamos que México crezca..
![]() Prefiere el consumo de lo Hecho en México Posts Recientes
Conversación |
Como implementar un AGI con PHP en un conmutador de VoIP sobre AsteriskUn par de años atras desarrollé una aplicación para la empresa de un conocido que se integró a un conmutador de Voz sobre IP para poder dar mayor atención a sus clientes . Esta aplicación permitía dar información telefónica hablada de forma automática a diversos clientes, cuándo ellos llamaban a una de las líneas del conmutador había una opción dentro del IVR(Interactive Voice Response) que los llevaba a una extensión dónde tenía configurada la aplicación, esta aplicación permitía recibir el ID del cliente y darle información de sus pedidos, envíos, facturas, y de la información de saldos todo esto lo podía hacer el cliente solo usando su teléfono.
Esta aplicación lo que hacía era pedir la información del cliente a traves del teléfono y luego esa información digitada por el cliente, era consultada en una base de datos de MySQL, y regresaba la información de forma hablada usando Festival usando la tecnología que se le conoce como Text to Speech. El uso de los AGIs me permitió implementar esta funcionalidad dentro del conmutador de Voz sobre IP y tener una interacción oral entre el cliente y el conmutador de Voz sobre IO, explico todo esto ya que hace unos días me llegó un correo dónde me preguntaba un amigo como implementar un AGI en Asterisk por lo que a continuación pongo un How To en base al procedimiento que use hace un par de años y que ahora puede ser que haya quedado obsoleto. Antes de usar este How To, también es recomendable darle un ojo al How To que puse de como configurar Festival para usarlo con Asterisk http://phylevn.mexrom.net/index.php/blog/show/_Como_configurar_Festival_en_Asterisk_.html Aunque el uso de AGIs se puede implementar en cualquier lenguaje de programación que funcione sobre linux, he preferido usar PHP en este caso. También el desarrollo de los AGIs puede ser manual, es decir usando las interfaces de entrada, salida y depuración definidas por al API de asterisk, aunque esto no es recomendable por el hecho simple que puede ser más tardado programarlo, por lo que recomiendo una clase PHPAGI que ya lleva algunos años de desarrollo y que puede obtenerse la última versión desde la siguiente URL, la cuál contiene un sin fin de funciones bastante prácticas. http://phpagi.sourceforge.net/
De ahí he descargado los siguientes archivos: phpagi-2.14.tgz 34851 5128 Platform-Independent .gz phpagi-examples-2.14.tgz 670707 3601 Platform-Independent .gz phpagi-2.14.tgz este archivo contiene todos los métodos de la clase PHPAGI para echar andar los AGis con Asterisk phpagi-examples-2.14.tgz Este archivo contiene ejemplos para usar la clase PHPAGI Despues de la descarga de los archivos descomprimir las librerías dentro del directorio de agi-bin de Asterisk cd /var/lib/asterisk/agi-bin phylevn@linuxmovil:/var/lib/asterisk/agi-bin$ #Descomprimir el archivo de phpagi-2.14.tgz phylevn@linuxmovil$ sudo tar -xzvf ~/asterisk/phpagi-2.14.tgz #renombrar el directorio generado phylevn@linuxmovil$ sudo mv phpagi-2.14 phpagi #Crear un archivo .php dónde implementemos un AGI demo sudo emacs demoagi.php #Dentro este archivo añadimos lo siguiente:
//***************** #!/usr/bin/php -q <?php //llamamos a las librerías de phpagi require("phpagi/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("localhost","pruebas","pruebas") or die("Error: El servidor no puede conectar con la base de datos"); //Referenciamos el cursor a la base de datos mysql_select_db("pruebas",$conexion); //obtenemos el caller id de quién realiza la llamada $_cid = $agi->parse_callerid(); //enviamos un mensaje de voz por medio de festival que está configurado en idioma espanol $agi->text2wav("Hola, Tu número es {$_cid['name']}."); do { //enviamos otro mensaje para que introduzca un código de producto seguido por # o 999# para salir $agi->text2wav('Cual es la clave del producto ? Presiona la tecla gato despues de introducir la clave del producto. Presiona 999 seguido de la tecla gato para salir.'); //enviamos un beep y esperamos 20 segundos en la espera de una respuesta $_result = $agi->get_data('beep', 3000, 20); //obtenemos la información introducida desde el telefono $keys = $_result['result']; //si introdujo un valor el cliente entonces creamos el string la consulta sql y la ejecutamos if($keys!=""){ $query = "select descripcion, precio from productos where clave_producto=\"$keys\" "; $_result = mysql_query($query, $conexion); //verificamos si existe un resultado if($_re = mysql_fetch_array($_result)) { //Regresamos de forma hablada la informacion encontrada $agi->text2wav("El producto es $_re[description], y su precio $_re[price]"); }else{ //de lo contrario enviamos un mensaje de que el producto no pudo ser encontrado $agi->text2wav("El producto no pudo ser encontrado en nuesta base de datos"); } } } while($keys != '999'); $agi->text2wav('Goodbye'); //al finalizar el script del AGI siempre es recomendable ejecutar esta función para no dejar el canal abierto. $agi->hangup(); ?> //*****************
#Despues de agregar lo anterior guardamos el archivo demoagi.php #le damos permisos de ejecucion sudo chmod +x demoagi.php #Creamos el archivo phpagi.conf en el directorio de archivos de configuración de Asterisk. sudo emacs /etc/asterisk/phpagi.conf #Y en ese archivo introducimos lo siguiente [festival] text2wave=/usr/bin/text2wave tempdir=/var/lib/asterisk/sounds/tmp/ #ojo solo verificar la ruta de instalacion de text2wave, con whereis text2wave sabremos su directorio # si no se encuentra el directorio /var/lib/asterisk/sounds/tmp/, creamos el directorio, y le asignamos el usuario de ejecución del pbx de asterisk #Despues de guardar los cambios al archivo editado anteriormente, creamos una extension dentro del archivo extensions_custom.conf en el directorio de configuración Asterisk sudo emacs /etc/asterisk/extensions_custom.conf #y agregamos algo como esto [custom-agiphp] exten=>101,1,Answer exten=>101,2,agi(demoagi.php) exten=>101,3,Hangup #guardamos el archivo y reiniciamos asterisk, este modo de reinicio es pensando que tenemos FreePBX instalado. sudo amportal restart #Si tenemos instalado FreePBX en nuestro servidor de Voz sobre IP, esto también se puede configurar en la parte de configuración de extensión para Aplicaciones. #Despues de que Asterisk haya inicializado, solo desde alguna extensión marcamos la extensión 101 y podremos notar que nuestra aplicación comienza a funcionar. #1.1 Re: Re: Como implementar un AGI con PHP en un conmutador de VoIP sobre Asteriskamigo, sou nuevo en asterisk y en linux, me gustaria me pudieras ayudar a hacer funcionar festival en trixbox. [ Responder (0) ]
#2 Re: Como implementar un AGI con PHP en un conmutador de VoIP sobre AsteriskHumm.. ya diste de alta la extension 101 en extensions_custom.conf ? [ Responder (0) ]
#3 documentacion sobre AGInecesito todo lo que pueda de AGI por favor que estoy trabajando en aplicaciones de Voip [ Responder (0) ]
#4 Re:Como implementar un AGI con PHP en un conmutador de VoIP sobre AsteriskEn http://www.voip-info.org puedes encontrar toda la información referente a AGIs. Saludos. [ Responder (0) ]
#5 Como implementar un AGI con PHP en un conmutador de VoIP sobre Asterisk
Jose Tapia, <E-Mail> / 16 March, 3:41pm
Gracias por el aporte se te agradece mucho :D [ Responder (0) ]
Dejar un comentario
Fuentes XML de comentario: RSS | Atom
|
Nube de EtiquetasEventosEncuestaComentarios Recientes
|
#1 Re: Como implementar un AGI con PHP en un conmutador de VoIP sobre Asterisk
Hola a todos y antes que nada gracias por este manual.
Yo estoy intentando implementar esta misma AGI en Trixbox.
Cambiando algunos comandos logre hacer funcionar el
Festival. Sin embargo no he podido escuchar información
obtenida desde una Base de Datos. Segui las instrucciones
del manual pero cada vez que marco desde una extensión al 101 obtengo un mensaje que dice "La persona que esta llamando no
esta disponible, por favor intente mas tarde".
Al ingresar al Asterisk CLI no aparece nada al marcar al 101.
Agradezco cualquier ayuda o consejo que me puedan brindar para
resolver mi problema.