Como hacer llamadas en automático usando AMI y el comando originate en Asterisk PBX
Posted Junio 6th, 2010 by phylevn
Aquí posteo un código muy simple hecho en PHP que permite marcar a un número para luego enlazarlo a un AGI, Un grupo de marcación, grupo de extensiones, IVR, Cola de llamadas, etc.,
<?
#Direccion IP del Servidor de Asterisk Manager
$strHost = "localhost";
#Usuario dado de alta en el Asterisk Manager definido en /etc/asterisk/manager.conf o /etc/asterisk/manager_custom.conf
$strUser = "cloudvoox";
#Password del usuario del Asterisk Manager definido en /etc/asterisk/manager.conf o /etc/asterisk/manager_custom.conf
$strSecret = "cloudvoox";
#especificamos el contexto
$strContext = "from-internal";
#indicamos el tiempo de espera de la marcación
$strWaitTime = 45;
#La prioridad para colocar la llamada
$strPriority = 1;
#maximo de reintentos
$strMaxRetry = "2";
#Extensión a dónde mandaremos la llamada realizada, previamente debemos definirla extension en /etc/asterisk/extensions_custom.conf, esta puede ser un AGI, un Grupo de marcación, IVR, Extension, Cola de llamadas, etc.
$number="1997";
#A partir de aquí podemos crear un ciclo que lea diversos números a marcar, por ejemplo podría ser un mysql_fetch_array que nos obtenga los numeros a marcar y sustituirlos en el número de abajo
#Aqui podemos enlazar los destinatarios externos ya sean extensiones internas SIP o IAX, o también pueden ser números de la PSTN que salgamos mediante IAX2, SIP, Zaptel o DAHDI
#En este caso estoy llamando a traves de voipjet al número de la ciudad de México 11689818 (+525511689818)
$strChannel = "IAX2/voipjet/011525511689818";
if ($strChannel!="" ) :
$errno=0 ;
$errstr=0 ;
$strCallerId = " WebCall<$number>";
$oSocket = fsockopen ($strHost, 5038, $errno, $errstr, 20);
if (!$oSocket) {
echo "$errstr ($errno)\n";
} else {
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Events: off\r\n");
fputs($oSocket, "Username: $strUser\r\n");
fputs($oSocket, "Secret: $strSecret\r\n\r\n");
fputs($oSocket, "Action: originate\r\n");
fputs($oSocket, "Channel: $strChannel\r\n");
fputs($oSocket, "WaitTime: $strWaitTime\r\n");
fputs($oSocket, "CallerId: $strCallerId\r\n");
fputs($oSocket, "Exten: $number\r\n");
fputs($oSocket, "Context: $strContext\r\n");
fputs($oSocket, "Priority: $strPriority\r\n\r\n");
fputs($oSocket, "Action: Logoff\r\n\r\n");
sleep(2);
fclose($oSocket);
}
if (!isset($_REQUEST['exten'])){
echo "";
} else {
echo "$strChannel enlazando a $number." ;
}
else :
exit() ;
endif ;
?>
El código anterior es muy fácil de entender, básicamente lo que hace es parametrizar el comando originate del protocolo AMI de Asterisk [ http://www.voip-info.org/wiki/view/Asterisk+Manager+API+Action+Originate ]
Ahí previamente debemos tener creada la extensión 1997 en el plan de marcación de asterisk, esa extensión es a dónde vamos a mandar las llamadas contestadas, en este caso por ejemplo se puede crear en /etc/asterisk/extensions_custom.conf en caso de que se use freepbx como lo hacemos a continuación
[code='Bash']
sudo editor /etc/asterisk/extensions_custom.conf
#Y agregamos lo siguiente o editamos en caso de que ya exista
[from-internal-custom]
include=>asterisk-calls
[asterisk-calls]
exten => 1997,1,Answer
exten => 1997,n,SetMusicOnHold(Publicidad)
exten => 1997,n,MusicOnHold()
exten => 1997,n,Hangup
#guardamos el archivo y reiniciamos el plan de marcación en la consola de asterisk
sudo asterisk -rvvv
dialplan reload
[/code]
Básicamente lo que hicimos en el plan de marcación es poner la música de fondo llamada publicidad, que previamente debimos haberla creada, aquí también puede ser un AGI, o marcar a un grupo de extensiones, IVR, etc.
Con esto fácilmente podemos subir una lista de números a marcar, para que enseguida ejecutar el script y Asterisk les llame para luego enlazar las llamadas a la extensión 1997 dónde podemos tener cualquier aplicación como puede ser un AGI que haga una encuesta por ejemplo
También podemos crear un script que genere hilos de llamadas dependiendo del número de canales de voz disponibles en nuestro conmutador de Voz sobre IP.
Aquí no tiene la opción para resaltar sintaxis, por lo que igual podrían verlo directamente en mi blog.
http://blog.oaxrom.com/index.php/blog/show/Como-hacer-llamadas-en-autom%C3%A1tico-usando-AMI-y-el-comando-originate-en-Asterisk-PBX.html

1 día 20 horas antes
1 día 20 horas antes
1 día 22 horas antes
2 days 16 horas antes
2 days 20 horas antes
2 days 20 horas antes
2 days 21 horas antes
2 days 21 horas antes
2 days 23 horas antes
2 days 23 horas antes