|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* *******************************************************************************************************************
|
|
|
|
|
* FUN<EFBFBD><EFBFBD>ES
|
|
|
|
|
* *******************************************************************************************************************
|
|
|
|
|
* - Evento($str) -> Analiza um linha retornada do Manager para ver se <EFBFBD> o inicio de um evento, ex.: Event: NewChannel.
|
|
|
|
|
* - LerBloco($lerBloco, $evento, $eventosAtivos) -> Verifica se o evento esta presente no array $eventosAtivos. L<EFBFBD> so-
|
|
|
|
|
* mente eventos presentes neste bloco.
|
|
|
|
|
* - Imprime($linha, $quebraLinha = false) -> Imprime um linha para saida padarao, usada para verificar a saida do mana-
|
|
|
|
|
* ger, tem um controle para linhas em branco imprimindo apenas uma no fim do bloco.
|
|
|
|
|
* - ImportaCampanha() -> Importa os dados da campanha/lista;agtentes para o discador iniciar sua tarefa.
|
|
|
|
|
* - ImPortaAgente($matricula) -> Importa um agente da pbx_supervisor_agentes e insere na base interna do discador na
|
|
|
|
|
* tabela correspondente.
|
|
|
|
|
* - LimpaMysql() -> Limpa quaisquer informa<EFBFBD><EFBFBD>es sobre a campanha que existam na base local, antes da importa<EFBFBD><EFBFBD>o.
|
|
|
|
|
* - InsereAgente($dadosAgt) -> Recebe um array com informa<EFBFBD><EFBFBD>es do Agente e insere na base interna do discados.
|
|
|
|
|
* - AddAgente($matricula) -> Esta fun<EFBFBD><EFBFBD>o adiciona ao array global "$agentesLogados" uma matricula para ser utilizadao
|
|
|
|
|
* como um meio r<EFBFBD>pido de consulta aos agentes logados.
|
|
|
|
|
* - RmAgente($matricula) -> Marca a matricula com removida no array gloval "$agentesLogados".
|
|
|
|
|
* - AgenteLogado($matricula) -> Retorna true se a matricula existir e for igual a "1" no array global "$agentesLogados".
|
|
|
|
|
* - RemoveAgente($matricula) -> Remove a matricula do array global "$agentesLogados" e da base interna do discador.
|
|
|
|
|
* - InformacoesDac() -> Esta fun<EFBFBD><EFBFBD>o preenche o array global "$dadosDac" com informa<EFBFBD><EFBFBD>es sobre o dac/Campanha obtidas do banco de
|
|
|
|
|
* dados da aplica<EFBFBD><EFBFBD>o a partir do "id" da campanha informado pela linha de comando na chamada do discador.
|
|
|
|
|
* - RegistraCampanha($id, $nome) -> Registra as informa<EFBFBD><EFBFBD>es sobre a campanha passadas na linha de comanado nas variaveis
|
|
|
|
|
* "$idCampanha" e "$nomeCampanha".
|
|
|
|
|
* - IdCampanha() - Retorna o valor da variavel global $idCampanha".
|
|
|
|
|
* - NomeCampanha() - Retorna o valor da variavel global $nomeCampanha".
|
|
|
|
|
* - AlimentaLog($str, $metodo = '', $label = '', $nivel = 2) - Armazenha informa<EFBFBD><EFBFBD>es no array global "$log" para ser utilizado
|
|
|
|
|
* posteriormente pela func<EFBFBD><EFBFBD>o LogDiscador();
|
|
|
|
|
* - LogDiscador() -> Grava Arquivo de log da aplica<EFBFBD><EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
error_reporting(E_ERROR);
|
|
|
|
|
ini_set('display_errors', 0);
|
|
|
|
|
ini_set("memory_limit", "512M");
|
|
|
|
|
ini_set("max_input_time", "-1");
|
|
|
|
|
set_time_limit(0);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Status das chamadas.
|
|
|
|
|
*/
|
|
|
|
|
define("CHAMADA_DISCADA", "CALL");
|
|
|
|
|
define("CHAMADA_ATENDIDA", "ANSWER");
|
|
|
|
|
define("CHAMADA_NAOATENDIDA", "NO_ANSWER");
|
|
|
|
|
define("CHAMADA_ATENDIDA_MAQUINA", "MACHINE");
|
|
|
|
|
define("CHAMADA_OCUPADA", "BUSY");
|
|
|
|
|
define("CHAMADA_INVALIDA", "INVALID");
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Status do contato.
|
|
|
|
|
*/
|
|
|
|
|
define("CONTATO_DISCADO", "1");
|
|
|
|
|
define("CONTATO_NAO_DISCADO", "0");
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Status campanha.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
define("CAMPANHA_INATIVA", "0");
|
|
|
|
|
define("CAMPANHA_ATIVA", "1");
|
|
|
|
|
define("CAMPANHA_CONCLUIDA", "2");
|
|
|
|
|
define("CAMPANHA_CANCELADA", "3");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
define("MAX_TENTATIVA_RETORNO", 50); //Retorno do socket;
|
|
|
|
|
define("TIMEOUT_CONEXAO_MONITOR", 5); //Segundos
|
|
|
|
|
define("TEMPO_TENTATIVA_CONEXAO_MONITOR", 200000); //Milhonesimo de segundos
|
|
|
|
|
|
|
|
|
|
include('util/util.php');
|
|
|
|
|
require("funcoes/shared.php");
|
|
|
|
|
require("util/funcoesAmi.php");
|
|
|
|
|
|
|
|
|
|
$nomeCampanha = '';
|
|
|
|
|
$idCampanha = 0;
|
|
|
|
|
$dadosDac = array(); // Aramazena informa<EFBFBD><EFBFBD>es sobre o dac associado a uma camapanha.
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Armazena lista de Agentes logados para consulta
|
|
|
|
|
*/
|
|
|
|
|
$agentesLogados = array();
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Canais discando, para acesso rapdo;
|
|
|
|
|
*/
|
|
|
|
|
$canaisDiscando = array();
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Configura o nivel de log para execu<EFBFBD><EFBFBD>o.
|
|
|
|
|
* 0 -> Registra erros.
|
|
|
|
|
* 1 -> Registras comandos do banco de dados.
|
|
|
|
|
* 2 -> Registra Todas as opera<EFBFBD><EFBFBD>es.
|
|
|
|
|
*/
|
|
|
|
|
$nivelLog = 2;
|
|
|
|
|
/*
|
|
|
|
|
* 1-> Ativa display do log para a saida padr<EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
$MostraLog = 1;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Imprime os comandos do manager para um arquivo
|
|
|
|
|
* quando o valor <EFBFBD> verdadeiro.
|
|
|
|
|
*/
|
|
|
|
|
$imprimeSaida = 1;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Saida padrao para o log e eventos do monitor.
|
|
|
|
|
*/
|
|
|
|
|
$saidaLogEventos = '/var/log/asterisk/monitor_power.log';
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Buffer de mensagens de log, ser<EFBFBD> utilizado pelas fun<EFBFBD><EFBFBD>es
|
|
|
|
|
* AlimentaLog() e LogDiscador().
|
|
|
|
|
*/
|
|
|
|
|
$log = array();
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Log da aplica<EFBFBD><EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
$pathLog = '/var/log/asterisk/discador.log';
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Data Atual.
|
|
|
|
|
*/
|
|
|
|
|
$dataAtual = date("Y-m-d H:i:s");
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Controle para impress<EFBFBD>o de linhas em branco.
|
|
|
|
|
*/
|
|
|
|
|
$linhaVazia = 0;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Eventos tratados pela aplica<EFBFBD><EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
$eventosAtivos = array('Newchannel', 'Rename', 'Join', 'Leave', 'Cdr', 'QueueMemberRemoved', 'Hangup', 'QueueMemberStatus', 'Agentcallbacklogin', 'QueueMemberPaused', 'QueueMemberAdded', 'Agentcallbacklogoff', 'Agentlogin', 'Link', 'Unlink', 'OriginateResponse');
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* parametros de conexao com o socket.
|
|
|
|
|
*/
|
|
|
|
|
list($sck_host, $sck_porta, $sck_usuario, $sck_senha) = GetSckConnect();
|
|
|
|
|
$sck_events = 1;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Se n<EFBFBD>o for definido uma conex<EFBFBD>o para o banco de dados aqui, o sistema ir<EFBFBD>
|
|
|
|
|
* usar a configura<EFBFBD><EFBFBD>o padr<EFBFBD>o baseada nas informa<EFBFBD><EFBFBD>es contidas no arquivo
|
|
|
|
|
* /var/lib/asterisk/scripts/callcenter/bd e retornadas pela fun<EFBFBD><EFBFBD>o GetDefStrDb()
|
|
|
|
|
* contida no arquivo funcoes/shared.php localizado no diretorio include.
|
|
|
|
|
*/
|
|
|
|
|
$conStr = false;
|
|
|
|
|
//$conStr = sprintf("host='%s' port='%s' dbname='%s' user='%s' password='%s'", '127.0.0.1', '5432', 'pbx', 'contacte', 'ctepgSQL');
|
|
|
|
|
$conStr = GetDefStrDb();
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Parametros para conexao com o mysql.
|
|
|
|
|
*/
|
|
|
|
|
$hostMy = "127.0.0.1";
|
|
|
|
|
$userMy = "root";
|
|
|
|
|
$senhaMy = "";
|
|
|
|
|
$baseMy = "pbx";
|
|
|
|
|
|
|
|
|
|
function Evento($str) {
|
|
|
|
|
if (stripos($str, 'Event') !== false) {
|
|
|
|
|
$evt = explode(":", $str);
|
|
|
|
|
return trim($evt[1]);
|
|
|
|
|
}
|
|
|
|
|
if (trim($str) == "")
|
|
|
|
|
return 'fim_bloco';
|
|
|
|
|
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
|
|
|
|
function LerBloco($lerBloco, $evento, $eventosAtivos)
|
|
|
|
|
{
|
|
|
|
|
if($evento == "fim_bloco"){ return false; }
|
|
|
|
|
if($lerBloco) return true;
|
|
|
|
|
return array_search($evento, $eventosAtivos) !== false;
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function GeraBloco($str) {
|
|
|
|
|
return trim($str) != "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function LerBloco($bloco) {
|
|
|
|
|
global $eventosAtivos;
|
|
|
|
|
$evento = $bloco['Event'];
|
|
|
|
|
$acId = $bloco['ActionID'];
|
|
|
|
|
return (array_search($evento, $eventosAtivos) !== false) || (LerActionId($acId));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function LerActionId($acId) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Imprime($linha, $quebraLinha = false, $file = null) {
|
|
|
|
|
global $linhaVazia;
|
|
|
|
|
$linhaLimpa = trim($linha);
|
|
|
|
|
if (!$linhaVazia && !$linhaLimpa) {
|
|
|
|
|
echo "\n";
|
|
|
|
|
$linhaVazia = 1;
|
|
|
|
|
if ($file)
|
|
|
|
|
fwrite($file, $linha);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if ($quebraLinha)
|
|
|
|
|
return;
|
|
|
|
|
echo $linha;
|
|
|
|
|
if ($file)
|
|
|
|
|
fwrite($file, $linha);
|
|
|
|
|
$linhaVazia = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ImportaCampanha() {
|
|
|
|
|
$idCampanha = IdCampanha();
|
|
|
|
|
LimpaMysql();
|
|
|
|
|
// create table pbx_campanha(cmp_id int not null primary key, cmp_descricao varchar(120), id_dac int, cmp_aguarda_agente int, cmp_numero_ligacoes_agente int, cmp_ramal varchar(100)) ENGINE=MEMORY;
|
|
|
|
|
//create table pbx_lista(id bigint not null auto_increment primary key, cmp_id int not null, list_id int not null, cont_id int not null, conf_id int not null, cont_identificador varchar(200), cont_discado int, cont_peso int, conf_fone varchar(30), conf_status varchar(50), agente int, conf_uid varchar(32), conf_protocolo varchar(32), conf_agente_matricula varchar(10)) ENGINE=MEMORY;
|
|
|
|
|
//create table pbx_supervisor_agentes( id bigint not null auto_increment primary key, dac varchar(50), matricula varchar(4), ramal varchar(50), nome varchar(50), origem_destino varchar(50), status varchar(50), duracao datetime, canal varchar(50), canal_agente varchar(50), canal_transfer varchar(50), uniqueid varchar(32) ) ENGINE=MEMORY;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Obtem informa<EFBFBD><EFBFBD>es sobre campanha/dac.
|
|
|
|
|
*/
|
|
|
|
|
$source = InformacoesDac();
|
|
|
|
|
$idDac = $source['id_dac'];
|
|
|
|
|
$nomeDac = $source['nome_dac'];
|
|
|
|
|
$statusCampanha = 1; //ativa
|
|
|
|
|
$pid = 0;
|
|
|
|
|
/*
|
|
|
|
|
* Importa a campanha
|
|
|
|
|
*/
|
|
|
|
|
$queryMy = "insert into pbx_campanha(cmp_id, cmp_descricao, id_dac, cmp_aguarda_agente, cmp_numero_ligacoes_agente, cmp_ramal, cmp_status, cmp_pid, nome_dac, numero_dac) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)";
|
|
|
|
|
$queryMy = sprintf($queryMy, QuotedStr($source['cmp_id']), QuotedStr($source['cmp_descricao']), QuotedStr($source['id_dac']), QuotedStr($source['cmp_aguarda_agente']), QuotedStr($source['cmp_numero_ligacoes_agente']), QuotedStr($source['cmp_ramal']), $statusCampanha, $pid, QuotedStr($source['nome_dac']), QuotedStr($source['numero_dac']));
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryMy, "ImportaCampanha", 'Nova Campanha', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
if (!$resultMy)
|
|
|
|
|
throw new Exception("Erro ao importar dados da campanha para o servidor destino!");
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Importa Lista
|
|
|
|
|
*/
|
|
|
|
|
$queryPg = "select a.cmp_id, a.cmp_descricao, a.cmp_aguarda_agente, a.cmp_numero_ligacoes_agente, a.cmp_ramal, a.id_dac,
|
|
|
|
|
b.list_id, b.list_nome,
|
|
|
|
|
c.cont_id, c.cont_identificador, c.cont_discado, c.cont_peso, c.cont_param1, c.cont_param2, c.cont_param3, c.cont_param4, c.cont_param5,
|
|
|
|
|
d.conf_id, d.conf_fone, d.conf_status, d.agente, d.conf_uid, d.conf_protocolo
|
|
|
|
|
from pbx_campanha a, pbx_campanha_lista b, pbx_campanha_contato c,
|
|
|
|
|
pbx_campanha_contato_fone d
|
|
|
|
|
where b.cmp_id = a.cmp_id
|
|
|
|
|
and c.list_id = b.list_id
|
|
|
|
|
and d.cont_id = c.cont_id
|
|
|
|
|
and b.list_status = 1
|
|
|
|
|
and c.cont_discado = 0
|
|
|
|
|
and d.conf_status = '0'
|
|
|
|
|
and a.cmp_id = '$idCampanha'
|
|
|
|
|
and b.list_status = '1' ";
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryPg, "ImportaCampanha", 'Importa a Lista', 1);
|
|
|
|
|
$result = pg_query($queryPg);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel importar a campanha. Erro ao conectar ao servidor de origem.");
|
|
|
|
|
if (!pg_numrows($result))
|
|
|
|
|
throw new Exception("N<EFBFBD>o existem lista de dados dispon<EFBFBD>veis na campanha informada!");
|
|
|
|
|
|
|
|
|
|
$fields = array('cmp_id', 'list_id', 'cont_id', 'conf_id', 'cont_identificador', 'cont_discado', 'cont_peso', 'conf_fone', 'conf_status');
|
|
|
|
|
while ($source = pg_fetch_array($result)) {
|
|
|
|
|
$queryMy = "insert into pbx_lista(cmp_id,list_id,cont_id,conf_id,cont_identificador,cont_discado,cont_peso,conf_fone,conf_status)values({cmp_id},{list_id},{cont_id},{conf_id},{cont_identificador},{cont_discado},{cont_peso},{conf_fone},{conf_status})";
|
|
|
|
|
foreach ($fields as $field) {
|
|
|
|
|
$queryMy = str_replace('{' . $field . '}', QuotedStr($source[$field]), $queryMy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryMy, "ImportaCampanha", 'Insere Lista', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
if (!$resultMy) {
|
|
|
|
|
throw new Exception("Erro ao importar dados da lista para o servidor destino!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Importa a tabela de agentes
|
|
|
|
|
*/
|
|
|
|
|
$queryPg = "select dac,matricula,ramal,nome,origem_destino,status,duracao,canal,canal_agente,canal_transfer,uniqueid from pbx_supervisor_agentes where dac = '$nomeDac'";
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryPg, "ImportaCampanha", 'Importa Agentes', 1);
|
|
|
|
|
$result = pg_query($queryPg);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel informa<EFBFBD><EFBFBD>es dos agentes. Erro ao conectar ao servidor de origem.");
|
|
|
|
|
|
|
|
|
|
$fields = array('dac', 'matricula', 'ramal', 'nome', 'origem_destino', 'status', 'duracao', 'canal', 'canal_agente', 'canal_transfer', 'uniqueid');
|
|
|
|
|
while ($source = pg_fetch_array($result)) {
|
|
|
|
|
$queryMy = "insert into pbx_supervisor_agentes(dac,matricula,ramal,nome,origem_destino,status,duracao,canal,canal_agente,canal_transfer,uniqueid)values({dac},{matricula},{ramal},{nome},{origem_destino},{status},{duracao},{canal},{canal_agente},{canal_transfer},{uniqueid})";
|
|
|
|
|
$source['canal_agente'] = "Agent/" . $source['matricula'];
|
|
|
|
|
foreach ($fields as $field) {
|
|
|
|
|
$queryMy = str_replace('{' . $field . '}', QuotedStr($source[$field]), $queryMy);
|
|
|
|
|
}
|
|
|
|
|
AlimentaLog($queryMy, "ImportaCampanha", 'Insere Agentes', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
if (!$resultMy)
|
|
|
|
|
throw new Exception("Erro ao importar informa<EFBFBD><EFBFBD>es dos agentes!");
|
|
|
|
|
AddAgente($source['matricula']);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function LimpaMysql() {
|
|
|
|
|
$idCampanha = IdCampanha();
|
|
|
|
|
$source = InformacoesDac();
|
|
|
|
|
$nomeDac = $source['nome_dac'];
|
|
|
|
|
/*
|
|
|
|
|
* Limpa dados da campanha se existirem
|
|
|
|
|
*/
|
|
|
|
|
$queryMy = "delete from pbx_campanha where cmp_id = '$idCampanha'";
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryMy, "LimpaMysql", 'Deleta Campanha: ', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
|
|
|
|
|
$queryMy = "delete from pbx_lista where cmp_id = '$idCampanha'";
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryMy, "LimpaMysql", 'Deleta Lista: ', 1);
|
|
|
|
|
if ($resultMy)
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
|
|
|
|
|
$queryMy = "delete from pbx_supervisor_agentes where dac = '$nomeDac'";
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryMy, "LimpaMysql", 'Limpa Supervisor Agente: ', 1);
|
|
|
|
|
if ($resultMy)
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
|
|
|
|
|
if (!$resultMy)
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel limpar informa<EFBFBD><EFBFBD>es previas no destino. Cmd:[$queryMy]");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AlimentaLog($str, $metodo = '', $label = '', $nivel = 2, $getErro = 0) {
|
|
|
|
|
/*
|
|
|
|
|
* Configura o nivel de log para execu<EFBFBD><EFBFBD>o.
|
|
|
|
|
* 0 -> Registra erros.
|
|
|
|
|
* 1 -> Registras comandos do banco de dados.
|
|
|
|
|
* 2 -> Registra Todas as opera<EFBFBD><EFBFBD>es.
|
|
|
|
|
*/
|
|
|
|
|
global $log, $nivelLog, $MostraLog, $dataAtual;
|
|
|
|
|
if (!$metodo) {
|
|
|
|
|
$metodo = "Discador";
|
|
|
|
|
}
|
|
|
|
|
if (!$label) {
|
|
|
|
|
$label = "Cmd ";
|
|
|
|
|
}
|
|
|
|
|
$logerro = "\n";
|
|
|
|
|
if ($getErro) {
|
|
|
|
|
$erro = error_get_last();
|
|
|
|
|
$logerro = sprintf("\nErro: %s %s Linha: %s\n", $erro['message'], $erro['line']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($nivel <= $nivelLog) {
|
|
|
|
|
$str = sprintf("%s: %s Data: %s%s", $label, $str, $dataAtual, $logerro);
|
|
|
|
|
$log[$metodo][] = $str;
|
|
|
|
|
if ($MostraLog)
|
|
|
|
|
echo "$str\n";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function LogDiscador($path = '') {
|
|
|
|
|
global $log, $pathLog;
|
|
|
|
|
if (!$path) {
|
|
|
|
|
$path = $pathLog;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$arq = fopen($path, 'a');
|
|
|
|
|
|
|
|
|
|
foreach ($log as $key => $value) {
|
|
|
|
|
$strLog = sprintf("%s: Data: %s\n", $key, date("d/m/Y H:i:s"));
|
|
|
|
|
fwrite($arq, $strLog);
|
|
|
|
|
foreach ($value as $msg) {
|
|
|
|
|
fwrite($arq, "$msg\n");
|
|
|
|
|
}
|
|
|
|
|
fwrite($arq, "\n");
|
|
|
|
|
}
|
|
|
|
|
fclose($arq);
|
|
|
|
|
/*
|
|
|
|
|
* Limpa o buffer.
|
|
|
|
|
*/
|
|
|
|
|
$log = array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//pbx_supervisor_agentes(dac,matricula,ramal,nome,origem_destino,status,duracao,canal,canal_agente,canal_transfer,uniqueid)
|
|
|
|
|
function InsereAgente($dadosAgt) {
|
|
|
|
|
if (!count($dadosAgt))
|
|
|
|
|
throw new Exception('InsereAgente: A variavel $dadosAgt esta vazia!');
|
|
|
|
|
$matricula = $dadosAgt['matricula'];
|
|
|
|
|
$queryMy = '';
|
|
|
|
|
$fields = '';
|
|
|
|
|
$values = '';
|
|
|
|
|
foreach ($dadosAgt as $key => $value) {
|
|
|
|
|
$fields .= !$fields ? sprintf('%s', $key) : sprintf(',%s', $key);
|
|
|
|
|
$values .= !$values ? sprintf("%s", QuotedStr($value)) : sprintf(",%s", QuotedStr($value));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$queryMy = sprintf("insert into pbx_supervisor_agentes(%s)values(%s)", $fields, $values);
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryMy, "InsereAgente", 'Insere Agente', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
if (!$resultMy)
|
|
|
|
|
throw new Exception("Erro ao importar informa<EFBFBD><EFBFBD>es do agente!");
|
|
|
|
|
AddAgente($matricula);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AtualizaAgente($matricula, $dac, $dadosAgt) {
|
|
|
|
|
if (!count($dadosAgt))
|
|
|
|
|
throw new Exception('AtualizaAgente: A variavel $dadosAgt esta vazia!');
|
|
|
|
|
$queryMy = '';
|
|
|
|
|
$values = '';
|
|
|
|
|
foreach ($dadosAgt as $key => $value) {
|
|
|
|
|
$values .= !$values ? sprintf("%s = %s", $key, QuotedStr($value)) : sprintf(",%s = %s", $key, QuotedStr($value));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$dac = $dac ? " dac = '$dac' " : "";
|
|
|
|
|
$queryMy = sprintf("update pbx_supervisor_agentes set %s where %s and matricula = '%s'", $values, $dac, $matricula);
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryMy, "AtualizaAgente", 'Atualiza Agente', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
if (!$resultMy)
|
|
|
|
|
throw new Exception("Erro ao atualizar informa<EFBFBD><EFBFBD>es do agente!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ImPortaAgente($matricula) {
|
|
|
|
|
$infoDac = InformacoesDac();
|
|
|
|
|
$nomeDac = $infoDac['nome_dac'];
|
|
|
|
|
$queryPg = "select dac,matricula,ramal,nome,origem_destino,status,duracao,canal,canal_agente,canal_transfer,uniqueid
|
|
|
|
|
from pbx_supervisor_agentes
|
|
|
|
|
where dac = '$nomeDac'
|
|
|
|
|
and matricula = '$matricula'";
|
|
|
|
|
AlimentaLog($queryPg, "ImPortaAgente", 'Importa Agente', 1);
|
|
|
|
|
$result = pg_query($queryPg);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel obter informa<EFBFBD><EFBFBD>es do agente. Erro ao conectar ao servidor de origem.");
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Representa os campos da tabela destino.
|
|
|
|
|
*/
|
|
|
|
|
$fields = array('dac', 'matricula', 'ramal', 'nome', 'origem_destino', 'status', 'duracao', 'canal', 'canal_agente', 'canal_transfer', 'uniqueid');
|
|
|
|
|
$source = pg_fetch_array($result);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Prepara o insert na tabela destino
|
|
|
|
|
*/
|
|
|
|
|
$queryMy = "insert into pbx_supervisor_agentes(dac,matricula,ramal,nome,origem_destino,status,duracao,canal,canal_agente,canal_transfer,uniqueid)values({dac},{matricula},{ramal},{nome},{origem_destino},{status},{duracao},{canal},{canal_agente},{canal_transfer},{uniqueid})";
|
|
|
|
|
foreach ($fields as $field) {
|
|
|
|
|
$queryMy = str_replace('{' . $field . '}', QuotedStr($source[$field]), $queryMy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AlimentaLog($queryMy, "ImPortaAgente", 'Insere Agente', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
if (!$resultMy)
|
|
|
|
|
throw new Exception("Erro ao importar informa<EFBFBD><EFBFBD>es do agente!");
|
|
|
|
|
AddAgente($matricula);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AddAgente($matricula) {
|
|
|
|
|
global $agentesLogados;
|
|
|
|
|
$agentesLogados[$matricula] = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RmAgente($matricula) {
|
|
|
|
|
global $agentesLogados;
|
|
|
|
|
$agentesLogados[$matricula] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AgenteLogado($matricula) {
|
|
|
|
|
global $agentesLogados;
|
|
|
|
|
return (isset($agentesLogados[$matricula]) && ($agentesLogados[$matricula] == 1));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RemoveAgente($matricula) {
|
|
|
|
|
$infoDac = InformacoesDac();
|
|
|
|
|
$nomeDac = $infoDac['nome_dac'];
|
|
|
|
|
$queryMy = "delete from pbx_supervisor_agentes where dac = '$nomeDac' and matricula = '$matricula'";
|
|
|
|
|
AlimentaLog($queryMy, "RemoveAgente", '', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
if (!$resultMy)
|
|
|
|
|
throw new Exception("Erro ao remover o agente: $matricula!");
|
|
|
|
|
RmAgente($matricula);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function InformacoesDac() {
|
|
|
|
|
global $dadosDac;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* A primeira vez que a consulta <EFBFBD> executada
|
|
|
|
|
* armazena o retorna no array global $dadosDac.
|
|
|
|
|
*/
|
|
|
|
|
if (count($dadosDac))
|
|
|
|
|
return $dadosDac;
|
|
|
|
|
|
|
|
|
|
$idCampanha = IdCampanha();
|
|
|
|
|
$queryPg = "select cmp_id, cmp_descricao, id_dac, cmp_aguarda_agente, cmp_numero_ligacoes_agente, cmp_ramal, b.nome as nome_dac, b.numero as numero_dac from pbx_campanha a, pbx_dacs b where b.id = a.id_dac and cmp_id = '$idCampanha'";
|
|
|
|
|
AlimentaLog($queryPg, "InformacoesDac", 'Campanha', 1);
|
|
|
|
|
$result = pg_query($queryPg);
|
|
|
|
|
if (!$result)
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel importar a campanha. Erro ao conectar ao servidor de origem! Cmd:[$queryPg]");
|
|
|
|
|
if (!pg_numrows($result))
|
|
|
|
|
throw new Exception("N<EFBFBD>o existem dados dispon<EFBFBD>veis na campanha informada! Cmd:[$queryPg]");
|
|
|
|
|
$source = pg_fetch_array($result);
|
|
|
|
|
$dadosDac = $source;
|
|
|
|
|
return $source;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function IdCampanha() {
|
|
|
|
|
global $idCampanha;
|
|
|
|
|
|
|
|
|
|
return $idCampanha;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function NomeCampanha() {
|
|
|
|
|
global $nomeCampanha;
|
|
|
|
|
|
|
|
|
|
return $nomeCampanha;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RegistraCampanha($id, $nome) {
|
|
|
|
|
global $idCampanha, $nomeCampanha;
|
|
|
|
|
|
|
|
|
|
$idCampanha = $id;
|
|
|
|
|
$nomeCampanha = $nome;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Encerra() {
|
|
|
|
|
$idCampanha = IdCampanha();
|
|
|
|
|
$query = "select * from pbx_campanha where cmp_id = '$idCampanha' and cmp_status = '1'";
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
|
|
|
|
|
return mysql_num_rows($result) ? mysql_fetch_array($result) : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function CampanhaConcluida() {
|
|
|
|
|
// $query = sprintf("select '' from pbx_lista a where cmp_id = %s and cont_discado = '0' and conf_status = '0' ", IdCampanha());
|
|
|
|
|
$query = sprintf("select '' from pbx_lista a where cmp_id = %s and cont_discado = '0' ", IdCampanha());
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
return !mysql_num_rows($result) && !GetCanaisOperacao();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function EncerraCampanha($status) {
|
|
|
|
|
$idCampanha = IdCampanha();
|
|
|
|
|
$query = "update pbx_campanha set cmp_status = '$status' where cmp_id = '$idCampanha'";
|
|
|
|
|
mysql_query($query);
|
|
|
|
|
return mysql_affected_rows() ? true : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RegistraPid() {
|
|
|
|
|
$query = sprintf("update pbx_campanha set cmp_pid = %s where cmp_id = '%s'", GetPid(), IdCampanha());
|
|
|
|
|
mysql_query($query);
|
|
|
|
|
return mysql_affected_rows() ? true : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetPid() {
|
|
|
|
|
return getmypid();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function MysqlOpen() {
|
|
|
|
|
global $hostMy, $userMy, $senhaMy, $baseMy;
|
|
|
|
|
$connMy = mysql_pconnect($hostMy, $userMy, $senhaMy);
|
|
|
|
|
return ($connMy && mysql_select_db($baseMy)) ? $connMy : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function PgOpen() {
|
|
|
|
|
global $conStr;
|
|
|
|
|
$conn = pg_pconnect($conStr);
|
|
|
|
|
return $conn ? $conn : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function EncerraMonitor($pid) {
|
|
|
|
|
return true;
|
|
|
|
|
$cmd = "kill -9 $pid";
|
|
|
|
|
AlimentaLog($cmd, 'EncerraMonitor');
|
|
|
|
|
system($cmd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AnalisaBloco($bloco) {
|
|
|
|
|
global $imprimeSaida;
|
|
|
|
|
//$dadosAgt=array('dac' => '','matricula' => '','ramal' => '','nome' => '','origem_destino' => '','status' => '','duracao' => '','canal' => '','canal_agente' => '','canal_transfer' => '','uniqueid' => '');
|
|
|
|
|
$infoDac = InformacoesDac();
|
|
|
|
|
$nomeDac = trim($infoDac['nome_dac']);
|
|
|
|
|
$event = $bloco["Event"];
|
|
|
|
|
|
|
|
|
|
if ($event == "QueueMemberAdded") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: QueueMemberAdded
|
|
|
|
|
* Privilege: agent,all
|
|
|
|
|
* Queue: Discador
|
|
|
|
|
* Location: Agent/1000
|
|
|
|
|
* MemberName: Agent/1000
|
|
|
|
|
* Membership: dynamic
|
|
|
|
|
* Penalty: 0
|
|
|
|
|
* CallsTaken: 0
|
|
|
|
|
* LastCall: 0
|
|
|
|
|
* Status: 5
|
|
|
|
|
* Paused: 0
|
|
|
|
|
*/
|
|
|
|
|
$dac = trim($bloco["Queue"]);
|
|
|
|
|
$tipo = $bloco["Membership"];
|
|
|
|
|
if (($dac == $nomeDac) && ($tipo == 'dynamic')) {
|
|
|
|
|
$matricula = InfoCanal($bloco["MemberName"]);
|
|
|
|
|
$canalAgente = trim($bloco["MemberName"]);
|
|
|
|
|
$dadosAgt = array('dac' => $nomeDac, 'matricula' => $matricula, 'status' => 'ADD', 'duracao' => date("Y-m-d H:i:s"), 'canal_agente' => $canalAgente);
|
|
|
|
|
InsereAgente($dadosAgt);
|
|
|
|
|
}
|
|
|
|
|
} else if ($event == "QueueMemberStatus") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: QueueMemberStatus
|
|
|
|
|
* Privilege: agent,all
|
|
|
|
|
* Queue: Discador
|
|
|
|
|
* Location: Agent/1000
|
|
|
|
|
* MemberName: Agent/1000
|
|
|
|
|
* Membership: dynamic
|
|
|
|
|
* Penalty: 0
|
|
|
|
|
* CallsTaken: 1
|
|
|
|
|
* LastCall: 1410531414
|
|
|
|
|
* Status: 1
|
|
|
|
|
* Paused: 0
|
|
|
|
|
*/
|
|
|
|
|
$dac = $bloco["Queue"];
|
|
|
|
|
$tipo = $bloco["Membership"];
|
|
|
|
|
if (($dac == $nomeDac) && ($tipo == 'dynamic')) {
|
|
|
|
|
$status = $bloco["Status"];
|
|
|
|
|
$pausa = $bloco["Paused"];
|
|
|
|
|
if ($pausa == '1')
|
|
|
|
|
$status = 'PAUSA';
|
|
|
|
|
else if ($status == '1')
|
|
|
|
|
$status = 'LIVRE';
|
|
|
|
|
else
|
|
|
|
|
$status = 'CHAMANDO';
|
|
|
|
|
|
|
|
|
|
$matricula = InfoCanal($bloco["MemberName"]);
|
|
|
|
|
$dadosAgt = array('status' => $status);
|
|
|
|
|
AtualizaAgente($matricula, $nomeDac, $dadosAgt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if ($event == "Agentlogin") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Agentlogin
|
|
|
|
|
* Privilege: agent,all
|
|
|
|
|
* Agent: 1000
|
|
|
|
|
* Channel: Local/4097@app-login-3e60,2
|
|
|
|
|
* Uniqueid: 1410444441.68
|
|
|
|
|
*/
|
|
|
|
|
$ramal = InfoCanal($bloco["Channel"]);
|
|
|
|
|
$matricula = trim($bloco["Agent"]);
|
|
|
|
|
$dadosAgt = array('ramal' => $ramal, 'status' => 'PAUSA');
|
|
|
|
|
AtualizaAgente($matricula, $nomeDac, $dadosAgt);
|
|
|
|
|
} else if ($event == "Agentcallbacklogin") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Agentcallbacklogin
|
|
|
|
|
* Privilege: agent,all
|
|
|
|
|
* Agent: 1000
|
|
|
|
|
* Loginchan: 4097@app-callcenter
|
|
|
|
|
* Uniqueid: 1410526724.168
|
|
|
|
|
*/
|
|
|
|
|
$ramal = InfoCanal($bloco["Loginchan"], 0);
|
|
|
|
|
$matricula = trim($bloco["Agent"]);
|
|
|
|
|
$dadosAgt = array('ramal' => $ramal, 'status' => 'PAUSA');
|
|
|
|
|
AtualizaAgente($matricula, $nomeDac, $dadosAgt);
|
|
|
|
|
} else if ($event == "QueueMemberPaused") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: QueueMemberPaused
|
|
|
|
|
* Privilege: agent,all
|
|
|
|
|
* Queue: Discador
|
|
|
|
|
* Location: Agent/1000
|
|
|
|
|
* MemberName: Agent/1000
|
|
|
|
|
* Paused: 0
|
|
|
|
|
*/
|
|
|
|
|
$dac = trim($bloco["Queue"]);
|
|
|
|
|
$pausa = trim($bloco["Paused"]) == "1" ? 'PAUSA' : 'LIVRE';
|
|
|
|
|
if ($nomeDac == $dac) {
|
|
|
|
|
$matricula = InfoCanal($bloco["MemberName"]);
|
|
|
|
|
$dadosAgt = array('status' => $pausa);
|
|
|
|
|
AtualizaAgente($matricula, $nomeDac, $dadosAgt);
|
|
|
|
|
}
|
|
|
|
|
} else if ($event == "QueueMemberRemoved") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: QueueMemberRemoved
|
|
|
|
|
* Privilege: agent,all
|
|
|
|
|
* Queue: simples
|
|
|
|
|
* Location: Agent/1000
|
|
|
|
|
* MemberName: Agent/1000
|
|
|
|
|
*/
|
|
|
|
|
$dac = trim($bloco["Queue"]);
|
|
|
|
|
if ($nomeDac == $dac) {
|
|
|
|
|
$matricula = InfoCanal($bloco["MemberName"]);
|
|
|
|
|
RemoveAgente($matricula);
|
|
|
|
|
}
|
|
|
|
|
} else if ($event == "Agentcallbacklogoff") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Agentcallbacklogoff
|
|
|
|
|
* Privilege: agent,all
|
|
|
|
|
* Agent: 1000
|
|
|
|
|
* Reason: CommandLogoff
|
|
|
|
|
* Loginchan: 1009@app-callcenter
|
|
|
|
|
* Logintime: 317
|
|
|
|
|
*/
|
|
|
|
|
$matricula = $bloco["Agent"];
|
|
|
|
|
RemoveAgente($matricula);
|
|
|
|
|
} else if ($event == "OriginateResponse") {
|
|
|
|
|
/* Event: OriginateResponse
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* ActionID: 245691788631667
|
|
|
|
|
* Response: Success
|
|
|
|
|
* Channel: Local/392893913@padrao-b700,1
|
|
|
|
|
* Context: padrao
|
|
|
|
|
* Exten: 6660
|
|
|
|
|
* Reason: 4
|
|
|
|
|
* Uniqueid: 1410959627.647
|
|
|
|
|
* CallerID: 4111
|
|
|
|
|
* CallerIDNum: 4111
|
|
|
|
|
* CallerIDName: <unknown>
|
|
|
|
|
*/
|
|
|
|
|
OriginateResponse($bloco);
|
|
|
|
|
} else if ($event == "Newchannel") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Newchannel
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* Channel: Local/92893913@padrao-0d15,1
|
|
|
|
|
* State: Down
|
|
|
|
|
* CallerIDNum: <unknown>
|
|
|
|
|
* CallerIDName: <unknown>
|
|
|
|
|
* Uniqueid: 1410958041.635
|
|
|
|
|
* dispositivo: 1410958041.635
|
|
|
|
|
*/
|
|
|
|
|
Newchannel($bloco);
|
|
|
|
|
} else if ($event == "Link") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Link
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* Channel1: SIP/4099-0000003a
|
|
|
|
|
* Channel2: Agent/1000
|
|
|
|
|
* Uniqueid1: 1410468713.137
|
|
|
|
|
* Uniqueid2: 1410468714.140
|
|
|
|
|
* CallerID1: 4099
|
|
|
|
|
* CallerID2: 4099
|
|
|
|
|
*/
|
|
|
|
|
$matricula = InfoCanal($bloco["Channel2"]);
|
|
|
|
|
if (AgenteLogado($matricula)) {
|
|
|
|
|
$canal = $bloco["Channel1"];
|
|
|
|
|
$fone = $bloco["CallerID1"];
|
|
|
|
|
$dadosAgt = array('status' => 'OCUPADO', 'origem_destino' => $fone, 'canal' => $canal);
|
|
|
|
|
AtualizaAgente($matricula, $nomeDac, $dadosAgt);
|
|
|
|
|
}
|
|
|
|
|
LinkAmi($bloco);
|
|
|
|
|
} else if ($event == "Unlink") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Unlink
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* Channel1: SIP/4099-0000003a
|
|
|
|
|
* Channel2: Agent/1000
|
|
|
|
|
* Uniqueid1: 1410468713.137
|
|
|
|
|
* Uniqueid2: 1410468714.140
|
|
|
|
|
* CallerID1: 4099
|
|
|
|
|
* CallerID2: 4099
|
|
|
|
|
* Source: SIP/4099-0000003a
|
|
|
|
|
* Destination: Agent/1000
|
|
|
|
|
*/
|
|
|
|
|
$matricula = InfoCanal($bloco["Channel2"]);
|
|
|
|
|
if (AgenteLogado($matricula)) {
|
|
|
|
|
$dadosAgt = array('status' => 'LIVRE', 'origem_destino' => '', 'canal' => '');
|
|
|
|
|
AtualizaAgente($matricula, $nomeDac, $dadosAgt);
|
|
|
|
|
}
|
|
|
|
|
UnlinkAmi($bloco);
|
|
|
|
|
} else if ($event == "Rename") {
|
|
|
|
|
/* Event: Rename
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* Oldname: Local/92893913@padrao-98d0,1
|
|
|
|
|
* Newname: IAX2/SIMPLESIP-29709
|
|
|
|
|
* Uniqueid: 1410977797.722
|
|
|
|
|
*/
|
|
|
|
|
RenameAmi($bloco);
|
|
|
|
|
} else if ($event == "Join") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Join
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* Channel: SIP/4002-00000155
|
|
|
|
|
* CallerID: 4111
|
|
|
|
|
* CallerIDName: unknown
|
|
|
|
|
* Queue: Discador
|
|
|
|
|
* Position: 2
|
|
|
|
|
* Count: 2
|
|
|
|
|
* Uniqueid: 1411582827.1654
|
|
|
|
|
*/
|
|
|
|
|
JoinAmi($bloco);
|
|
|
|
|
} else if ($event == "Leave") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Leave
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* Channel: SIP/4002-00000155
|
|
|
|
|
* Queue: Discador
|
|
|
|
|
* Count: 1
|
|
|
|
|
* Uniqueid: 1411582827.1654
|
|
|
|
|
*/
|
|
|
|
|
LeaveAmi($bloco);
|
|
|
|
|
} else if ($event == "Cdr") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Cdr
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* AccountCode:
|
|
|
|
|
* Source: 4111
|
|
|
|
|
* Destination: 6660
|
|
|
|
|
* DestinationContext: padrao
|
|
|
|
|
* CallerID: 4111
|
|
|
|
|
* Channel: SIP/4002-00000162
|
|
|
|
|
* DestinationChannel: Agent/1000
|
|
|
|
|
* LastApplication: Queue
|
|
|
|
|
* LastData: Discador|t||||agente_fila.php|Discador
|
|
|
|
|
* StartTime: 2014-09-24 16
|
|
|
|
|
* AnswerTime: 2014-09-24 16
|
|
|
|
|
* EndTime: 2014-09-24 16
|
|
|
|
|
* Duration: 66
|
|
|
|
|
* BillableSeconds: 63
|
|
|
|
|
* Disposition: ANSWERED
|
|
|
|
|
* AMAFlags: DOCUMENTATION
|
|
|
|
|
* UniqueID: 1411590608.1718
|
|
|
|
|
* UserField: 6660-1991649899-1411590608.1716.WAV
|
|
|
|
|
*/
|
|
|
|
|
CdrAmi($bloco);
|
|
|
|
|
} else if ($event == "Hangup") {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Hangup
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* Channel: Agent/1000
|
|
|
|
|
* Uniqueid: 1410468714.140
|
|
|
|
|
* Cause: 0
|
|
|
|
|
* Cause-txt: Unknown
|
|
|
|
|
*/
|
|
|
|
|
$matricula = InfoCanal($bloco["Channel"]);
|
|
|
|
|
$dadosAgt = array('status' => 'LIVRE', 'origem_destino' => '', 'canal' => '');
|
|
|
|
|
AtualizaAgente($matricula, $nomeDac, $dadosAgt);
|
|
|
|
|
Hangup($bloco);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Imprime os comanados para um arquivo.
|
|
|
|
|
*/
|
|
|
|
|
if ($imprimeSaida)
|
|
|
|
|
ImprimeComando($bloco);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function InfoCanal($channel, $arPos = 1, $pattern = '/[\/@]/') {
|
|
|
|
|
/*
|
|
|
|
|
* Retorna o valor de acordeo com $pattern e posi<EFBFBD><EFBFBD>o passados.
|
|
|
|
|
* Com a configura<EFBFBD><EFBFBD>o default retorna o ramal a partir do canal(Channel: Local/4097@app-login-3e60,2) do agente
|
|
|
|
|
* ou a matricula a partir da String "Agent/NumeroMatricula".
|
|
|
|
|
*/
|
|
|
|
|
$dados = preg_split($pattern, $channel);
|
|
|
|
|
return trim($dados[$arPos]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Newchannel($bloco) {
|
|
|
|
|
$query = "insert into pbx_channels(Channel, CallerIDNum, CallerIDName, Uniqueid)values(%s,%s,%s,%s)";
|
|
|
|
|
$query = sprintf($query, QuotedStr($bloco['Channel']), QuotedStr($bloco['CallerIDNum']), QuotedStr($bloco['CallerIDName']), QuotedStr($bloco['Uniqueid'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "Newchannel", "", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function JoinAmi($bloco) {
|
|
|
|
|
$query = "insert into pbx_join(nome_dac, channel, uniqueid)values(%s,%s,%s)";
|
|
|
|
|
$query = sprintf($query, QuotedStr($bloco['Queue']), QuotedStr($bloco['Channel']), QuotedStr($bloco['Uniqueid'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "JoinAmi", "", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function LeaveAmi($bloco) {
|
|
|
|
|
$query = "delete from pbx_join where uniqueid = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($bloco['Uniqueid']));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "LeaveAmi", "", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function LinkAmi($bloco) {
|
|
|
|
|
$query = "insert into pbx_link(Channel1, Channel2, Uniqueid1, Uniqueid2, CallerID1, CallerID2)values(%s,%s,%s,%s,%s,%s)";
|
|
|
|
|
$query = sprintf($query, QuotedStr($bloco['Channel1']), QuotedStr($bloco['Channel2']), QuotedStr($bloco['Uniqueid1']), QuotedStr($bloco['Uniqueid2']), QuotedStr($bloco['CallerID1']), QuotedStr($bloco['CallerID2'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "LinkAmi", "pbx_link", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (stripos($bloco["Channel2"], 'Agent') !== false) {
|
|
|
|
|
$matricula = InfoCanal($bloco["Channel2"]);
|
|
|
|
|
$query = "update pbx_canais_discando set matricula = %s, channel_rename = %s, channel_link = %s where uniqueid = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($matricula), QuotedStr($bloco['Channel1']), QuotedStr($bloco['Channel2']), QuotedStr($bloco['Uniqueid1'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "LinkAmi", "pbx_canais_discando", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function CdrAmi($bloco) { /*
|
|
|
|
|
* Event: Cdr
|
|
|
|
|
* Privilege: call,all
|
|
|
|
|
* AccountCode:
|
|
|
|
|
* Source: 4111
|
|
|
|
|
* Destination: 6660
|
|
|
|
|
* DestinationContext: padrao
|
|
|
|
|
* CallerID: 4111
|
|
|
|
|
* Channel: SIP/4002-00000162
|
|
|
|
|
* DestinationChannel: Agent/1000
|
|
|
|
|
* LastApplication: Queue
|
|
|
|
|
* LastData: Discador|t||||agente_fila.php|Discador
|
|
|
|
|
* StartTime: 2014-09-24 16
|
|
|
|
|
* AnswerTime: 2014-09-24 16
|
|
|
|
|
* EndTime: 2014-09-24 16
|
|
|
|
|
* Duration: 66
|
|
|
|
|
* BillableSeconds: 63
|
|
|
|
|
* Disposition: ANSWERED
|
|
|
|
|
* AMAFlags: DOCUMENTATION
|
|
|
|
|
* UniqueID: 1411590608.1718
|
|
|
|
|
* UserField: 6660-1991649899-1411590608.1716.WAV
|
|
|
|
|
*/
|
|
|
|
|
if (!isset($bloco['Channel']))
|
|
|
|
|
return;
|
|
|
|
|
$duracao = $bloco['BillableSeconds'];
|
|
|
|
|
$status = ($duracao > 3) ? CHAMADA_ATENDIDA : CHAMADA_NAOATENDIDA;
|
|
|
|
|
$query = "update pbx_canais_discando set status = %s, status_motivo = %s, starttime = %s, answertime = %s, endtime = %s, duration = %s, billableseconds = %s where channel = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($status), QuotedStr($bloco['Disposition']), QuotedStr($bloco['StartTime']), QuotedStr($bloco['AnswerTime']), QuotedStr($bloco['EndTime']), QuotedStr($bloco['Duration']), QuotedStr($bloco['BillableSeconds']), QuotedStr($bloco['Channel'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "CdrAmi", "", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function UnlinkAmi($bloco) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Hangup($bloco) {
|
|
|
|
|
/*
|
|
|
|
|
* Event: Hangup
|
|
|
|
|
Privilege: call,all
|
|
|
|
|
Channel: SIP/4004-0000017f
|
|
|
|
|
Uniqueid: 1411759565.1810
|
|
|
|
|
Cause: 16
|
|
|
|
|
Cause-txt: Normal Clearing
|
|
|
|
|
*/
|
|
|
|
|
$uniqueid = $bloco['Uniqueid'];
|
|
|
|
|
$qyery = sprintf("select '' from pbx_canais_discando where uniqueid = %s", QuotedStr($uniqueid));
|
|
|
|
|
$result = mysql_query($qyery);
|
|
|
|
|
if (mysql_num_rows($result)) {
|
|
|
|
|
RemoveCanal($bloco['Uniqueid']);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RenameAmi($bloco) {
|
|
|
|
|
$query = "update pbx_channels set Channel = %s where Channel = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($bloco['Newname']), QuotedStr($bloco['Oldname'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RenameAmi", "pbx_channels", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query = "update pbx_canais_discando set channel_rename = %s where uniqueid = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($bloco['Newname']), QuotedStr($bloco['Uniqueid'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RenameAmi", "pbx_canais_discando", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function OriginateRegister($bloco) {
|
|
|
|
|
$infoDac = InformacoesDac();
|
|
|
|
|
@AddCanalDiscando($bloco['cmp_id'], $bloco['uniqueid'], $bloco['channel']);
|
|
|
|
|
$query = "insert into pbx_canais_discando(actionid,channel,destino,status,uniqueid,cmp_id,list_id,cont_id,conf_id,status_motivo,originate_status,originate_motivo,id_dac,nome_dac)values(%s,%s,%s,%s,%s,%s,%s,%s,%s,'-1','discando', '-1',%s,%s)";
|
|
|
|
|
$query = sprintf($query, QuotedStr($bloco['actionid']), QuotedStr($bloco['channel']), QuotedStr($bloco['destino']), QuotedStr($bloco['status']), QuotedStr($bloco['uniqueid']), QuotedStr($bloco['cmp_id']), QuotedStr($bloco['list_id']), QuotedStr($bloco['cont_id']), QuotedStr($bloco['conf_id']), QuotedStr($infoDac['id_dac']), QuotedStr($infoDac['nome_dac'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
AlimentaLog($query, "OriginateRegister", "", 1, 0);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "OriginateRegister", "", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function StatusListaOpr($confId, $status) {
|
|
|
|
|
$query = "update pbx_lista set st_opr = %s where conf_id = %s ";
|
|
|
|
|
$query = sprintf($query, QuotedStr($status), QuotedStr($confId));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
AlimentaLog($query, "StatusListaOpr", "pbx_lista", 1, 0);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "StatusListaOpr", "", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function OriginateResponse($bloco) {
|
|
|
|
|
/*
|
|
|
|
|
* Success indica que a discagem foi efetivada.
|
|
|
|
|
*/
|
|
|
|
|
$uniqueid = $bloco['Uniqueid'];
|
|
|
|
|
$status = $bloco['Response'] == 'Success';
|
|
|
|
|
|
|
|
|
|
$query = "update pbx_canais_discando set channel = %s, uniqueid = %s, originate_status = %s, originate_motivo = %s, status = %s where actionid = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($bloco['Channel']), QuotedStr($uniqueid), QuotedStr($bloco['Response']), QuotedStr($bloco['Reason']), QuotedStr($status ? CHAMADA_DISCADA : CHAMADA_INVALIDA), QuotedStr($bloco['ActionID'])
|
|
|
|
|
);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "OriginateResponse", "", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$status) {
|
|
|
|
|
RemoveCanal($uniqueid, CHAMADA_INVALIDA);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RemoveCanal($uniqueid, $status = '') {
|
|
|
|
|
/*
|
|
|
|
|
* Informa<EFBFBD><EFBFBD>es dos contatos.
|
|
|
|
|
*/
|
|
|
|
|
$query = "select cont_id, conf_id, matricula, status from pbx_canais_discando where uniqueid = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($uniqueid));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
$dados = mysql_fetch_array($result);
|
|
|
|
|
$contId = $dados['cont_id'];
|
|
|
|
|
$confId = $dados['conf_id'];
|
|
|
|
|
$matricula = $dados['matricula'];
|
|
|
|
|
if (!$status)
|
|
|
|
|
$status = $dados['status'];
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RemoveCanal", "Seleciona Contato", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Altera o status do telefone na lista do discador.
|
|
|
|
|
*/
|
|
|
|
|
$query = "update pbx_lista set conf_status = %s where conf_id = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($status), QuotedStr($confId));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RemoveCanal", "Atualiza fone Lista", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$statusContato = CONTATO_DISCADO;
|
|
|
|
|
|
|
|
|
|
if ($status != CHAMADA_ATENDIDA) {
|
|
|
|
|
/*
|
|
|
|
|
* Verifica quantos n<EFBFBD>meros ainda faltam discar.
|
|
|
|
|
*/
|
|
|
|
|
$query = "select count(*) from pbx_lista where cont_id = %s and conf_status = '0'";
|
|
|
|
|
$query = sprintf($query, QuotedStr($contId));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
$dados = mysql_fetch_row($result);
|
|
|
|
|
$numDiscar = $dados[0];
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RemoveCanal", "Qt a discar", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$statusContato = ($numDiscar > 0) ? CONTATO_NAO_DISCADO : CONTATO_DISCADO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Altera o status do contato na lista do discador.
|
|
|
|
|
*/
|
|
|
|
|
$query = "update pbx_lista set cont_discado = %s where cont_id = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($statusContato), QuotedStr($contId));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RemoveCanal", "Atualiza Contato Lista", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Altera o satus da aplica<EFBFBD><EFBFBD>o.
|
|
|
|
|
*/
|
|
|
|
|
$query = "update pbx_campanha_contato_fone set conf_status = %s, conf_uid = %s, conf_agente_matricula = %s where conf_id = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($statusContato), QuotedStr($uniqueid), QuotedStr($matricula), QuotedStr($confId));
|
|
|
|
|
$result = pg_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RemoveCanal", "Atualiza Fone", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query = "update pbx_campanha_contato set cont_discado = %s where cont_id = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($statusContato), QuotedStr($contId));
|
|
|
|
|
$result = pg_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RemoveCanal", "Atualiza Contato", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Apaga o canal.
|
|
|
|
|
*/
|
|
|
|
|
$query = "delete from pbx_canais_discando where uniqueid = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($uniqueid));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, "RemoveCanal", "Deleta Canal", 0, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ImprimeComando($bloco) {
|
|
|
|
|
global $fileMonitor;
|
|
|
|
|
if (count($bloco)) {
|
|
|
|
|
foreach ($bloco as $key => $value) {
|
|
|
|
|
fwrite($fileMonitor, sprintf("%s: %s\n", $key, $value));
|
|
|
|
|
}
|
|
|
|
|
fwrite($fileMonitor, "\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function SetVar($name, $var) {
|
|
|
|
|
$query = sprintf("delete from pbx_session where sess_name = '%s'", $name);
|
|
|
|
|
if (!@mysql_query($query))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
AlimentaLog($var, "SetVar", "Valor bruto", 2);
|
|
|
|
|
$var = serialize($var);
|
|
|
|
|
|
|
|
|
|
AlimentaLog($var, "SetVar", "Serialize", 2);
|
|
|
|
|
$var = base64_encode($var);
|
|
|
|
|
|
|
|
|
|
AlimentaLog($var, "SetVar", "Encode", 2);
|
|
|
|
|
$query = sprintf("insert into pbx_session(sess_name, sess_share)values('%s','%s')", $name, $var);
|
|
|
|
|
AlimentaLog($query, "SetVar", "Insert", 2);
|
|
|
|
|
|
|
|
|
|
return mysql_query($query) ? true : false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetVar($name) {
|
|
|
|
|
$query = sprintf("select sess_share from pbx_session where sess_name = '%s'", $name);
|
|
|
|
|
AlimentaLog($query, "GetVar", "Query", 2);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
$get = mysql_fetch_row($result);
|
|
|
|
|
AlimentaLog($get[0], "GetVar", "Valor Banco", 2);
|
|
|
|
|
$var = base64_decode($get[0]);
|
|
|
|
|
AlimentaLog($var, "GetVar", "Valor Decode", 2);
|
|
|
|
|
$var = unserialize($var);
|
|
|
|
|
AlimentaLog($var, "GetVar", "Valor Real", 2);
|
|
|
|
|
return $var;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ConectaMonitor() {
|
|
|
|
|
$tentaviConexao = 0;
|
|
|
|
|
$NumeroTentavivas = (TIMEOUT_CONEXAO_MONITOR * 1000000) / TEMPO_TENTATIVA_CONEXAO_MONITOR;
|
|
|
|
|
while ($tentaviConexao < $NumeroTentavivas) {
|
|
|
|
|
if (($dados = Encerra()) !== false) {
|
|
|
|
|
if ($dados['cmp_pid']) {
|
|
|
|
|
return $dados['cmp_pid'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
usleep(TEMPO_TENTATIVA_CONEXAO_MONITOR);
|
|
|
|
|
$tentaviConexao++;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Originate($socket, $infoCampanha) {
|
|
|
|
|
$infoLog = print_r($infoCampanha, true);
|
|
|
|
|
AlimentaLog($infoLog, 'Originate', 'infoCampanha', 2);
|
|
|
|
|
|
|
|
|
|
$numeroFila = $infoCampanha['numeroFila'];
|
|
|
|
|
$destino = $infoCampanha['conf_fone'];
|
|
|
|
|
$origem = $infoCampanha['origem'];
|
|
|
|
|
$rand = rand(000000000, 9999999999);
|
|
|
|
|
fwrite($socket, "Action: Originate\r\n");
|
|
|
|
|
fwrite($socket, "Channel: Local/$destino@padrao\r\n"); //Numero discando.
|
|
|
|
|
fwrite($socket, "Context: padrao\r\n");
|
|
|
|
|
fwrite($socket, "Exten: $numeroFila\r\n"); //N<EFBFBD>mero da fila para qual ser<EFBFBD> redirecionado.
|
|
|
|
|
fwrite($socket, "Priority: 1\r\n");
|
|
|
|
|
fwrite($socket, "Callerid: $origem\r\n"); //Ramal com permissoes de discagem, n<EFBFBD>o deve estar registrado.
|
|
|
|
|
fwrite($socket, "Timeout: 30000\r\n");
|
|
|
|
|
fwrite($socket, "Async: True\r\n");
|
|
|
|
|
fwrite($socket, "Variable: TIPO-DISCAGEM=APLICACAO|PERMISSAO=OK\r\n");
|
|
|
|
|
fwrite($socket, "ActionID: $rand\r\n\r\n");
|
|
|
|
|
|
|
|
|
|
$blocoCmd['Action'] = "Originate";
|
|
|
|
|
$blocoCmd['Channel'] = "Local/$destino@padrao";
|
|
|
|
|
$blocoCmd['Context'] = "default";
|
|
|
|
|
$blocoCmd['Exten'] = "$numeroFila";
|
|
|
|
|
$blocoCmd['Priority'] = "1";
|
|
|
|
|
$blocoCmd['Callerid'] = "$origem";
|
|
|
|
|
$blocoCmd['Timeout'] = "30000";
|
|
|
|
|
$blocoCmd['Async'] = "True";
|
|
|
|
|
$blocoCmd['Variable'] = "TIPO-DISCAGEM=APLICACAO|PERMISSAO=OK";
|
|
|
|
|
$blocoCmd['ActionID'] = "$rand";
|
|
|
|
|
ImprimeComando($blocoCmd);
|
|
|
|
|
|
|
|
|
|
$bloco = array('actionid' => $rand, 'channel' => '', 'destino' => $destino, 'status' => OPERACAO_INICIADA, 'uniqueid' => '', 'cmp_id' => $infoCampanha['cmp_id'], 'list_id' => $infoCampanha['list_id'], 'cont_id' => $infoCampanha['cont_id'], 'conf_id' => $infoCampanha['conf_id']);
|
|
|
|
|
$infoLog = print_r($bloco, true);
|
|
|
|
|
AlimentaLog($infoLog, 'Originate', 'Bloco', 2);
|
|
|
|
|
OriginateRegister($bloco);
|
|
|
|
|
//VerificaRetorno($socket);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ExisteActionId($acId) {
|
|
|
|
|
$query = "select count(*) from pbx_canais_discando where actionid = %s";
|
|
|
|
|
$query = sprintf($query, QuotedStr($acId));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
$row = mysql_fetch_row($result);
|
|
|
|
|
return $row[0];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function HangupAmi($socket, $channel) {
|
|
|
|
|
$rand = rand(000000000, 9999999999);
|
|
|
|
|
fwrite($socket, "Action: Hangup\r\n");
|
|
|
|
|
fwrite($socket, "Channel: $channel\r\n");
|
|
|
|
|
fwrite($socket, "ActionID: $rand\r\n\r\n");
|
|
|
|
|
//VerificaRetorno($socket);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function VerificaRetorno($socket) {
|
|
|
|
|
$i = 0;
|
|
|
|
|
$bloco = array();
|
|
|
|
|
while (!feof($socket)) {
|
|
|
|
|
$bufer = fgets($socket);
|
|
|
|
|
|
|
|
|
|
$lerBloco = GeraBloco($bufer);
|
|
|
|
|
if ($lerBloco) {
|
|
|
|
|
list($label, $cmd) = explode(":", $bufer);
|
|
|
|
|
$bloco[trim($label)] = trim($cmd);
|
|
|
|
|
} else if (count($bloco)) {
|
|
|
|
|
//ImprimeComando($bloco);
|
|
|
|
|
if (LerBloco($bloco))
|
|
|
|
|
AnalisaRetorno($bloco);
|
|
|
|
|
$bloco = array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((!$lerBloco) && ($i++ > MAX_TENTATIVA_RETORNO))
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AnalisaRetorno($bloco) {
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AgentesLivres() {
|
|
|
|
|
$infoDac = InformacoesDac();
|
|
|
|
|
$nomeDac = $infoDac['nome_dac'];
|
|
|
|
|
$queryMy = "select count(*) from pbx_supervisor_agentes where dac = '$nomeDac' and status = 'LIVRE'";
|
|
|
|
|
AlimentaLog($queryMy, "AgentesLivres", 'Query', 1);
|
|
|
|
|
$resultMy = mysql_query($queryMy);
|
|
|
|
|
if (!$resultMy) {
|
|
|
|
|
AlimentaLog($queryMy, "AgentesLivres", 'Erro query', 1, 1);
|
|
|
|
|
}
|
|
|
|
|
$row = mysql_fetch_row($resultMy);
|
|
|
|
|
return $row[0];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetCanaisOperacao() {
|
|
|
|
|
$infoDac = InformacoesDac();
|
|
|
|
|
$query = sprintf("select count(*) pbx_join where nome_dac = %s", QuotedStr($infoDac['nome_dac']));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, 'GetCanaisOperacao', '', 0, 1);
|
|
|
|
|
}
|
|
|
|
|
$row = mysql_fetch_row($result);
|
|
|
|
|
return $row[0];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function DerrubaCanais($socket) {
|
|
|
|
|
$infoDac = InformacoesDac();
|
|
|
|
|
$query = sprintf("select * pbx_canais_discando where nome_dac = %s and status = %s", QuotedStr($infoDac['nome_dac']));
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, 'DerrubaCanais', '', 0, 1);
|
|
|
|
|
}
|
|
|
|
|
while ($row = mysql_fetch_array($result)) {
|
|
|
|
|
$actionid = $row['actionid'];
|
|
|
|
|
$cannel = $row['channel_rename'];
|
|
|
|
|
HangupAmi($socket, $cannel);
|
|
|
|
|
$cannel = $row['channel_link'];
|
|
|
|
|
HangupAmi($socket, $cannel);
|
|
|
|
|
|
|
|
|
|
$query = sprintf("delete from pbx_canais_discando where actionid = %s", QuotedStr($actionid));
|
|
|
|
|
@mysql_query($query);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ProcessarLista($socket) {
|
|
|
|
|
/*
|
|
|
|
|
* Informa<EFBFBD><EFBFBD>es sobre o Dac e Camapnha.
|
|
|
|
|
*/
|
|
|
|
|
$infoDac = InformacoesDac();
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Agentes Dispon<EFBFBD>vel para o atendimento.
|
|
|
|
|
*/
|
|
|
|
|
$numAgt = AgentesLivres();
|
|
|
|
|
|
|
|
|
|
if (!$numAgt) {
|
|
|
|
|
/*
|
|
|
|
|
* N<EFBFBD>o existem agentes disponiveis, ent<EFBFBD>o derruba todos os canais ativos.
|
|
|
|
|
*/
|
|
|
|
|
DerrubaCanais($socket);
|
|
|
|
|
} else {
|
|
|
|
|
/*
|
|
|
|
|
* N<EFBFBD>mero de canais selecionados pelo discador que j<EFBFBD> foram discados
|
|
|
|
|
* e ainda n<EFBFBD>o foi completada a opera<EFBFBD><EFBFBD>o(Todos os canais presente na
|
|
|
|
|
* tabela pbx_canais_discando para a lista atual).
|
|
|
|
|
*/
|
|
|
|
|
$canaisOperacao = GetCanaisOperacao();
|
|
|
|
|
|
|
|
|
|
$infoCampanha = array('numeroFila' => $infoDac['numero_dac'], 'origem' => $infoDac['cmp_ramal']);
|
|
|
|
|
$numLigacoesAgt = isset($infoDac['cmp_numero_ligacoes_agente']) && $infoDac['cmp_numero_ligacoes_agente'] ? $infoDac['cmp_numero_ligacoes_agente'] : 1;
|
|
|
|
|
$limitLigacoes = $numAgt * $numLigacoesAgt;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Este valor <EFBFBD> calculado pelo n<EFBFBD>mero de agentes livre no momento por
|
|
|
|
|
* o n<EFBFBD>mero de canais por agente passado no parametro "cmp_numero_ligacoes_agente"
|
|
|
|
|
* "$limitLigacoes = $numAgt * $numLigacoesAgt", para um controle mais efetivo
|
|
|
|
|
* diminui-se os canais que j<EFBFBD> estao em opera<EFBFBD><EFBFBD>o "$limitLigacoes = $limitLigacoes - $canaisOperacao".
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
$limitLigacoes = $limitLigacoes - $canaisOperacao;
|
|
|
|
|
|
|
|
|
|
if ($limitLigacoes > 0) {
|
|
|
|
|
/*
|
|
|
|
|
* Seleciona para discagem contatos da lista com cont_status = 0, conf_status = 0 e que o ocntato
|
|
|
|
|
* n<EFBFBD>o esteja em opera<EFBFBD><EFBFBD>o, ou seja, cont_id n<EFBFBD>o estaeja inserido na tabela pbx_canais_discando.
|
|
|
|
|
*/
|
|
|
|
|
$query = sprintf("select id, cmp_id, list_id, cont_id, conf_id, conf_fone from pbx_lista a where cmp_id = %s and cont_discado = '0' and conf_status = '0' and not exists(select '' from pbx_canais_discando where cont_id = a.cont_id) order by cont_peso, cont_id, conf_id limit %s", $infoDac['cmp_id'], $limitLigacoes);
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
AlimentaLog($query, 'ProcessarLista', 'Query Lista', 1);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, 'ProcessarLista', 'Query Lista Erro', 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while ($dados = mysql_fetch_array($result)) {
|
|
|
|
|
$infoCampanha['cmp_id'] = $dados['cmp_id'];
|
|
|
|
|
$infoCampanha['list_id'] = $dados['list_id'];
|
|
|
|
|
$infoCampanha['cont_id'] = $dados['cont_id'];
|
|
|
|
|
$infoCampanha['conf_id'] = $dados['conf_id'];
|
|
|
|
|
$infoCampanha['conf_fone'] = $dados['conf_fone'];
|
|
|
|
|
Originate($socket, $infoCampanha);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RemoveCanaisMortos();
|
|
|
|
|
if (CampanhaConcluida()) {
|
|
|
|
|
EncerraCampanha(CAMPANHA_CONCLUIDA);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RemoveCanaisMortos() {
|
|
|
|
|
$query = sprintf("select actionid from pbx_canais_discando a where cmp_id = '%s' and coalesce(uniqueid, '') = '' and (now() - data_atual) >= 3 ", IdCampanha());
|
|
|
|
|
$result = mysql_query($query);
|
|
|
|
|
AlimentaLog($query, 'RemoveCanaisMortos', 'select', 1);
|
|
|
|
|
if (!$result) {
|
|
|
|
|
AlimentaLog($query, 'RemoveCanaisMortos', 'select', 0, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while ($dados = mysql_fetch_row($result)) {
|
|
|
|
|
$actionid = $dados[0];
|
|
|
|
|
$query = sprintf("update pbx_canais_discando set uniqueid = %s where actionid = %s", $actionid, $actionid);
|
|
|
|
|
$resultCmd = mysql_query($query);
|
|
|
|
|
if (!$resultCmd) {
|
|
|
|
|
AlimentaLog($query, 'RemoveCanaisMortos', 'update', 0, 1);
|
|
|
|
|
} else {
|
|
|
|
|
RemoveCanal($actionid, CHAMADA_INVALIDA);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AddCanalDiscando($cmpId, $uniqueId, $canal) {
|
|
|
|
|
global $canaisDiscando;
|
|
|
|
|
$canaisDiscando[$cmpId][$uniqueId] = $canal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RemCanalDiscando($cmpId, $uniqueId) {
|
|
|
|
|
global $canaisDiscando;
|
|
|
|
|
$canaisDiscando[$cmpId][$uniqueId] = '0';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetCanalDiscando($cmpId, $uniqueId) {
|
|
|
|
|
global $canaisDiscando;
|
|
|
|
|
return !$canaisDiscando[$cmpId][$uniqueId] ? false : $canaisDiscando[$cmpId][$uniqueId];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Response: Success
|
|
|
|
|
ActionID: 24569179085636
|
|
|
|
|
Message: Originate successfully queued
|
|
|
|
|
|
|
|
|
|
Response: Error
|
|
|
|
|
ActionID: 245691790886185
|
|
|
|
|
Message: Invalid/unknown command
|
|
|
|
|
*/
|
|
|
|
|
?>
|