#!/usr/bin/php -q getMessage(), $pathLog); } if ($tipo == 'SUPERVISOR') { try { GravaLog(sprintf("### INICIO [%s] SUPERVISOR ###\n", ++$seq), $pathLog); $infoLgpd = ___GetInfoLgpd($ramal_agente, '0'); /* * Dial plan espcifico para supervisor. */ $canal_intercala = $argv[3]; $query = "update pbx_supervisor_agentes set lgpd_canal_supervisor = '$canal_intercala' where ramal = '$ramal_agente'"; if (!$result = pg_query($conexao, $query)) { $msg = "Erro ao registrar canal do suspervisor.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GeraExcept($msg); } /* * Registra a resposta do supervisor */ $repostaSupervisor = is_numeric($argv[2]) ? $argv[2] : '0'; $pLgpd = $infoLgpd['lgpd_lgpdm_id']; $query = "update pbx_lgpd_monitora set lgpdm_resposta_supervisor = '{$repostaSupervisor}', lgpdm_resposta_supervisor_reg = now() where lgpdm_id = '{$pLgpd}'"; if (!$result = pg_query($query)) { $msg = "Erro ao registrar a resposta do supervisor.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GeraExcept($msg); } GravaLog(sprintf("\n### FIM SUPERVISOR %s ###\n", ''), $pathLog); } catch (Exception $ex) { GravaLog($ex->getMessage(), $pathLog); } } else if ($tipo == 'INICIA') { GravaLog(sprintf("\n####INICIA [%s] ######\n", ++$seq), $pathLog); /* * Envia aviso para o monitorado. */ envia_aviso($conexao, $socket, $ramal_agente); GravaLog("envia_aviso Ramal Agnete: $ramal_agente\n", $pathLog); usleep(300000); /* * Envia aviso ao supervisor */ configura_features($conexao, $socket, $canal_agente, $features); GravaLog("configura_features Canal Agente: $canal_agente, Features: $features\n", $pathLog); usleep(300000); GravaLog(sprintf("\n### FIM INICIA %s ###\n", ''), $pathLog); } else if ($tipo == 'AGENTE') { GravaLog(sprintf("\n#### AGENTE [%s] ####\n", ++$seq), $pathLog); /* * o ramal do agente era obtido atraves da variavel callerid, entretanto quando * o sistema manipula este valor, torna-se necessário tentar obtelo da variavel * RAMAL criada pela aplicacao. */ write("GET VARIABLE RAMAL"); $ramal_var = substr(strrchr(read(), "("), 1, -1); $ramal_agente = ValidaRamalApl($ramal_var) ? $ramal_var : $agi['callerid']; $resposta = is_numeric(trim($argv[2])) ? $argv[2] : '0'; GravaLog(sprintf("ramal_agente = %s resposta = %s RAMAL = %s\n", $ramal_agente, $resposta, $ramal_var), $pathLog); /* * PARA LIGACOES RECEBIDAS NA FILA O CALLERID NAO EH O NUMERO DO RAMAL E PRECISA RECUPERAR O CANAL_INTERCALA PELA MATRICULA */ // $canal = $agi['channel']; // $agente = explode("/", $canal); // $matricula = $agente[1]; write("GET VARIABLE MATRICULA"); $matricula = substr(strrchr(read(), "("), 1, -1); GravaLog(sprintf("callerid = %s canal = %s\n", $agi['callerid'], $agi['channel']), $pathLog); $query = "select canal_agente, uniqueid2 from pbx_supervisor_agentes where (ramal = '$ramal_agente') or (matricula = '$matricula')"; if (!$result = pg_query($query)) { $msg = "Erro ao recuperar o ramal e canal intercala do agente na resposta 1.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GeraExcept($msg); } $dados = pg_fetch_row($result); $canal_agente = $dados[0]; $uid = $dados[1]; GravaLog("Reupera canal do agente: canal-agente: {$canal_agente} uid: {$uid} \n{$query}\n", $pathLog); /* * Registra a resposta do agente * */ $infoLgpd = ___GetInfoLgpd($ramal_agente, $matricula); $pLgpd = $infoLgpd['lgpd_lgpdm_id']; $query = "update pbx_lgpd_monitora set lgpdm_resposta_monitorado = '{$resposta}', lgpdm_uid = '{$uid}', lgpdm_resposta_monitorado_reg = now() where lgpdm_id = '{$pLgpd}'"; if (!$result = pg_query($query)) { $msg = "Erro ao registrar a resposta do agente.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GravaLog($msg, $pathLog); } GravaLog("Update Monitoria do agente: \n{$query}\n", $pathLog); /* * CASO O AGENTE AUTORIZE */ if ($resposta == '1') { try { write("STREAM FILE activated 0 0"); read(); /* * RECUPERA O RAMAL INTERCALA E CANAL INTERCALA GUARDADO TEMPORARIAMENTE NOS CAMPOS sala_1 E sala_2 * */ $query = "select lgpd_canal_supervisor from pbx_supervisor_agentes where (ramal = '$ramal_agente') or (matricula = '$matricula')"; if (!$result = pg_query($query)) { $msg = "Erro ao recuperar o ramal e canal intercala do agente na resposta 1.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GeraExcept($msg); } GravaLog("Resposta 1 canal do agente: \n{$query}\n", $pathLog); $dados = pg_fetch_row($result); $canal_intercala = $dados[0]; if (!$socket) { $msg = "Erro socket nao acessivel ao iniciar monitoria.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GeraExcept($msg); } inicia_monitora($conexao, $socket, $ramal_agente, $ramal_intercala, $canal_intercala); GravaLog("Chama inicia_monitora, canal-agente: {$canal_intercala} resposta agente = 1\n", $pathLog); } catch (Exception $ex) { GravaLog($ex->getMessage(), $pathLog); } } else { try { /* * CASO O AGENTE NAO AUTORIZE */ write("STREAM FILE de-activated 0 0"); read(); /* * RECUPERA O RAMAL INTERCALA E CANAL INTERCALA GUARDADO TEMPORARIAMENTE NOS CAMPOS sala_1 E sala_2 */ $query = "select lgpd_canal_supervisor from pbx_supervisor_agentes where (ramal = '$ramal_agente') or (matricula = '$matricula')"; if (!$result = pg_query($query)) { $msg = "Erro ao recuperar o ramal e canal intercala do agente na resposta = 2.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GeraExcept($msg); } $dados = pg_fetch_row($result); $canal_intercala = $dados[0]; hangup($socket, $canal_intercala); GravaLog("Chama hangup\n", $pathLog); } catch (Exception $ex) { GravaLog($ex->getMessage(), $pathLog); } } /* * Limpa variavel DYNAMIC_FEATURES */ configura_features($conexao, $socket, $canal_agente, ''); GravaLog("configura_features Canal Agente: $canal, Features: $features\n", $pathLog); usleep(300000); GravaLog(sprintf("\n### FIM AGENTE %s ###\n", ''), $pathLog); } else if ($tipo == 'FIM') { GravaLog(sprintf("\n####BLOCO FIM [%s] ####\n", ++$seq), $pathLog); $ramal_agente = $argv[2]; $infoLgpd = ___GetInfoLgpd($ramal_agente, '0'); $pLgpd = $infoLgpd['lgpd_lgpdm_id']; /* * Registra a resposta do agente * */ $query = "update pbx_lgpd_monitora set lgpdm_fim = now() where lgpdm_id = '{$pLgpd}' and lgpdm_fim is null"; if (!$result = pg_query($query)) { $msg = "Erro ao registrar a resposta do agente.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GravaLog($msg, $pathLog); } /* * Derruba o canal do supervisor. */ hangup($socket, $infoLgpd['lgpd_canal_supervisor']); GravaLog(sprintf("\n### FIM BLOCO FIM %s ###\n", ''), $pathLog); } } catch (Exception $ex) { GravaLog($ex->getMessage(), $pathLog); } ++$seq; GravaLog("\n\nFIM [{$seq}]\n\n", $pathLog); /* * Funcoes do script */ function conecta_ami($host, $porta, $usuario, $senha) { $timeout = 20; $socket = fsockopen($host, $porta, $errno, $errstr, $timeout); __fwrite($socket, "action: login\r\n", 'conecta_ami'); __fwrite($socket, "username: $usuario\r\n"); __fwrite($socket, "secret: $senha\r\n"); $actionid = rand(000000000, 9999999999); __fwrite($socket, "actionid: " . $actionid . "\r\n\r\n"); if ($socket) { while (!feof($socket)) { $bufer = fgets($socket); if (stristr($bufer, "Authentication accepted")) { return $socket; } elseif (stristr($bufer, "Authentication failed")) { fclose($socket); return false; } } } else { $arquivo = fopen('/var/log/manager_lgpd.log', 'a'); $data = date("d/m/Y H:i:s"); __fwrite($arquivo, "$data\n"); __fwrite($arquivo, "Script abortado,falha de conexao com o socket!!!\n\n"); fclose($arquivo); return false; } } function configura_features($conexao, $socket, $canal_agente, $features) { // // Log stdin // return true; __echoLog("DYNAMIC_FEATURES\n"); if ($features == 'originada') { $features = "app-monitora-aceita-origina#app-monitora-bloqueia-origina"; } else if ($features) { $features = "app-monitora-aceita-recebe#app-monitora-bloqueia-recebe"; } __fwrite($socket, "Action: Setvar\r\n", 'configura_features'); __fwrite($socket, "Channel: $canal_agente\r\n"); __fwrite($socket, "Variable: DYNAMIC_FEATURES\r\n"); __fwrite($socket, "Value: $features\r\n\r\n"); } function configura_lgpd($conexao, $socket, $canal_agente, $features) { // // Log stdin // __echoLog("LGPD_VAR\n"); __fwrite($socket, "Action: Setvar\r\n", 'configura_lgpd'); __fwrite($socket, "Channel: $canal_agente\r\n"); __fwrite($socket, "Variable: LGPD_VAR\r\n"); __fwrite($socket, "Value: $features\r\n\r\n"); } function envia_aviso($conexao, $socket, $ramal_agente) { // // log stdin // __echoLog("ENVIA_AVISO\n"); __fwrite($socket, "Action: Originate\r\n", 'envia_aviso'); __fwrite($socket, "Channel: Local/$ramal_agente@call-intercala-lgpd-inicia\r\n"); __fwrite($socket, "Exten: s\r\n"); __fwrite($socket, "Context: intercala-aviso\r\n"); __fwrite($socket, "Priority: 1\r\n\r\n"); } function hangup($socket, $canal_intercala) { // // log stdin // __echoLog("HANGUP-$canal_intercala\n"); __fwrite($socket, "Action: Hangup\r\n", 'hangup'); __fwrite($socket, "Channel: $canal_intercala\r\n\r\n"); } function inicia_monitora($conexao, $socket, $ramal_agente, $ramal_intercala, $canal_intercala) { //__fwrite($socket, "Action: Setvar\r\n"); //__fwrite($socket, "Channel: $canal_intercala\r\n"); //__fwrite($socket, "Variable: RAMAL\r\n"); //__fwrite($socket, "Value: $ramal_intercala\r\n\r\n"); //__fwrite($socket, "Action: Setvar\r\n"); //__fwrite($socket, "Channel: $canal_intercala\r\n"); //__fwrite($socket, "Variable: DESTINO\r\n"); //__fwrite($socket, "Value: $ramal_agente\r\n\r\n"); // // log stdin // __echoLog("INICIA_INTERCALA\n"); __fwrite($socket, "Action: Redirect\r\n", 'inicia_monitora'); __fwrite($socket, "Channel: $canal_intercala\r\n"); __fwrite($socket, "Exten: s\r\n"); __fwrite($socket, "Context: call-monitora\r\n"); __fwrite($socket, "Priority: 1\r\n\r\n"); } function limpa_features($conexao, $socket, $canal_agente, $features) { __fwrite($socket, "Action: Setvar\r\n", 'limpa_features'); __fwrite($socket, "Channel: $canal_agente\r\n"); __fwrite($socket, "Variable: DYNAMIC_FEATURES\r\n"); __fwrite($socket, "Value: \r\n\r\n"); } 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"; } function __echoLog($msg) { return false; //echo $msg; } function __fwrite($socket, $value, $function = '', $logOnly = false) { global $debug, $pathLog; $path = $pathLog; //sprintf("/var/log/asterisk/lgpd_ami_%s.log", date("Y-m-d")); if (!$logOnly) { fwrite($socket, $value); } if ($debug) { if ($function) { GravaLog("\n[$function]\n", $path); } if ($value) { GravaLog($value, $path); } } } function ___GetInfoLgpd($ramalAgente, $matriculaAgente) { global $pathLog; $query = "select tipo_ligacao, lgpd_canal_supervisor, lgpd_canal_monitorado, lgpd_lgpdm_id from pbx_supervisor_agentes where (matricula = '$matriculaAgente' or ramal = '$ramalAgente')"; GravaLog(sprintf("___GetInfoLgpd [%s]\n", $query), $pathLog); if (!$result = pg_query($query)) { $msg = "Erro ao recuperar canal do agente para hangup.\nCMD[{$query}]\nErro: " . ErrorGetLast(); GravaLog($msg, $pathLog); } return pg_fetch_array($result); } // clean up file handlers etc. fclose($in); fclose($stdlog); ?>