forked from SimplesIP/pabx-app
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.
552 lines
25 KiB
552 lines
25 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.log'); |
|
|
|
/* |
|
* 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); |
|
|
|
/** |
|
* 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); |
|
*/ |
|
|
|
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); |
|
/* |
|
* 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); |
|
} |
|
} 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); |
|
} |
|
|
|
/* /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); |
|
} |
|
} |
|
} 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); |
|
} |
|
} |
|
} 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); |
|
|
|
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); |
|
} |
|
/* |
|
* 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); |
|
} |
|
} |
|
} |
|
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); |
|
} |
|
/* * ************************************************************************* |
|
* *************** FIM TRATAMENTO ABANDONADAS NA FILA *********************** |
|
* ************************************************************************* */ |
|
|
|
/* |
|
* Marca o fim da execucao do script. |
|
*/ |
|
pg_close($conAbd); |
|
|
|
|
|
/* |
|
* Realiza a conexao ao banco de daodos. |
|
*/ |
|
$conn = pg_connect($str); |
|
$inTran = false; |
|
|
|
|
|
/* |
|
* Função Chamada Ramal da API. |
|
*/ |
|
include_once '/var/lib/asterisk/scripts/integracao/constServerIntegra.php'; |
|
include_once '/var/lib/asterisk/scripts/integracao/localDataBase.php'; |
|
|
|
$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); |
|
} |
|
} |
|
?>
|
|
|