[AsteriskBrasil] monitoring preditivo elastix
Roger Pitigliani
rogerwinter em gmail.com
Quinta Novembro 29 23:25:07 BRST 2012
Boa Noite Danilo..
É possível sim..
Não é a melhor forma, mas aí vai ela.. ( Testei aqui em um Elastix 2.3 )
Você terá que alterar dois arquivos, são eles:
/var/www/html/modules/monitoring/index.php
/var/www/html/modules/monitoring/libs/paloSantoMonitoring.class.php
Fazendo as alterações, você poderá filtrar por Agente e por Numero discado.
Note que as alterações
são para que funcione com callcenter ativo (discador), o recpetivo não.
Teriam que haver mais mudanças para isso.
Vamos lá...
No index.php é para ajustar os campos de filtro, encontre os blocos de
codigos e deixe-os da seguinte maneira:
// Aprox linha 110
switch($filter_field){
case "dst":
$filter_field = "dst";
$nameFilterField = _tr("Destination");
break;
case "dstcall":
$filter_field = "dstcall";
$nameFilterField = _tr("CallCenter-Dst");
break;
case "agent":
$filter_field = "agent";
$nameFilterField = _tr("CallCenter-Agent");
break;
case "userfield":
$filter_field = "userfield";
$nameFilterField = _tr("Type");
break;
default:
$filter_field = "src";
$nameFilterField = _tr("Source");
break;
}
// Aprox linha 570
$arrFilter = array(
"src" => _tr("Source"),
"dst" => _tr("Destination"), // Filtra destino tanto do
callcenter quanto das chamadas de ramal
"agent" => _tr("Agente"), // Adicionei filtro por Agente.
"userfield" => _tr("Type"),
);
No arquivo paloSantoMonitoring.class.php, altere as duas funções
"getMonitoring" e "getNumMonitoring", segue como ficam:
function getMonitoring($limit, $offset, $filter_field, $filter_value,
$extension, $date_initial, $date_final)
{
$where = "";
$arrParam = array();
if(isset($filter_field) & $filter_field !=""){
if($filter_field == "userfield"){
$in_val = strtolower($filter_value);
switch($in_val){
case "outgoing":
$where = " AND (userfield like 'audio:O%' OR
userfield like 'audio:/var/spool/asterisk/monitor/O%') ";
break;
case "group":
$where = " AND (userfield like 'audio:g%' OR
userfield like 'audio:/var/spool/asterisk/monitor/g%') ";
break;
case "queue":
$where = " AND (userfield like 'audio:q%' OR
userfield like 'audio:/var/spool/asterisk/monitor/q%') ";
break;
default :
$where = " AND userfield REGEXP
'[[:<:]]audio:[0-9]' ";
break;
}
}else{
$arrParam[] = "$filter_value%";
if( $filter_field == 'agent' ){
$where = " AND a.number like ? AND userfield LIKE
'audio:%' ";
}else if( $filter_field == 'dstcall' ){
$where = " AND cc.phone like ? AND userfield LIKE
'audio:%' ";
}else{
$where = " AND $filter_field like ? AND userfield
LIKE 'audio:%' ";
}
}
}
if((isset($date_initial) & $date_initial !="") &&
(isset($date_final) & $date_final !="")){
$arrParam[] = $date_initial;
$arrParam[] = $date_final;
$where .= " AND (calldate >= ? AND calldate <= ?) ";
}else{
$date_initial = date('Y-m-d')." 00:00:00";
$date_final = date('Y-m-d')." 23:59:59";
$arrParam[] = $date_initial;
$arrParam[] = $date_final;
$where .= " AND (calldate >= ? AND calldate <= ?) ";
}
if(isset($extension) & $extension !=""){
$arrParam[] = $extension;
$arrParam[] = $extension;
$where .= " AND (src=? OR dst=? ) ";
}
$arrParam[] = $limit;
$arrParam[] = $offset;
$query = "SELECT c.calldate,
c.clid,
IF( cc.phone IS
NULL,c.src,CONCAT('Agent/',a.number)) as src,
IF( cc.phone IS NULL,c.dst,cc.phone) as dst,
c.dcontext,
c.channel,
c.dstchannel,
c.lastapp,
c.lastdata,
c.duration,
c.billsec,
c.disposition,
c.amaflags,
c.accountcode,
c.uniqueid,
c.userfield
FROM asteriskcdrdb.cdr c
LEFT JOIN call_center.calls cc ON ( c.uniqueid =
cc.uniqueid )
LEFT JOIN call_center.agent a ON ( cc.id_agent =
a.id )
WHERE c.userfield <> '' $where ORDER BY c.uniqueid
DESC LIMIT ? OFFSET ?";
$result=$this->_DB->fetchTable($query, true, $arrParam);
if($result==FALSE){
$this->errMsg = $this->_DB->errMsg;
return array();
}
return $result;
}
// ------
function getNumMonitoring($filter_field, $filter_value, $extension,
$date_initial, $date_final)
{
$where = "";
$arrParam = array();
if(isset($filter_field) && $filter_field !="" &&
isset($filter_value) && $filter_value !=""){
if($filter_field == "userfield"){
$in_val = strtolower($filter_value);
switch($in_val){
case "outgoing":
$where = " AND (userfield like 'audio:O%' OR
userfield like 'audio:/var/spool/asterisk/monitor/O%') ";
break;
case "group":
$where = " AND (userfield like 'audio:g%' OR
userfield like 'audio:/var/spool/asterisk/monitor/g%') ";
break;
case "queue":
$where = " AND (userfield like 'audio:q%' OR
userfield like 'audio:/var/spool/asterisk/monitor/q%') ";
break;
default :
$where = " AND userfield REGEXP
'[[:<:]]audio:[0-9]' ";
break;
}
}else{
$arrParam[] = "$filter_value%";
if( $filter_field == 'agent' ){
$where = " AND a.number like ? AND userfield LIKE
'audio:%' ";
}else if( $filter_field == 'dstcall' ){
$where = " AND cc.phone like ? AND userfield LIKE
'audio:%' ";
}else{
$where = " AND $filter_field like ? AND userfield
LIKE 'audio:%' ";
}
}
}
if((isset($date_initial) & $date_initial !="") &&
(isset($date_final) & $date_final !="")){
$arrParam[] = $date_initial;
$arrParam[] = $date_final;
$where .= " AND (c.calldate >= ? AND c.calldate <= ?) ";
}else{
$date_initial = date('Y-m-d')." 00:00:00";
$date_final = date('Y-m-d')." 23:59:59";
$arrParam[] = $date_initial;
$arrParam[] = $date_final;
$where .= " AND (c.calldate >= ? AND c.calldate <= ?) ";
}
if(isset($extension) & $extension !=""){
$arrParam[] = $extension;
$arrParam[] = $extension;
$where .= " AND (c.src=? OR c.dst=?)";
}
$query = "SELECT COUNT(*) FROM asteriskcdrdb.cdr c
LEFT JOIN call_center.calls cc ON ( c.uniqueid =
cc.uniqueid )
LEFT JOIN call_center.agent a ON ( cc.id_agent =
a.id )
WHERE userfield <> '' $where";
$result=$this->_DB->getFirstRowQuery($query,false,$arrParam);
if($result==FALSE){
$this->errMsg = $this->_DB->errMsg;
return 0;
}
return $result[0];
}
** É bom criar indices no campo "uniqueid" das tabelas do mysql.
ALTER TABLE `call_center`.`calls` ADD INDEX `idx_uniqueid`(`uniqueid`);
Espero ter ajudado..
Abraço.
Em 29 de novembro de 2012 21:22, <danilo.almeida em g1telecom.com.br> escreveu:
> Bom...
>
> Havia perguntado essa semana como fazer para que no monitoring do
> elastix, quando uma chamada saísse pelo discador automático do call
> Center, em vez de binar o meu numero de saída, queria que binasse o
> numero que esta sendo discado pelo "discador".
> Segui um tutorial sugerido por um amigo aqui da lista e escrito pelo
> Alberto Sato, porém, no monitoring, ele somente duplica a coluna
> source e não me resolveu o problema.
>
> Observei diretamente no banco de dados e vi que ele não armazena o
> numero discado pelo campanha na tabela cdr, mais armazena na tabela
> calls do banco de dados call_center.
>
> Será que tem como eu puxar essa coluna no monitoring? Se sim, alguém
> pode me dar uma luz de quais arquivos da interface devo alterar
> (principalmente os de conexão com o banco)?
>
> Desde já agradeço quem puder me ajudar
>
> Att
> Danilo Almeida
>
>
> _______________________________________________
> KHOMP Inovação: External Board Series
> Módulos de 1/2 rack e 1U para todas as interfaces e soluções Asterisk e
> FreeSWITCH.
> Tenha a External Series Experience na sua aplicação. Visite www.khomp.com
> _______________________________________________
> DIGIVOICE Fabricante de Placas de Voz e Channel Bank
> 20 anos de experiência com E1(R2/ISDN), FXS, FXO e GSM
> Centro Treinamento - Curso de PABX IP - Asterisk - Site
> www.digivoice.com.br
> ________
> YEALINK: Telefones IP e VídeoPhones IP com o melhor custo/benefício do
> mercado.
> email: yealink em commlogik.com.br | www.commlogik.com.br | (11) 5503-1011
> ______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>
--
--
Roger Pitigliani
rogerwinter em gmail.com
Skype: roger.pitigliani
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20121129/33953d82/attachment-0001.htm
Mais detalhes sobre a lista de discussão AsteriskBrasil