Hola, estuve dando trastes con realizar un ivr automatico y que se guardara el marcado en BD, probe varias cosas y al final la mejor forma fue la siguiente.
- Instalamos Issabel con asterisk 11.25.3
- Instalamos callcenter el call center, yo lo hago con este comando
- yum install issabel-callcenter-4.0.0-4.noarch
- subimos la grabacion y la guardamos con un nombre unico
5.Posteriormente, creamos un IVR a base de comandos, en mi caso cree uno por la interfaz y cuando se comportaba como yo queria, busque el mismo en Extension_Additional.conf y luego lo copie y lo pegue en extension_custom.conf y agregue el nuevo IVR cambiando el nombre del contexteo, en mi caso le coloque ivr-9. y agregue el include al inicio del archivo extensions_custom.conf
Linea agregada
include =>[ivr-9]
IVR CREADO y agregado al extensions_custom.comf
[ivr-9] ;
include => ivr-9-custom
exten => s,1,Set(TIMEOUT_LOOPCOUNT=0)
exten => s,n,Set(INVALID_LOOPCOUNT=0)
exten => s,n,Set(IVR_CONTEXT${CONTEXT}=${IVR_CONTEXT})
exten => s,n,Set(_IVR_CONTEXT=${CONTEXT})
exten => s,n,Set(__IVR_RETVM=)
exten => s,n,GotoIf($["${CDR(disposition)}" = "ANSWERED"]?skip)
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n(skip),Set(IVR_MSG=custom/NombreGrabacion) ;cambiar por el nombre de tu grabacion
exten => s,n(start),Set(TIMEOUT(digit)=3)
exten => s,n,ExecIf($["${IVR_MSG}" != ""]?Background(${IVR_MSG}))
exten => s,n,WaitExten(3,)
exten => 2,1,Set(__IVR_DIGIT_PRESSED=${EXTEN})
exten => 2,n,Set(CDR(userfield)=${EXTEN})
exten => 2,n,AGI(campaña.php,${CALLERID(all)},"camp1","2") linea del agi importante
exten => 2,n(ivrsel-2),Goto(app-blackhole,hangup,1)
exten => 1,1,Set(__IVR_DIGIT_PRESSED=${EXTEN})
exten => 1,n,Set(CDR(userfield)=${EXTEN})
exten => 1,n,AGI(campaña.php,${CALLERID(all)},"camp1","1") ;linea del agi importante
exten => 1,n(ivrsel-1),Goto(app-blackhole,hangup,1)
exten => i,1,Set(INVALID_LOOPCOUNT=$[${INVALID_LOOPCOUNT}+1])
exten => i,n,GotoIf($[${INVALID_LOOPCOUNT} > 1]?final)
exten => i,n,Set(IVR_MSG=custom/1)
exten => i,n,Goto(s,start)
exten => i,n(final),Goto(app-blackhole,hangup,1)
exten => t,1,Set(TIMEOUT_LOOPCOUNT=$[${TIMEOUT_LOOPCOUNT}+1])
exten => t,n,GotoIf($[${TIMEOUT_LOOPCOUNT} > 3]?final)
exten => t,n,Set(IVR_MSG=custom/1)
exten => t,n,Goto(s,start)
exten => t,n(final),Goto(app-blackhole,hangup,1)
exten => return,1,Set(IVR_CONTEXT=${CONTEXT})
exten => return,n,Set(IVR_CONTEXT${CONTEXT}=${IVR_CONTEXT${CONTEXT}})
exten => return,n,Set(IVR_MSG=custom/1)
exten => return,n,Goto(s,start)
exten => h,1,Hangup
exten => hang,1,Playback(vm-goodbye)
exten => hang,n,Hangup
;--== end of [ivr-9] ==--;
7.lo importante en este ivr es el AGI el cual esta en cada posible entrada de marcacion
exten => 2,n,AGI(campaña.php,${CALLERID(all)},"camp1","2")
exten => 1,n,AGI(campaña.php,${CALLERID(all)},"camp1","1")
- La creacion del agi debe incluir las variables que valos a pasarle, en mi caso paso 3 variables, la primera es el caller id o numero a quien llamo, la segunda la campaña de la que proviene (notese que para multiples campañas son multiples ivr) y el tercer parametro es el valor marcado.
El agi que he creado es el siguiente. y debe ser colocado en el directorio var/lib/asterisk/agi-bin y darle los permisos correspondientes.
#!/usr/bin/php -q
<?php
require('phpagi.php');
$host="127.0.0.1";
$user="tuusuario";
$pw="tucontraseña";
$db="basededatos";
$agi =
new AGI();
$agi->answer();
$NUMERO = $argv[1]; //callerid
$campa= $argv[2]; //Campaña
$marcado= $argv[3]; //NumeroMarcado
$con=mysql_connect($host,$user,$pw) or die("no conecta a la db".mysql_error());
mysql_select_db($db,$con)or die ("Error en db".mysql_error());
$sql ="INSERT INTO `llamada`(`numero`, `campa`, `marcado`) VALUES ('$NUMERO','$campa','$marcado')";
mysql_query ($sql);
mysql_close($con);
?>
9. Creamos una extension en sip_cutom.conf la cual debe tener como contexto, el contexto del ivr peston en extension_custom.conf. Ademas el host de la extension debe ser la direccion ip del servidor, asi el mismo siempre estara como disponible
[2000]
type=friend
context=ivr-9
insecure=invite,port
canreinvite=no
dtmfmode=rfc2833
host=10.150.0.3
10.
Crear una cola, en la cual agregamos como agentes estaticos la extension creada en en sip_cutom de la siguiente forma S2000 (en mi caso cree la 2000 ustedes pueden colocar la que necesiten.)
11. Crear una tabla en la base de datos con los campos correspondientes, en mi caso, numero,fecha,campa,marcado.
Una vez realizados estos pasos deben crear la campaña saliente, en la misma asignar la cola creada en el paso anterior subir los numeros y las llamadas deberian realizarse, al contestar escucharan el IVR y si marcan algun numero, se guardara el la base de datos creada
si no ven la marcacion, deben hacer un debug AGI para saber si el agi esta registrando o hay algun error de BD.
Esto seria todo, ya tendrian en funcionamiento ivr de llamadas salientes guardando los datos en bases de datos
Creditos: Toda la comunidad del foro, cada una de las lineas aqui puestas vinieron de diferentes post realizados aca y en algunos otros foros de elastix.
Saludos.