Como hacer llamadas en automático usando AMI y el comando originate en Asterisk PBX Muchos amigos me han preguntado como lanzar llamadas en automático a través de Asterisk, aparte que es muy común que en diversos foros salgan este tipo de preguntas. Por ello aquí posteo po steo 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, etc., #Direccion IP del Servidor de Asterisk Manager $strHost = "localhost" "localhost"; ; #Usuario dado de alta en el Asterisk Manager definido en /etc/asterisk/manager.conf o /etc/asterisk/manager_custom.conf $strUser = "cloudvoox" "cloudvoox"; ; #Password del usuario del Asterisk Manager definido en /etc/asterisk/manager.conf o /etc/asterisk/manager_custom.conf $strSecret = "cloudvoox" "cloudvoox"; ; #especificamos el contexto $strContext = "from-internal" "from-internal"; ; #indicamos el tiempo de espera de la marcación $strWaitTime = 45 45; ; #La prioridad para colocar la llamada $strPriority = 1; #maximo de reintentos $strMaxRetry = "2" "2"; ; #Extensión a dónde mandaremos la llamada realizada, previamente debemos definirla extension en /etc/asterisk/extensions_custom.conf, /etc/asterisk/extensions_ custom.conf, esta puede ser un AGI, un Grupo de marcación, IVR, Extension, Cola de llamadas, etc. $number= $number ="1997" "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 $strChannel!= !="" "" ) : $errno= $errno =0 ; $errstr= $errstr =0 ; $strCallerId = " WebCall<$number>"; WebCall<$number>"; $oSocket = fsockopen ($strHost $strHost, , 5038 5038, , $errno $errno, , $errstr $errstr, , 20 20) ); if (!$oSocket $oSocket) ) { echo "$errstr ($errno)
\n"; } else { fputs($oSocket fputs( $oSocket, , "Action: login\r\n"); fputs( fputs ($oSocket $oSocket, , "Events: off\r\n"); fputs( fputs ($oSocket $oSocket, , "Username: $strUser\r\n"); fputs( fputs ($oSocket $oSocket, , "Secret: $strSecret\r\n\r\n"); fputs( fputs ($oSocket $oSocket, , "Action: originate\r\n"); fputs( fputs ($oSocket $oSocket, , "Channel: $strChannel\r\n"); fputs( fputs ($oSocket $oSocket, , "WaitTime: $strWaitTime\r\n"); fputs( fputs ($oSocket $oSocket, , "CallerId: $strCallerId\r\n"); fputs( fputs ($oSocket $oSocket, , "Exten: $number\r\n"); fputs( fputs ($oSocket $oSocket, , "Context: $strContext\r\n"); fputs( fputs ($oSocket $oSocket, , "Priority: $strPriority\r\n\r\n"); fputs( fputs ($oSocket $oSocket, , "Action: Logoff\r\n\r\n"); sleep( sleep (2); fclose( fclose ($oSocket $oSocket) ); } if (!isset isset( ($_REQUEST $_REQUEST[ ['exten'])){ '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 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
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.