Extendiendo Elastix con AGI's
Que es un AGI?
• Asterisk Gateway Interface por sus siglas en ingles
• Puede ser escrito en cualquier lenguaje
• Es ejecutado desde el dialplan
Ejemplos de uso de AGI's
• Encuestas automatizadas
• Consulta de saldos y pagos
• Encuestas de satisfacción
• Automatización de Pagos
Invocando un AGI
exten => 123,1,Answer() same => n,AGI(hola.php) same => n,Hangup()
Variables por defecto
• agi_request - Nombre del AGI• agi_channel - Canal originante• agi_language - Lenguaje del canal• agi_type - Tipo de canal (SIP, IAX, Dahdi)• agi_uniqueid - Unique id Llamada• agi_callerid - Caller ID• agi_dnid - DID• agi_context - Contexto de origen
Invocando un AGI con variables personalizadas
exten => 123,1,Answer() same => n,Set(VAR1=456) same => n,AGI(hola.php,${VAR1}) same => n,Hangup()
Programando un AGI - Elementos Básicos
#!/usr/bin/php -q<?php
set_time_limit(30);require_once "phpagi.php";
?>
Tiempo máximo de ejeccion
Inicio de código PHP
Importación de Libreria
Fin de código PHP
Programando un AGI - Conexión a BD
#!/usr/bin/php -q<?php
set_time_limit(30);require_once "phpagi.php";
$agi = new AGI();$agi->answer();
$conexion = mysql_connect("host","user","pass") or die(mysql_error());mysql_select_db($db, $conexion); ?>
Responde el canal
Realizamos Conexión a BD
Programando un AGI - Obteniendo Variables
#!/usr/bin/php -q<?php
set_time_limit(30);require_once "phpagi.php";
$agi = new AGI();$agi->answer();
$conexion = mysql_connect("host","user","pass") or die(mysql_error());mysql_select_db(encuesta, $conexion);
#Obtenemos CallerID$callernum=$agi->get_variable("CALLERID(number)");$callernum=$callernum['data'];
$var1=$argv[1]; ?>
Obtenemos variable de canal
Variable Personalizada
Programando un AGI - El programa
$error=0;$loop =0;
do{$do=0; $arr_answer = $agi->get_data("custom/q_survey",5000,1);$answer = $arr_answer['result']; if ($answer < 1 || $answer > 5) { $agi->exec('playback',"custom/inv_answer"); $error ++; $do=1; } if ($error > $loop) { $agi->exec('playback',"custom/end_invalid"); $agi->hangup(); } elseif($do == 0){ $row3 = mysql_query("INSERT INTO table_q (answer, caller_id) VALUES ('$answer', '$callernum') "); $agi->exec('playback',"custom/end_survey"); $agi->hangup(); } }while ($do == 1);
Audio Pregunta
Evento resuesta Inválida
Guardamos Resultado
Programando un AGI - Terminado
#!/usr/bin/php -q<?phpset_time_limit(30);require_once "phpagi.php";
$agi = new AGI();$agi->answer(); $conexion = mysql_connect("host","user","pass") or die(mysql_error());mysql_select_db(encuesta, $conexion); #Obtenemos CallerID$callernum=$agi->get_variable("CALLERID(number)");$callernum=$callernum['data']; $error=0; do{$do=0; $arr_answer = $agi->get_data("custom/$q_survey",5000,1);$answer = $arr_answer['result']; if ($answer < $min_val || $answer > $max_val) { $agi->exec('playback',"custom/$inv_answer"); $error ++; $do=1; } if ($error > $loop) { $agi->exec('playback',"custom/$end_invalid"); $agi->hangup(); } elseif($do == 0){ $row3 = mysql_query("INSERT INTO $table (answer, caller_id) VALUES ('$answer', '$callernum') "); $agi->exec('playback',"custom/$end_survey"); $agi->hangup(); } }while ($do == 1); ?>
Programando un AGI - Consulta de Saldo
#!/usr/bin/php -q<?phpset_time_limit(30);require_once "phpagi.php";
$agi = new AGI();$agi->answer(); $conexion = mysql_connect("host","user","pass") or die(mysql_error());mysql_select_db(saldo, $conexion); $arr_answer = $agi->get_data("custom/cliente",5000,10);$answer = $arr_answer['result']; $query_saldo = mysql_query("SELECT saldo FROM saldos WHERE id='$canswer' ");$saldo = mysql_fetch_row($query_saldo);$saldo = $saldo[0];
$agi->set_variable("SALDO", "$saldo");?>
Solicitamos Numero Cliente
Consultamos Saldo
Asignamos Valor a Variable
Programando un AGI - Consulta de Saldo
exten => 123,1,AGI(saldo.php)same => n,Playback(custom/susaldo)
same => n,SayNumber(${SALDO}) same => n,Playback(custom/pesos) same => n,Hangup()
Programando un AGI - Consulta de Saldo
exten => 123,1,AGI(saldo.php) same => n,Swift(Su saldo al día de hoy
es de ${SALDO} pesos, Gracias) same => n,Hangup()
Gracias por su Atención!
Augusto Sepúlveda S.H.
Correo: [email protected]: augustosep
Nextor Telecom
Leibnitz 47 - 105 G Salinas Varona 215Col Anzurez, México DF Burocratas del Edo, Monterrey NL+525514540020 +528114540020
http://www.vozero.mxhttp://mangoanalytics.orghttp://www.nextortelecom.com