PABX criado para pesquisas
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

662 lines
29 KiB

#!/usr/bin/php -Cq
<?php
/* * ***************************************************************************************
*
* REGISTRO DE CHAMADAS ABANDONADAS
* Autor
* Amarildo Pereira
*
* ***************************************************************************************
* Definições do Projeto
* Nome: Registro de Abandonada
* Data início: 02/08/2018
* Equipe: Amarildo Pereira
* Descrição:
* O objetivo do script é registrar o abandono das chamadas na fila a fim de prover infor-
* mações para que sejam retornadas posteriormente e tenha seus status atualizados adequa-
* damente. No momento do abandono a tabela "pbx_abandonadas_semretorno" será populada com
* as seguinte informações:
* 1 - abdsr_uniqueid: Identificador da chamada.
* 2 - abdsr_fila: Fila em que a chamada foi abandonada.
* 3 - abdsr_numero: O número do telefone que abandonou.
* 4 - abdsr_agt_logado: Número de agentes logados no momento do abandono.
* 5 - abdsr_agt_pausa: Número de agentes em pausa no momento do abandono.
* 6 - abdsr_agt_ocupado: Número de agentes que estavam em atendimento no momento do
* abandono.
* 7 - abdsr_agt_indisponivel: Número de agentes que estavam com a opção indisponível
* para fila marcada.
* 8 - abdsr_agt_nao_classificado: Número de agentes que não podiam receber chamadas
* porque não classificaram a chamada quando a fila tem classificação obrigatória.
*
* A tabela a tabela "pbx_abandonadas_status" será populada com detalhes sobre os agentes
* logados na fila e conterá as seguinte informações:
* 1 - uniqueid: Identificador da chamada usada para relacionamento com a tabela
* "pbx_abandonadas_semretorno"
* 2 - matricula: Identificação do agente no sistema.
* 3 - id_evt_agt: Id único da tabela.
* 4 - status: Status do agente no momento do abandono.
* 5 - motivo_pausa: Se o agente estiver em pausa qual o motivo informado.
* 6 - ramal: O número do ramal que o agente usou no atendimento.
* 7 - disponivel: Indica se o agente estava com a opção disponível para fila marcada.
* 8 - classificado: Indica que o agente não está apto a receber chamadas, por não ter
* classificado seu último atendimento.
*
* Quando uma chamada é retornada pelo processo automático ou manual por um agente loga-
* do na fila correspondente ou ainda pelo atendimento posterior realizado para o mesmo
* número a tabela "pbx_abandonadas_semretorno" é atualizada para indicar que a chamada já
* foi retornada com os seguintes dados:
* 1 - abdsr_data_hora_retorno: Indica a data e hora do retorno.
* 2 - abdsr_data_retorno: Data d retorno.
* 3 - abdsr_ramal: Ramal do agente que realizou o atendimento.
* 4 - abdsr_agente: Matricula do agente que realizou o atendimento.
* 5 - abdsr_uniqueid_ret: Identificador da chamada que retornou.
*
* Quando ocorre um retorno consideramos a última chamada do número abandonado, entretanto
* caso haja outras chamadas do mesmo número abandonadas anteriormente estas também são
* marcadas como retornadas atualizando a tabela "pbx_abandonadas_semretorno" da seguinte
* maneira:
* 1 - abdsr_data_hora_retorno: Data e hora em que foi realizado o retorno.
* 2 - abdsr_data_retorno: Data do retorno.
* 3 - abdsr_ramal: Contém a descrição 'RET' indica um retorno indireto.
* 4 - abdsr_agente: Matrícula do agente que realizou o atendimento.
* 5 - abdsr_uniqueid_ret: Identificador da chamada que realizou o retorno.
* 6 - abdsr_log: Identificador da ultima chamada abandonada que serviu de referência
* para o retorno.
* Para a atualização das camadas anteriores são considerados dois parâmetros:
* 1 - abdsr_numero: Número do telefone que realizou o abandono.
* 2 - abdsr_data_hora_retorno: Indica que não houve retorno para a chamada então
* consideramos todas as chamadas do mesmo número em que o valor deste campo é null;
* ***************************************************************************************
* Copyright (c) 2018, Simples IP
* *************************************************************************************** */
error_reporting(E_ERROR);
ini_set('display_errors', 0);
include 'util/util.php';
include 'funcoes/shared.php';
include("util/funcoesAgi.php");
require '/var/lib/asterisk/scripts/integracao/serverFunctions.php';
/*
include 'util/util.php';
include '/var/lib/asterisk/scripts/integracao/constServerIntegra.php';
include '/var/lib/asterisk/scripts/integracao/localDataBase.php';
include 'funcoes/shared.php';
include("util/funcoesAgi.php");
*/
$debug = 1;
/*
* Caminho para o arquivo de log do script.
*/
$pathLog = sprintf('/var/log/asterisk/abd_agi-%s.log', date("Y-m-d"));
/*
* Captura variaveis do asterisk.
*/
$agi = GetAgi();
$arg1 = isset($argv[1]) ? trim($argv[1]) : '';
$arg2 = isset($argv[2]) ? trim($argv[2]) : '';
$arg3 = isset($argv[3]) ? trim($argv[3]) : '';
$arg4 = isset($argv[4]) ? trim($argv[4]) : '';
/*
* Nome do script em ececucao.
*/
$scrpt = trim($argv[0]);
/*
* Identificador gerado para chamda corrente na central.
*/
$uid = $arg1;
/*
* Identifica a fila de entrada para qual a chamada foi encaminhada.
*/
$dac = $arg2;
/*
* Configuração do banco de dados. Deixe a variável $str para pegar o valor padrao
*/
$str = '';
if (!$str) {
$str = GetDefStrDb();
}
$direcao = $agi->get_variable('CDR(direcao)', true);
$evento = $agi->get_variable('EVENTO', true);
$atendidaFila = trim($agi->get_variable('ATENDIDA_FILA', true));
/* * *************************************************************************
* ************* INICIO TRATAMENTO ABANDONADAS NA FILA **********************
* *********************************************************************** */
try {
$inTran = false;
/*
* Realiza a conexao ao banco de daodos.
*/
if (!$conAbd = pg_connect($str)) {
RaiseExcept("Erro ao conecatar ao banco de dados.[{$str}]", true);
}
/*
* Retira possiveis inconssitencias do numero
*/
$numero = NormalizaNumero($arg3);
MonitoraAbdAgi($conAbd, $uid, $dac, $arg3, $arg4, $direcao, $evento, $atendidaFila);
GravaLogGlobal('Inicio');
/**
* CAPTURA CODIGOS DE PARAMETROS DE CHAMADA.
*/
$codigoparam = trim($agi->get_variable('CODIGOPARAM', true));
if ($codigoparam) {
atualizaCliente($conAbd, $uid, $codigoparam);
}
/*
* Verifica se a ligacao foi recebida na fila.
*/
if ($dac && $numero) {
/*
* Inicia uma transacao no banco de dados.
*/
if (!pg_query($conAbd, 'begin')) {
RaiseExcept("Erro ao Iniciar gravação das abandonadas sem retorno.", true);
}
$inTran = true;
/*
* RAMAL ABANDONO DA CHAMADA - CHAMADA RAMAL
*/
$ramal = $agi->get_variable('CDR(ramal_origem)', true);
/*
* Matricula do agente logado.
*/
$matricula = ValidaMatricula($conAbd, $arg4);
/*
* Verifica se a chamada é sainte ou entrante.
*/
$direcao = trim($agi->get_variable('CDR(direcao)', true));
/*
* Eventos da fila na chamada de saida.
*/
$evento = trim($agi->get_variable('EVENTO', true));
/*
* Entrante na fila atendica.
*/
$atendidaFila = strtoupper(trim($agi->get_variable('ATENDIDA_FILA', true)));
/*
* Verifica se a chamada foi atendida.
*/
if ($direcao == 'S') {
$chamadaAtendida = ($evento == 'COMPLETAAGENT') || ($evento == 'COMPLETACALLER') || ($evento == 'COMPLETACALLERRAMAL') || ($evento == 'COMPLETEAGENT') || ($evento == 'COMPLETEAGENTRAMAL') || ($evento == 'COMPLETECALLER') || ($evento == 'COMPLETECALLERRAMAL') || ($evento == 'ATENDIDA');
} else {
$chamadaAtendida = ($atendidaFila == 'SIM') || ($evento == 'COMPLETEAGENT') || ($evento == 'COMPLETECALLER') || ($evento == 'COMPLETAAGENT') || ($evento == 'COMPLETACALLER');
}
/*
* Marca o inicio da execucao do script.
* GravaLog(sprintf(": %s\n", $ ,date('Y-m-d H:i:s')), $pathLog);
*/
GravaLogGlobal('Inicio Registra Abandon');
//if ((!$chamadaAtendida) && (($direcao == 'I') || ($direcao == 'E'))) {
if ((!$chamadaAtendida) && ($direcao == 'E')) {
/*
* Inicio do tratamento para chamadas abandonadas.
* Recuperando informacoes da fila.
*/
$query = "select sum(1) as logado,
SUM(case when( a.status in('OCUPADO', 'CHAMANDO'))then 1 else 0 end) as ocupado,
SUM(case when( a.status = 'LIVRE')then 1 else 0 end) as livre,
SUM(case when( a.status = 'PAUSA')then 1 else 0 end) as pausa,
SUM(case when( a.disponivel_atendimento = 0)then 1 else 0 end) as indisponivel,
SUM(case when( b.exige_classificacao = 0)then 0 else case when(a.chamada_classificado = 1)then 0 else 1 end end) as nao_classificado
from pbx_supervisor_agentes a, pbx_queues_grupos b
where b.nome = a.dac
and a.dac = '$dac'";
$result = pg_query($conAbd, $query);
if (!$result) {
RaiseExcept("Erro ao obter informacoes sobre a fila.", true);
}
$infoFila = pg_fetch_array($result, null, PGSQL_ASSOC);
GravaLogGlobal('Informacoes da Fila');
/*
* Inserindo informacoes sobre a chamada e a fila no momento do abandono.
*/
if ($numero) {
$query = "insert into pbx_abandonadas_semretorno(abdsr_uniqueid,abdsr_fila,abdsr_numero,abdsr_agt_logado,abdsr_agt_pausa,abdsr_agt_ocupado,abdsr_agt_indisponivel,abdsr_agt_nao_classificado)"
. "values(%s,%s,%s,%s,%s,%s,%s,%s)";
$query = sprintf($query, QuotedStr($uid), QuotedStr($dac), QuotedStr($numero), QuotedStr(($infoFila['logado'] ? $infoFila['logado'] : '0')), QuotedStr(($infoFila['pausa'] ? $infoFila['pausa'] : '0')), QuotedStr(($infoFila['ocupado'] ? $infoFila['ocupado'] : '0')), QuotedStr(($infoFila['indisponivel'] ? $infoFila['indisponivel'] : '0')), QuotedStr(($infoFila['nao_classificado']) ? $infoFila['nao_classificado'] : '0'));
$result = pg_query($conAbd, $query);
if (!$result) {
RaiseExcept("Erro ao gravar informacoes sobre a chamada.", true);
}
GravaLogGlobal('Insere Abandonadas');
} else {
GravaLog(sprintf("[ PROCESS ]\n", 'Nao foi possivel encontrar o numero passado pela central', date('Y-m-d H:i:s')), $pathLog);
}
/*
* Obtendo informacoes sobre os agentes no momento do abandono.
* a.chamada_classificad = 2 -> Indica o status inicial quando a classificação é obgrigatória
* tendo portato o mesmo efeito que 1 que é classificado.
*/
$query = "select a.matricula,
a.ramal,
case when( a.status in('OCUPADO', 'CHAMANDO'))then 'OCUPADO' else a.status end as status,
case when( b.exige_classificacao = 0)then -1 else a.chamada_classificado end as chamada_classificado,
a.disponivel_atendimento, c.id as id_evt_agente, c.login, c.logoff, case when( a.status = 'PAUSA')then a.motivo_pausa else '-' end as motivo_pausa
from pbx_supervisor_agentes a, pbx_queues_grupos b, pbx_eventos_agentes c
where b.nome = a.dac
and c.id_dac = b.id
and c.matricula = a.matricula
and c.login = (select max(login) from pbx_eventos_agentes where matricula = a.matricula)
and a.dac = '$dac' order by a.matricula;";
$result = pg_query($conAbd, $query);
if (!$result) {
RaiseExcept("Erro ao obter informacoes sobre os agentes.", true);
}
GravaLogGlobal('Informacoes Agentes');
/* /var/lib/asterisk/scripts/integracao/abdAgi.php,1531320618.20,FINANCEIRO,4002,
* Inserindo informacoes sobre os agentes no momento da chamada.
*/
if (pg_num_rows($result)) {
while ($infoAgente = pg_fetch_array($result, null, PGSQL_ASSOC)) {
$query = "insert into pbx_abandonadas_status(uniqueid, fila, matricula,id_evt_agt,status, motivo_pausa,ramal,disponivel,classificado)"
. "values(%s,%s,%s,%s,%s,%s,%s,%s,%s)";
$query = sprintf($query, QuotedStr($uid), QuotedStr($dac), QuotedStr($infoAgente['matricula']), QuotedStr($infoAgente['id_evt_agente']), QuotedStr($infoAgente['status']), QuotedStr($infoAgente['motivo_pausa']), QuotedStr($infoAgente['ramal']), QuotedStr($infoAgente['disponivel_atendimento']), QuotedStr($infoAgente['chamada_classificado'])
);
if (!pg_query($conAbd, $query)) {
RaiseExcept("Erro ao gravar informacoes sobre os agentes no momento da chamada.", true);
}
GravaLogGlobal('Informacoes Agentes Logados');
}
} else {
/* Sem agente logado na fila */
$query = "insert into pbx_abandonadas_status(uniqueid,fila, matricula,id_evt_agt,status, motivo_pausa,ramal,disponivel,classificado)values(%s,%s,%s,'0','0','0','0','0','0')";
$query = sprintf($query, QuotedStr($uid), QuotedStr($dac), QuotedStr($infoAgente['matricula']));
if (!pg_query($conAbd, $query)) {
RaiseExcept("Erro ao gravar informacoes sobre os agentes no momento da chamada.", true);
}
GravaLogGlobal('Sem agente');
}
} else if ($chamadaAtendida) {
/*
* Verifica se ja existe uma abandono para o numero.
*/
$diasAbandon = GetDiasAbandonada($conAbd);
$query = "SELECT abdsr_uniqueid, abdsr_fila
FROM pbx_abandonadas_semretorno
WHERE abdsr_data_hora_retorno IS NULL
AND abdsr_numero = '$numero'
AND abdsr_data >= (now()::date - $diasAbandon)
AND abdsr_data_hora_inicio =
(SELECT max(abdsr_data_hora_inicio)
FROM pbx_abandonadas_semretorno
WHERE abdsr_data >= (now()::date - $diasAbandon)
and abdsr_fila = '$dac'
AND abdsr_numero = '$numero'
AND abdsr_data_hora_retorno IS NULL)";
$res = pg_query($conAbd, $query);
GravaLogGlobal('Informacoes de retorno');
if (!$res) {
RaiseExcept("Erro ao consultar informacoes sobre a chamada abandonada", true);
}
/*
* Se o numero tiver registro de chamda sem retorno atualiza as informacoes.
*/
if (pg_num_rows($res)) {
$infoChamada = pg_fetch_array($res, null, PGSQL_ASSOC);
$uidAbandon = $infoChamada['abdsr_uniqueid'];
$filaAbandon = $infoChamada['abdsr_fila'];
$agenteMatricula = $matricula;
$query = "update pbx_abandonadas_semretorno
set abdsr_data_hora_retorno = now(),
abdsr_data_retorno = now()::date,
abdsr_ramal = '$ramal',
abdsr_agente = '$agenteMatricula',
abdsr_uniqueid_ret = '$uid'
where abdsr_uniqueid = '$uidAbandon' and abdsr_fila = '{$filaAbandon}'";
$result = pg_query($conAbd, $query);
if (!$result) {
RaiseExcept("Erro ao atualizar informacoes sobre a chamada abandonada", true);
}
GravaLogGlobal('Atualiza retorno');
/*
* Atualiza chamdas anteriores para o mesmo numero marcando como retornada
*/
$query = "update pbx_abandonadas_semretorno
set abdsr_data_hora_retorno = now(),
abdsr_data_retorno = now()::date,
abdsr_ramal = 'RET',
abdsr_agente = '$agenteMatricula',
abdsr_uniqueid_ret = '$uid',
abdsr_log = '$uidAbandon'
where abdsr_numero = '$numero'
and abdsr_data_hora_retorno is null
and abdsr_fila = '{$filaAbandon}'";
$result = pg_query($conAbd, $query);
if (!$result) {
RaiseExcept("Erro ao atualizar informacoes sobre a chamada abandonada anteriores a atual", true);
}
GravaLogGlobal('Atauliza status retorno');
}
}
if (!pg_query($conAbd, 'commit')) {
RaiseExcept("Erro ao finalizar gravação das abandonadas sem retorno.", true);
}
}
} catch (Exception $ex) {
if ($inTran) {
pg_query($conAbd, 'rollback');
}
/*
* Grava erros gerados durante a execucao.
*/
GravaLog(sprintf("Erro:%s File: %s Line: %s \ncmd: %s\n %s\n", $ex->getMessage(), $ex->getFile(), $ex->getLine(), $query, date('Y-m-d H:i:s')), $pathLog);
GravaLogGlobal('Capltura erro');
}
/* * *************************************************************************
* *************** FIM TRATAMENTO ABANDONADAS NA FILA ***********************
* ************************************************************************* */
/*
* Marca o fim da execucao do script.
*/
GravaLogGlobal('Fim Execucao');
pg_close($conAbd);
/*
* Realiza a conexao ao banco de daodos.
*/
$conn = pg_connect($str);
$inTran = false;
/*
* Cria um controle para retorno de chamadas abandonadas,
* as chamadas vão sendo inseridas na tabela e removidas
* conformem forem sendo retornadas pelos agentes da fila
* aonde foram abandonadas.
-- Table: pbx_abandonadas_semretorno
-- DROP TABLE pbx_abandonadas_semretorno;
CREATE TABLE pbx_abandonadas_semretorno
(
abdsr_uniqueid character varying(32) not null primary key,
abdsr_data date NOT NULL default now()::date,
abdsr_fila character varying(64),
abdsr_numero character varying(32) NOT NULL,
abdsr_data_hora_inicio timestamp without time zone NOT NULL default now(),
abdsr_data_hora_retorno timestamp without time zone,
abdsr_data_retorno date,
abdsr_ramal character varying(32),
abdsr_agente character varying(32),
abdsr_agt_logado int,
abdsr_agt_pausa int,
abdsr_agt_ocupado int,
abdsr_agt_indisponivel int,
abdsr_agt_nao_classificado int,
abdsr_uniqueid_ret character varying(32)
);
-- Index: "idxPbxAbdsrDataNumero"
-- DROP INDEX "idxPbxAbdsrDataNumero";
CREATE INDEX "idxPbxAbdsrDataNumero"
ON pbx_abandonadas_semretorno
USING btree
(abdsr_data, abdsr_fila, abdsr_numero);
CREATE INDEX "idxPbxAbdsrUid"
ON pbx_abandonadas_semretorno
USING btree
(abdsr_uniqueid);
-- DROP TABLE pbx_abandonadas_status;
CREATE TABLE pbx_abandonadas_status
(
uniqueid character varying(32) not null,
matricula character varying(16) not null,
id_evt_agt int,
status varchar(32),
ramal varchar(32),
disponivel int,
classificado int,
constraint "pkPbxAbandonadasStatus" primary key(uniqueid, matricula)
);
*
*/
/*
* Função Chamada Ramal da API.
*/
include_once '/var/lib/asterisk/scripts/integracao/constServerIntegra.php';
include_once '/var/lib/asterisk/scripts/integracao/localDataBase.php';
$scrpt = $argv[0];
$UNIQUEID = $arg1;
$userfield = $agi->get_variable('MONITOR_FILENAME', true);
$userfield = trim($userfield) ? $userfield : 'AUDIO.WAV';
$path = '/var/log/asterisk/encerra_chamada_satelitenorte.log';
$query = sprintf("select a.chdr_id from pbx_chamada_ramal a where a.uniqueid = '%s' and a.chdr_fim is null", $UNIQUEID);
$result = pg_query($conn, $query);
if (pg_num_rows($result)) {
GravaLog($query . "\n AUDIO: " . $userfield . "\n", $path);
$dados = pg_fetch_array($result, null, PGSQL_ASSOC);
$chdr_id = $dados['chdr_id'];
$audio = str_ireplace('.WAV', '.MP3', $userfield);
$token = '026d3a4b331078aa09d096d11e495215';
$parametros = array('method' => 'terminachamada', 'audio' => $audio, 'id_chamada' => $UNIQUEID, 'token' => $token, 'login' => 'admin', 'senha' => 'SiP1029384756', 'tipoRetorno' => 'JSON');
//$parametros = array('audio' => $audio, 'id_chamada' => $UNIQUEID, 'token' => $token);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://satelitenorte.xpro.me/gestaodeleads/terminachamada");
//curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1/aplicativo/integracao/index.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parametros);
$content = trim(curl_exec($ch));
curl_close($ch);
$retorno = json_decode($content, true);
$log = sprintf("Status: %s Msg: %s", $retorno["status"], $retorno["mensagem"]);
$query = sprintf("update pbx_chamada_ramal set chdr_fim = now(), chdr_log = %s where chdr_id = '%s'", QuotedStr($log), $chdr_id);
GravaLog($query . "\n", $path);
$result = pg_query($conn, $query);
if (!$result) {
GravaLog($query . "\n", $path);
}
}
$integra = $agi->get_variable('INTEGRA-SAIDA', true);
if ($integra == 'SAIDA') {
$intMetodo = $agi->get_variable('INTEGRA-METODO', true);
$intUniqueid = $agi->get_variable('UNIQUEID', true);
$intTelefone = $agi->get_variable('INTEGRA-FONE', true);
$intFone = str_replace('@', '|', $intTelefone);
$intRegIni = $agi->get_variable('INTEGRA-REGINI', true);
$intRegFim = $agi->get_variable('INTEGRA-REGFIM', true);
$intRetCliente = $agi->get_variable('INTEGRA-RETCLI', true);
$intRetCli = str_replace('@', '|', $intRetCliente);
$intRamal = $agi->get_variable('INTEGRA-RAMAL', true);
$intUra = $agi->get_variable('INTEGRA-URA', true);
$sql = "INSERT INTO pbx_integracao_reg("
. "reg_id_metodo,"
. "reg_uniqueid,"
. "reg_uniqueid_old,"
. "reg_fone,"
. "reg_retorno,"
. "reg_inicio,"
. "reg_fim,"
. "reg_msg,"
. "reg_status_exec,"
. "reg_status,"
. "retorno_cliente,"
. "reg_ramal,"
. "reg_ura) "
. "VALUES($intMetodo,'$intUniqueid','$intUniqueid','$intFone','$intFone','$intRegIni','$intRegFim','INTEGRACAO-ATIVO-SAIDA',"
. "1,0,'$intRetCli','$intRamal','$intUra');";
@pg_query($conn, $sql);
$pgError = pg_last_error();
if ($pgError) {
GravaLog($sql, '/var/log/asterisk/integracao_ativa_sainte.log');
GravaLog($pgError, '/var/log/asterisk/integracao_ativa_sainte.log');
}
}
$ligueme = $agi->get_variable('LIGUE-ME', true);
if ($ligueme) {
$ligueUniq = $agi->get_variable('UNIQUEID', true);
$sipid = GetSIPIDCall();
$sqligueme = sprintf("UPDATE pbx_ligueme_gratis SET uid_contato = %s WHERE sipid_contato = '%s'", $ligueUniq, GetSIPIDCall());
$sqligueme .= $sipid ? "sipid_contato = '$sipid'" : "telefone_contato = '$ligueme'";
@pg_query($conn, $sqligueme);
}
############################################################################
#### INTEGRACAO ENCERRAMENTO DO ABDAGI ####
############################################################################
/*
* Verifica se o tipo de execução é custom, se for desvia a execução
* para um script customizado para integração, capturando antes os
* parametros de entrada. O programas ou scripts ficam localizados
* no diretorio /var/lib/asterisk/scripts/integracao/custom.
*/
if ($agi->get_variable('MEMBERINTERFACE', true) || $evento == 'ABANDON') {
$query = "SELECT itgm_id FROM pbx_integracao_reg a, pbx_integracao_metodo b WHERE b.itgm_id_pai = a.reg_id_metodo AND b.evento = 2 AND a.reg_uniqueid = '{$arg1}'";
$result = pg_query($query);
$idMetodo = pg_fetch_assoc($result)['itgm_id'];
$pathIntegra = "/var/lib/asterisk/scripts/integracao/custom/";
if ($idMetodo && ExecuteCustom($idMetodo, $nomeMetodo)) {
__logStr("ExecuteCustom", $nomeMetodo, 'serverAgi', true);
/** Movidesk * */
if (file_exists($pathIntegra . "Movidesk.php") && $evento == 'ABANDON') {
include $pathIntegra . "abandonadaChamada.php";
} else {
include($nomeMetodo);
}
exit;
}
}
function GetVarFila() {
$varFila = array('QUEUESTATUS', 'QUEUESRVLEVELPERF', 'QUEUESRVLEVEL', 'QUEUEABANDONED', 'QUEUECOMPLETED', 'QUEUETALKTIME', 'QUEUEHOLDTIME', 'QUEUECALLS', 'QUEUESTRATEGY', 'QUEUEMAX', 'QUEUENAME', 'QEORIGINALPOS', 'QEHOLDTIME', 'MEMBERREALTIME', 'MEMBERDYNAMIC', 'MEMBERPENALTY', 'MEMBERLASTCALL', 'MEMBERCALLS', 'MEMBERNAME', 'MEMBERINTERFACE');
$vars = array();
foreach ($varFila as $varName) {
$vars[$varName] = AgiGetVariable($varName);
}
return $vars;
}
function AcrescentaDDD($str) {
$numero = ltrim($str, '0');
$tam = strlen($numero);
if (($tam == 8) || (($tam == 9) && (substr($numero, 0, 1) == '9'))) {
return GetDddPadrao($numero);
}
return $numero;
}
function ValidaMatricula($conn, $matricula) {
$query = "select matricula from pbx_usuarios where matricula = '$matricula'";
$result = pg_query($conn, $query);
return pg_num_rows($result) ? $matricula : '';
}
function MonitoraAbdAgi($conn, $uid, $dac, $numero, $matricula, $direcao, $evento, $atendidaFila) {
$pathLog = '/var/log/asterisk/monitora_abdagi.log';
try {
$query = sprintf("insert into pbx_monitora_abdagi(uid,dac,numero,matricula,direcao,evento,atendidaFila )values(%s,%s,%s,%s,%s,%s,%s)", QuotedStr($uid), QuotedStr($dac), QuotedStr($numero), QuotedStr($matricula), QuotedStr($direcao), QuotedStr($evento), QuotedStr($atendidaFila));
if (!pg_query($query)) {
GeraExcept($query);
}
if ($dac && ($atendidaFila != 'SIM')) {
$query = sprintf("select matricula, ramal, status, motivo_pausa, disponivel_atendimento, chamada_classificado, status_discador from pbx_supervisor_agentes where dac = %s", QuotedStr($dac));
if (!$result = pg_query($conn, $query)) {
GeraExcept('consulta agt');
}
if (!pg_num_rows($result)) {
$query = sprintf("insert into pbx_monitora_abdagi(uid,dac,numero,matricula,direcao,evento,atendidaFila, ramal, motivo_pausa, disponivel_atendimento, chamada_classificado, status_discador, uid_pai )values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", QuotedStr('agt'), QuotedStr($dac), QuotedStr($numero), QuotedStr($matricula), QuotedStr($direcao), QuotedStr($evento), QuotedStr($atendidaFila), QuotedStr($ramal), QuotedStr('0'), QuotedStr('0'), QuotedStr('0'), QuotedStr('0'), QuotedStr($uid));
if (!pg_query($conn, $query)) {
GeraExcept($query);
}
} else {
while ($dados = pg_fetch_array($result, null, PGSQL_ASSOC)) {
$ramal = $dados['ramal'];
$motivo_pausa = $dados['motivo_pausa'];
$disponivel_atendimento = $dados['disponivel_atendimento'];
$chamada_classificado = $dados['chamada_classificado'];
$status_discador = $dados['status_discador'];
$query = sprintf("insert into pbx_monitora_abdagi(uid,dac,numero,matricula,direcao,evento,atendidaFila, ramal, motivo_pausa, disponivel_atendimento, chamada_classificado, status_discador, uid_pai )values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", QuotedStr('agt'), QuotedStr($dac), QuotedStr($numero), QuotedStr($matricula), QuotedStr($direcao), QuotedStr($evento), QuotedStr($atendidaFila), QuotedStr($ramal), QuotedStr($motivo_pausa), QuotedStr($disponivel_atendimento), QuotedStr($chamada_classificado), QuotedStr($status_discador), QuotedStr($uid));
if (!pg_query($conn, $query)) {
GeraExcept($query);
}
}
}
}
} catch (Exception $ex) {
$log = sprintf("%s@@%s@@%s", date("Y-m-d H:i:s"), $ex->getMessage(), serialize(array($uid, $dac, $numero, $matricula, $direcao, $evento, $atendidaFila)));
WriteLog($log, $pathLog);
}
}
function NormalizaNumero($numeroOrig) {
$numero = ltrim($numeroOrig, "0, 00, 55");
$tam = strlen($numero);
return (($tam == 8) || ($tam == 9)) ? GetDddPadrao($numero) : $numero;
}
function atualizaCliente($conn, $uniqueid, $id) {
$query = "SELECT client_id FROM pbx_cliente WHERE client_id = {$id};";
$r = pg_query($conn, $query);
$rs = pg_fetch_assoc($r);
if ($rs) {
$query = "UPDATE pbx_cliente SET client_data_contato = now(), client_ref_id = {$uniqueid} WHERE client_id = {$id}; ";
$query .= " INSERT INTO pbx_cliente_audio (client_id, uid) VALUES('{$id}', '{$uniqueid}');";
pg_query($conn, $query);
}
}
?>