Hola, hace tiempo que no posteo, ya que he entrado en un training complicado, y no dispongo de mucho tiempo, pero , siempre es posible hacerse de un espacio, bueno en este pequeno howto, voy a tratar de explicar como implementar un sistema de consulta de stocks, con datos almacenados una base de datos en mysql , que será invocado vía al dialplan de asterisk y consultado usando phpagi.
Cual es la idea , podemos automatizar un sistema de consulta de productos vía nuestra central en asterisk, y así liberar un poco a nuestro departamento de ventas, además de otras aplicaciones que podamos realizar en teniendo como base esta idea.
1.- Creación de la base de datos en Mysql
#mysql -p
mysql>create database stock;
mysql>CREATE TABLE `productos` (
mysql>`producto` int(4) NOT NULL default ‘0’,
mysql>`cantidad` int(4) NOT NULL default ‘0’
mysql> );
mysql>INSERT INTO productos (producto,cantidad) VALUES (4001,5);
mysql>INSERT INTO productos (producto,cantidad) VALUES (4002,3);
mysql>SELECT * FROM productos;
2.- Implementando el dialplan en extension.conf
[local] ;contexto de todos mis anexos
exten=> _*5,1,Goto(consulta,s,1) ;cuando marquemos *5 saltara al contexto consulta
[consulta] ;contexto para la consulta de datos
exten=> _s,1,Answer
exten=> _s,2,Background(solicita-codigo-producto) ; reproduzco un audio que pregunte por el codigo
exten=> _s,3,Waitexten(4) ; espero 4 segundos
exten=> _XXXX,1,Set(COD=${EXTEN}) ; capturo lo digitado y lo guardo en la variable COD
exten=> _XXXX,2,AGI(consulta.php|${COD}) ; lanzo el agi y le envio la variable COD
exten=> _XXXX,3,HangUp
3. – Implementado el phpagi , lo que hara es recibir la variable COD , se conectara con la base de datos ¨stock¨ , para esto tenemos que tener los privilegios de acceso , y luego con la consulta echa , reproducirá la cantidad encontrada en voz mediante la función SayDigits , en ¨/var/lib/asterisk/agi-bin/¨ crear consulta.php con el siguiente código :
consulta.php
#!/usr/bin/php -q
<?php
ob_implicit_flush(true);
set_time_limit(6);
error_reporting(0);
$in = fopen(«php://stdin»,»r»);
$stdlog = fopen(«/var/log/asterisk/agi.log», «w»);
// Habilita modo debugging (mas verbose)
$debug = true;
// Hacer las definiciones de funciones antes de empezar el bucle principal
function read() {
global $in, $debug, $stdlog;
$input = str_replace(«\n», «», fgets($in, 4096));
if ($debug) fputs($stdlog, «read: $input\n»);
return $input;
}
function write($line) {
global $debug, $stdlog;
if ($debug) fputs($stdlog, «write: $line\n»);
echo $line.»\n»;
}
// Colocamos headers AGI dentro de un array
while ($env=read()) {
$s = split(«: «,$env);
$agi[str_replace(«agi_»,»»,$s[0])] = trim($s[1]);
if (($env == «») || ($env == «\n»)) {
break;
}
}
// Función que conecta al banco de datos
function connect_db() {
$db_connection = mysql_connect(‘localhost’,’usuario’,’contrasena’) or die
(mysql_error());
$db_select = mysql_select_db(‘stock’) or die (mysql_error());
}
// Programa Principal
connect_db();
// Almacena valor de la variable COD en
write(«GET VARIABLE COD»);
//lee variable in
$c = fgets($in, 4096);
// reemplaza retorno de carro por espacios
$c = str_replace(«\n»,»»,$c);
// quita 14 caracteres a la izquiera y 1 a la derecha
$c = substr($c,14);
$c = substr($c,0,-1);
$query = «SELECT cantidad FROM productos WHERE producto=’$c’»;
$query_result = @mysql_query($query);
$result = mysql_fetch_row($query_result);
$valor = «$result[0]»;
write(«EXEC SayDigits \» $valor \»\n»);
read();
fclose($in);
fclose($stdlog);
exit;
?>
Espero que les sirva
Saludos
Juan Oliva

Replica a Angie Cancelar la respuesta