|
|
#!/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); |
|
|
?>
|
|
|
|