[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