Extendiendo Elastix: AGIs para encuestas y consultas de datos

15
Extendiendo Elastix con AGI's

description

Augusto Sepúlveda CEO Nextor Telecom

Transcript of Extendiendo Elastix: AGIs para encuestas y consultas de datos

Page 1: Extendiendo Elastix: AGIs para encuestas y consultas de datos

Extendiendo Elastix con AGI's

Page 2: Extendiendo Elastix: AGIs para encuestas y consultas de datos

Que es un AGI?

• Asterisk Gateway Interface por sus siglas en ingles

• Puede ser escrito en cualquier lenguaje

• Es ejecutado desde el dialplan

Page 3: Extendiendo Elastix: AGIs para encuestas y consultas de datos

Ejemplos de uso de AGI's

• Encuestas automatizadas

• Consulta de saldos y pagos

• Encuestas de satisfacción

• Automatización de Pagos

Page 4: Extendiendo Elastix: AGIs para encuestas y consultas de datos

Invocando un AGI

exten => 123,1,Answer() same => n,AGI(hola.php) same => n,Hangup()

Page 5: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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

Page 6: Extendiendo Elastix: AGIs para encuestas y consultas de datos

Invocando un AGI con variables personalizadas

exten => 123,1,Answer() same => n,Set(VAR1=456) same => n,AGI(hola.php,${VAR1}) same => n,Hangup()

Page 7: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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

Page 8: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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

Page 9: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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

Page 10: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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

Page 11: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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); ?>

Page 12: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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

Page 13: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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()

Page 14: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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()

Page 15: Extendiendo Elastix: AGIs para encuestas y consultas de datos

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