|
|
|
|
#!/usr/bin/php -q
|
|
|
|
|
<?php
|
|
|
|
|
include('bd.php');
|
|
|
|
|
include_once('util/constantes.php');
|
|
|
|
|
include_once('util/util.php');
|
|
|
|
|
include_once('funcoes/shared.php');
|
|
|
|
|
|
|
|
|
|
ob_implicit_flush(true);
|
|
|
|
|
set_time_limit(6);
|
|
|
|
|
$in = fopen("php://stdin", "r");
|
|
|
|
|
$stdlog = fopen("/var/log/asterisk/agente_fila.log", "w");
|
|
|
|
|
|
|
|
|
|
// toggle debugging output (more verbose)
|
|
|
|
|
$debug = true;
|
|
|
|
|
|
|
|
|
|
function read() {
|
|
|
|
|
global $in, $debug, $stdlog;
|
|
|
|
|
$input = str_replace("\n", "", fgets($in, 4096));
|
|
|
|
|
if ($debug)
|
|
|
|
|
fputs($stdlog, "read: $input\n");
|
|
|
|
|
return $input;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function errlog($line) {
|
|
|
|
|
global $err;
|
|
|
|
|
echo "VERBOSE \"$line\"\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function write($line) {
|
|
|
|
|
global $debug, $stdlog;
|
|
|
|
|
if ($debug)
|
|
|
|
|
fputs($stdlog, "write: $line\n");
|
|
|
|
|
echo $line . "\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// parse agi headers into array
|
|
|
|
|
while ($env = read()) {
|
|
|
|
|
$s = explode(": ", $env);
|
|
|
|
|
$agi[str_replace("agi_", "", $s[0])] = trim($s[1]);
|
|
|
|
|
if (($env == "") || ($env == "\n")) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Se for atendida por um membro estatico (ramal) encerra o script
|
|
|
|
|
write("GET VARIABLE MEMBERINTERFACE");
|
|
|
|
|
$MEMBERINTERFACE = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
$AGENTE = explode("@", $MEMBERINTERFACE);
|
|
|
|
|
$DISPOSITIVO = $AGENTE[1];
|
|
|
|
|
$RAMALLOCAL = $AGENTE[0];
|
|
|
|
|
$RAMALAGENTE = explode("/", $RAMALLOCAL);
|
|
|
|
|
$RAMAL= $RAMALAGENTE[1];
|
|
|
|
|
|
|
|
|
|
if ($DISPOSITIVO != 'app-callcenter/n') {
|
|
|
|
|
exit;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
write("GET VARIABLE DAC");
|
|
|
|
|
$fila = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
|
|
|
|
|
//Verifica se a ligacao atendida foi realizada por um agente
|
|
|
|
|
//write("GET VARIABLE CONSULTA");
|
|
|
|
|
//$consulta = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
//
|
|
|
|
|
//write("GET VARIABLE TRANSFER");
|
|
|
|
|
//$transfer = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
|
|
|
|
|
write("GET VARIABLE IDORIGEM");
|
|
|
|
|
$IDORIGEM = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
|
|
|
|
|
write("GET VARIABLE MEMBERNAME");
|
|
|
|
|
$MEMBERNAME = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
$MATRICULAAGENTE = explode("/", $MEMBERNAME);
|
|
|
|
|
$MATRICULA = $MATRICULAAGENTE[1];
|
|
|
|
|
|
|
|
|
|
write("SET VARIABLE MATRICULA $MATRICULA");
|
|
|
|
|
read();
|
|
|
|
|
|
|
|
|
|
write("DATABASE DEL CANAL $MATRICULA/$IDORIGEM");
|
|
|
|
|
read();
|
|
|
|
|
|
|
|
|
|
write("SET VARIABLE MATRICULA_RETORNO $MATRICULA");
|
|
|
|
|
read();
|
|
|
|
|
|
|
|
|
|
write("SET VARIABLE ATENDIDA_FILA SIM");
|
|
|
|
|
read();
|
|
|
|
|
|
|
|
|
|
$CANAL = $agi["channel"];
|
|
|
|
|
$FONE = $agi["callerid"];
|
|
|
|
|
$UNIQUEID = $agi["uniqueid"];
|
|
|
|
|
$UNIQUEID_CALLBACK = $IDORIGEM;
|
|
|
|
|
|
|
|
|
|
write("SET VARIABLE FILA $fila");
|
|
|
|
|
read();
|
|
|
|
|
|
|
|
|
|
write("GET VARIABLE URA");
|
|
|
|
|
$URA = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
|
|
|
|
|
write("GET VARIABLE CALLERID(name)");
|
|
|
|
|
$TRONCO = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
|
|
|
|
|
write("GET VARIABLE CDR(answer)");
|
|
|
|
|
$dataBilhete = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
|
|
|
|
|
$dataBilhete = sprintf("'%s'", $dataBilhete);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Trata classifica<EFBFBD><EFBFBD>o
|
|
|
|
|
* Verifica se a classifica<EFBFBD><EFBFBD>o esta ativa
|
|
|
|
|
* Verifica se <EFBFBD> exigida a classifica<EFBFBD><EFBFBD>o
|
|
|
|
|
*/
|
|
|
|
|
/*
|
|
|
|
|
* A chamada da funcao esta com uma varaivel nao definida "$classifica" e um aconstante nao definida "FILA".
|
|
|
|
|
* VerificaClassificacao($conexao, $fila, $MATRICULA, $RAMAL, $UNIQUEID, $classifica, FILA);
|
|
|
|
|
*/
|
|
|
|
|
$classifica = 1;
|
|
|
|
|
VerificaClassificacao($conexao, $fila, $MATRICULA, $RAMAL, $UNIQUEID, $classifica, 'ENTRANTE');
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se o dac possui pausa automatica
|
|
|
|
|
*/
|
|
|
|
|
$query = "select count(*) from pbx_pausa_automatica where iddac = (select id from pbx_queues_grupos where nome = '$fila')";
|
|
|
|
|
$result = pg_query($conexao, $query);
|
|
|
|
|
$dados = pg_fetch_row($result);
|
|
|
|
|
if ($dados[0]) {
|
|
|
|
|
write("EXEC PauseQueueMember ,$MEMBERINTERFACE");
|
|
|
|
|
read();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Fun<EFBFBD><EFBFBD>o retorna numero de Protocolo de Atendimento para o agente
|
|
|
|
|
*/
|
|
|
|
|
$protocolo=GeraProtocolo($conexao, $UNIQUEID);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Pesquisa se existe informa<EFBFBD>oes retornadas pela integra<EFBFBD><EFBFBD>o ativa.
|
|
|
|
|
*/
|
|
|
|
|
$identificador = '';
|
|
|
|
|
$query = "select retorno_cliente from pbx_integracao_reg where (reg_uniqueid = '$UNIQUEID' or reg_uniqueid_old = '$UNIQUEID_CALLBACK')";
|
|
|
|
|
$result = @pg_query($query);
|
|
|
|
|
if (pg_num_rows($result)) {
|
|
|
|
|
$dados = pg_fetch_array($result);
|
|
|
|
|
$identificador = $dados['retorno_cliente'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Modo de atendimento
|
|
|
|
|
*/
|
|
|
|
|
$query = "select upper(a.modo_atendimento) as modo_atendimento, a.ramal, b.id as fila_id, a.canal_agente from pbx_supervisor_agentes a, pbx_dacs b where b.nome = a.dac and matricula = '$MATRICULA'";
|
|
|
|
|
$result = @pg_query($query);
|
|
|
|
|
$dados = pg_fetch_array($result);
|
|
|
|
|
$automatico = $dados[0] != 'MANUAL';
|
|
|
|
|
$ramalAgente = $dados['ramal'];
|
|
|
|
|
$filaId = $dados['fila_id'];
|
|
|
|
|
$displayFone = $FONE . '-' . $TRONCO;
|
|
|
|
|
$canalAgente = $dados['canal_agente'];
|
|
|
|
|
|
|
|
|
|
$query = "update pbx_supervisor_agentes set status = 'OCUPADO', duracao = 'now()', origem_destino = '$displayFone', canal = '$CANAL', uniqueid = '$UNIQUEID', uniqueid2 = '$UNIQUEID', cont_identificador = '$identificador', tipo_ligacao = 'E', protocolo = '$protocolo' where matricula = '$MATRICULA' and dac = '$fila'";
|
|
|
|
|
pg_query($query);
|
|
|
|
|
|
|
|
|
|
write("GET VARIABLE MATRICULA-ORIGEM");
|
|
|
|
|
$MATRICULAORIGEM = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
if ($MATRICULAORIGEM) {
|
|
|
|
|
// write("GET VARIABLE EPOCH");
|
|
|
|
|
// $inicio=substr(strrchr(read(),"("),1,-1);
|
|
|
|
|
// write("SET VARIABLE INICIO_ATENDIMENTO $inicio");
|
|
|
|
|
// read();
|
|
|
|
|
// write("DATABASE PUT INICIO_ATENDIMENTO $IDORIGEM $inicio");
|
|
|
|
|
// read();
|
|
|
|
|
// write("GET VARIABLE FILA-ORIGEM");
|
|
|
|
|
// $FILAORIGEM = substr(strrchr(read(), "("), 1, -1);
|
|
|
|
|
|
|
|
|
|
write("EXEC Macro eventos-conecta-agente,$canalAgente,$UNIQUEID");
|
|
|
|
|
read();
|
|
|
|
|
|
|
|
|
|
// $query = "update pbx_supervisor_agentes set status = 'OCUPADO', canal = (select canal_agente from pbx_supervisor_agentes where matricula = '$MATRICULA') where matricula = '$MATRICULAORIGEM' and dac = '$FILAORIGEM'";
|
|
|
|
|
// pg_query($query);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$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 = 3 and a.reg_uniqueid = '$UNIQUEID'";
|
|
|
|
|
$result = @pg_query($query);
|
|
|
|
|
write($query);
|
|
|
|
|
|
|
|
|
|
if (pg_num_rows($result)) {
|
|
|
|
|
/*
|
|
|
|
|
* Armazena o ramal do agente
|
|
|
|
|
*/
|
|
|
|
|
$row = pg_fetch_row($result);
|
|
|
|
|
$idMetodo = $row[0];
|
|
|
|
|
$filaId = $filaId . '-' . $fila;
|
|
|
|
|
if (!$TRONCO)
|
|
|
|
|
$TRONCO = 0;
|
|
|
|
|
$protoAgente = str_replace('-', '', $proto);
|
|
|
|
|
if (!$URA) {
|
|
|
|
|
$URA = 0;
|
|
|
|
|
}
|
|
|
|
|
$str = sprintf("/var/lib/asterisk/scripts/integracao/eventoIntegra.php %s %s %s %s %s %s %s %s %s %s %s > /dev/null &", $idMetodo, $UNIQUEID, $MATRICULA, $ramalAgente, $FONE, $TRONCO, $filaId, $protoAgente, $URA, $dataBilhete, 'E');
|
|
|
|
|
write($str);
|
|
|
|
|
@exec($str);
|
|
|
|
|
$query = "update pbx_integracao_reg set reg_ramal = '$ramalAgente' where reg_uniqueid = '$UNIQUEID'";
|
|
|
|
|
$result = @pg_query($query);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Identifica o ramal que atendeu a fila
|
|
|
|
|
//JA FOI IDENTIFICADO NO INICIO DO SCRIPT ATRAVES DA VARIAVEL MEMBERINTERFACE POIS UTILIZA NA VerificaClassificacao
|
|
|
|
|
//$query = "select ramal from pbx_supervisor_agentes where matricula = '$MATRICULA' and dac = '$fila'";
|
|
|
|
|
//$result = @pg_query($query);
|
|
|
|
|
//$dados = pg_fetch_row($result);
|
|
|
|
|
//$RAMAL = $dados[0];
|
|
|
|
|
|
|
|
|
|
if (!$RAMAL) {
|
|
|
|
|
$RAMAL = explode('/', $MEMBERINTERFACE);
|
|
|
|
|
$RAMAL = $RAMAL[1];
|
|
|
|
|
$RAMAL = explode('@', $RAMAL);
|
|
|
|
|
$RAMAL = $RAMAL[0];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query = "insert into ast_bilhetes_complemento (uniqueid2,direcao,destino) values ('$UNIQUEID','fila-ramal','$RAMAL')";
|
|
|
|
|
$result = @pg_query($conexao, $query);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
write("SET VARIABLE __RAMALAGENTE $RAMAL"); //PARA O QUE EH UTILIZADO???
|
|
|
|
|
read();
|
|
|
|
|
|
|
|
|
|
// clean up file handlers etc.
|
|
|
|
|
fclose($in);
|
|
|
|
|
fclose($stdlog);
|
|
|
|
|
?>
|