Hola, esta vez les pongo un codigo que acabo de terminar, para realizar escuchas a los agentes con un simple click. Ya que muchos clientes nos han solicitado poder realizar escuchas sin tener que marcar nada, basta que tengan una extension activa como supervisor por ejemplo.
Este codigo requiere que el usuario tenga asignada una extensión ya que la extensión a la que llamará para realizar la escucha es la que tenga asignada el propio usuario.
espero les guste , al menos para nosotros es muy practico, de momento solo lo puse en modo escucha no susurro, pero pueden modificarlo a su gusto.
en /var/www/html/modules/campaign_monitoring/index.php
buscar
function manejarMonitoreo_HTML($module_name, $smarty, $sDirLocalPlantillas)
{
y añadir justo debajo
//hgmnetwork.com - 23-08-2018 creado para obtener la extension del usuario y pasarlo para la escucha
global $arrConf;
$pDB = new paloDB($arrConf['issabel_dsn']['acl']);
$pACL = new paloACL($pD;
$user = $SESSION['issabel_user'];
$extension = $pACL->getUserExtension($user);
$extension=
//echo "<hr>usuario es $user y sesion es (".$SESSION['issabel_user'].") y extension es $extension <hr>";
===========================
luego justo debajo
$smarty->assign("MODULE_NAME", $module_name);
$smarty->assign(array(
'title' => _tr('Campaign Monitoring'),
'icon' => '/images/list.png',
'ETIQUETA_CAMPANIA' => _tr('Campaign'),
'ETIQUETA_FECHA_INICIO' => _tr('Start date'),
'ETIQUETA_FECHA_FINAL' => _tr('End date'),
'ETIQUETA_HORARIO' => _tr('Schedule'),
'ETIQUETA_COLA' => _tr('Queue'),
'ETIQUETA_INTENTOS' => _tr('Retries'),
'ETIQUETA_TOTAL_LLAMADAS' => _tr('Total calls'),
'ETIQUETA_LLAMADAS_PENDIENTES' => _tr('Pending calls'),
'ETIQUETA_LLAMADAS_FALLIDAS' => _tr('Failed calls'),
'ETIQUETA_LLAMADAS_CORTAS' => _tr('Short calls'),
'ETIQUETA_LLAMADAS_EXITO' => _tr('Connected calls'),
'ETIQUETA_LLAMADAS_MARCANDO' => _tr('Placing calls'),
'ETIQUETA_LLAMADAS_COLA' => _tr('Queued calls'),
'ETIQUETA_LLAMADAS_TIMBRANDO' => _tr('Ringing calls'),
'ETIQUETA_LLAMADAS_ABANDONADAS' => _tr('Abandoned calls'),
'ETIQUETA_LLAMADAS_NOCONTESTA' => _tr('Unanswered calls'),
'ETIQUETA_LLAMADAS_TERMINADAS' => _tr('Finished calls'),
'ETIQUETA_LLAMADAS_SINRASTRO' => _tr('Lost track'),
'ETIQUETA_AGENTES' => _tr('Agents'),
'ETIQUETA_NUMERO_TELEFONO' => _tr('Phone Number'),
'ETIQUETA_TRONCAL' => _tr('Trunk'),
'ETIQUETA_ESTADO' => _tr('Status'),
'ETIQUETA_DESDE' => _tr('Since'),
'ETIQUETA_AGENTE' => _tr('Agent'),
'ETIQUETA_REGISTRO' => _tr('View campaign log'),
'PREVIOUS_N' => _tr('Previous 100 entries'),
'ETIQUETA_MAX_DURAC_LLAM' => _tr('Maximum Call Duration'),
'ETIQUETA_PROMEDIO_DURAC_LLAM' => _tr('Average Call Duration'),
));
y añadir debajo de
'ETIQUETA_PROMEDIO_DURAC_LLAM' => _tr('Average Call Duration'),
'EXTENSION_USUARIO' => _tr($extension)
=========================================================
en /var/www/html/modules/campaign_monitoring/themes/default/info_camania.tpl
buscar
<div class="llamadas" {literal}{{bindAttr style="alturaLlamada"}}{/literal}>
<table>
{literal}{{#view tagName="tbody"}}
{{#each agentes}}
<tr {{bindAttr class="reciente"}}>
<td width="20%" nowrap="nowrap"/> {{canal}}</td>
======================================
y reemplazar por
<div class="llamadas" {literal}{{bindAttr style="alturaLlamada"}}{/literal}>
<table>
{literal}{{#view tagName="tbody"}}
{{#each agentes}}
<tr {{bindAttr class="reciente"}}>
<td width="20%" nowrap="nowrap" OnClick="javascript:escuchar(this.innerHTML,'{/literal}{$EXTENSION_USUARIO}{literal}');"><img src="images/record.png" width="22" height="22" id="escucharAgente"/> {{canal}}</td>
======================================================================================================
ahora en /var/www/html/modules/campaign_monitoring/themes/default/js/javascript.js al final añadimos la funcion escuchar
//hgmnetwork.com funciona para realizar escucha a los agentes
function escuchar(agente,extension){
//reemplazamos cualquier etiqueta dejando solo el texto del agente por ejemplo SIP/agente o A/agente Agent/agente SIP/5001 A/5001
const regex = /(<([>]+)>)/ig;
var agente = agente.replace(regex, '');
//ahora quitamos el espacio inicial o cualquiera
var agente = agente.replace(' ', '');
// alert("realizamos llamada de chanspy con el agente: (" + agente+" a la extension "+ extension);
$.ajax({
url: "/modules/campaign_monitoring/libs/escuchar_agente.php",
type: "get", //send it through get method
data: {
agente: agente,
extension: extension,
},
success: function(response) {
//Do Something
// alert(response);
console.log(response);
},
error: function(xhr) {
//Do Something to handle error
console.log('error escuchar_agente.php');
console.log(xhr);
alert("Se ha producido un error al intentar escuchar.")
}
});
};
=====================================================================================
ahora creamos el fichero /var/www/html/modules/campaign_monitoring/libs/escuchar_agente.php
y añadimos
<?php
//error_reporting(E_ALL);
//ini_set('display_errors', 1);
//hgmnetwork.com 21-08-2018 fichero para realizar una llamada al chanspy con el agenet pasado
//$GET['agente'] nos da el canal a escuchar sip/5001 o sip/loquesea si es callback y a/5001 o lo que sea si es agente.
//echo "escuchar al agente: ".$GET['agente']." en la extension ".$GET['extension'];
$array_extensiones=explode(";",$GET['extension']);//pasamos los valores a un array ya que creamos extra para poder tener un usuario varias extensiones separadas por ;
$extension=trim($array_extensiones[0]);
//a la extension le quitamos el SIP/ o AGENT/ y dejamos solo el numero
$extension=preg_replace("/(SIP\/|AGENT\/i)/","",$extension);//dejamos solo el numero
//echo "<hr> la extension del usuario es $array_extensiones[0] y la del usuario actual es ".$GET['agente']." <hr>";
//lo mismo con el agente
$agente =trim($GET['agente']);
$agente=preg_replace("/(SIP\/|AGENT\/)/i","",$agente);//dejamos solo el numero
#permit=127.0.0.1/255.255.255.0,xxx.xxx.xxx.xxx ;(the ip address of the server this page is running on)
$strHost = "127.0.0.1";
#specify the username you want to login with (these users are defined in /etc/asterisk/manager.conf)
$strUser = "usuario de manager.conf";
#specify the password for the above user
$strSecret = "password del usuario de manager.conf";
$oSocket = fsockopen($strHost, 5038, $errnum, $errdesc) or die("Connection to host failed libs/escuchar_agente.php");
$from = $extension;//quien escucha
$to = $agente;//quien es escuchado el agente
fputs($oSocket, "Action: Login\r\n");
fputs($oSocket, "UserName: $strUser\r\n");
fputs($oSocket, "Secret: $strSecret\r\n\r\n");
$wrets=fgets($oSocket,128);
fputs($oSocket, "Action: Originate\r\n" );
fputs($oSocket, "CallerId: Whisper Agente: $agente\r\n");
fputs($oSocket, "Channel: SIP/".$from."\r\n" );
fputs($oSocket, "Application: ChanSpy\r\n" );
fputs($oSocket, "Data: SIP/".$to."\r\n\r\n" );
$wrets=fgets($oSocket,128);
sleep(3);
fclose($oSocket);
echo "Realizando Whisper al Agente $agente y a la extensión $extension";
?>
espero les sea de utilidad! prubenlo y cualquier sujerencia es bienvenida, le he puesto el icono de un altavoz porque es el que vi que ya estaba y asi se ahorra subir mas iconos y queda bien
he usado javascript en vez de jquery en algunos por rapidez en hacerlo y por que en las pruebas lo hicimos asi y funciona y cambiar es mas tiempo
pero cualquiera puede adaptarlo y poner el codigo aqui
en breve lo subire a github para ver si lo aprueban y lo ponen en las siguiente release ya que creo que es muy util.
ahora estoy con otras mejoras que espero en poco tenerlas y publicarlas, como son un usuario multiples extensiones, y ver los cdr las grabaciones y el sumary y en el call center poder poner un caller id por cada campaña diferente