[AsteriskBrasil] RES: monitoring preditivo elastix

Danilo Almeida danilo.almeida em g1telecom.com.br
Sexta Novembro 30 16:23:46 BRST 2012


Roger

 

Não consegui realizar algumas alterações de acordo como te passei no e-mail,
porém, quando voltei os 2 arquivos que havia feito backup, não estou
conseguindo fazer download das gravações que caem na fila, elas armazenam no
banco mais não consigo realizar o download, da que o arquivo não existe.

 

url que aparece: https://IP_SERVIDOR/index.php?menu=monitoring
<https://IP_SERVIDOR/index.php?menu=monitoring&action=download&id=1354299076
.11971&rawmode=yes> &action=download&id=1354299076.11971&rawmode=yes

 

o que será que fiz de errado pra acontecer isso?

 

obrigado

 

att

 

Danilo Ricardo de Almeida

 

De: asteriskbrasil-bounces em listas.asteriskbrasil.org
[mailto:asteriskbrasil-bounces em listas.asteriskbrasil.org] Em nome de Roger
Pitigliani
Enviada em: Thursday, November 29, 2012 11:25 PM
Para: asteriskbrasil em listas.asteriskbrasil.org
Cc: elastixbrasil em googlegroups.com
Assunto: Re: [AsteriskBrasil] monitoring preditivo elastix

 

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
<tel:%2811%29%205503-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/20121130/ba79e77b/attachment-0001.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil