Extendiendo Elastix: AGIs para encuestas y consultas de datos

4,563 views

Published on

Augusto Sepúlveda
CEO
Nextor Telecom

Published in: Technology

Extendiendo Elastix: AGIs para encuestas y consultas de datos

  1. 1. Extendiendo Elastix con AGI's
  2. 2. Que es un AGI? • Asterisk Gateway Interface por sus siglas en ingles • Puede ser escrito en cualquier lenguaje • Es ejecutado desde el dialplan
  3. 3. Ejemplos de uso de AGI's • Encuestas automatizadas • Consulta de saldos y pagos • Encuestas de satisfacción • Automatización de Pagos
  4. 4. Invocando un AGI exten => 123,1,Answer() same => n,AGI(hola.php) same => n,Hangup()
  5. 5. 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
  6. 6. Invocando un AGI con variables personalizadas exten => 123,1,Answer() same => n,Set(VAR1=456) same => n,AGI(hola.php,${VAR1}) same => n,Hangup()
  7. 7. 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
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. Programando un AGI - Terminado #!/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']; $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); ?>
  12. 12. Programando un AGI - Consulta de Saldo #!/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(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
  13. 13. 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()
  14. 14. 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()
  15. 15. Gracias por su Atención! Augusto Sepúlveda S.H. Correo: augusto.sepulveda@nextortelecom.com Skype: augustosep Nextor Telecom Leibnitz 47 - 105 G Salinas Varona 215 Col Anzurez, México DF Burocratas del Edo, Monterrey NL +525514540020 +528114540020 http://www.vozero.mx http://mangoanalytics.orghttp://www.nextortelecom.com

×