#!/usr/bin/php -q 0 ? StrToIntDef($argv[1]) : 30; $path = "/var/log/asterisk/log_erro_pabx.log"; $log = ''; try { $socket = conecta_ami($hostSck, $portaSck, $usuarioSck, $senhaSck); if (!$socket) { RaiseExcept("Script abortado,falha de conexão com o socket!!!\n\n"); } $query = "select id, matricula,dac,extract(epoch from (now() - logado))::int as logado,ramal from pbx_supervisor_agentes order by id"; $result = pg_query($conexao, $query); while ($row = pg_fetch_array($result, null, PGSQL_ASSOC)) { $idAgente = $row['id']; $agente = trim($row['matricula']); $dac = trim($row['dac']); $logado = trim($row['logado']); $ramal = trim($row['ramal']); if ($logado >= $timeout_agente) { if ($socket) { logoff_agentes($socket, $agente); remove_agentes($conexao, $socket, $agente, $dac, $ramal, $idAgente); } else { remove_agentes($conexao, false, $agente, $dac, $ramal, $idAgente); } WriteLog(sprintf("Script: %s Data: %s Parans Socket: %s Remove: Agente: %s Dac: %s Ramal: %s Id: %s Param SCK: %s %s %s %s \n", $argv[0], date("Y-m-d H:m:i"), ($socket ? 'Ativo' : 'Inativo'), $agente, $dac, $ramal, $idAgente, $hostSck, $portaSck, $usuarioSck, $senhaSck), $path); } } fclose($socket); } catch (Exception $ex) { $log .= sprintf("Script: %s Data: %s Erro: %s \n", $argv[0], date("Y-m-d H:m:i"), $ex->getMessage()); WriteLog($log, $path); } function conecta_ami($host, $porta, $usuario, $senha) { $timeout = 3; $socket = fsockopen($host, $porta, $errno, $errstr, $timeout); fwrite($socket, "action: login\r\n"); fwrite($socket, "username: $usuario\r\n"); fwrite($socket, "secret: $senha\r\n"); fwrite($socket, "events: off\r\n"); $actionid = rand(000000000, 9999999999); fwrite($socket, "actionid: " . $actionid . "\r\n\r\n"); while (!feof($socket)) { $bufer = fgets($socket); if (stristr($bufer, "Authentication accepted")) { return $socket; } elseif (stristr($bufer, "Authentication failed")) { return false; } } return false; } function logoff_agentes($socket, $agente) { $actionid = rand(000000000, 9999999999); fwrite($socket, "Action: agentlogoff\r\n"); fwrite($socket, "agent: $agente\r\n"); fwrite($socket, "soft: false\r\n"); fwrite($socket, "ActionID: $actionid\r\n\r\n"); } function remove_agentes($conexao, $socket, $agente, $dac, $ramal, $idAgente) { global $logado, $path, $argv; $actionid = rand(000000000, 9999999999); if ($socket === false) { exec("asterisk -rx \"agent logoff {$agente} soft\"\n"); exec("asterisk -rx \"queue remove member Local/{$ramal}@app-callcenter/n from {$dac}\"\n"); } else { fwrite($socket, "Action: queueremove\r\n"); fwrite($socket, "queue: $dac\r\n"); fwrite($socket, "interface: Local/$ramal@app-callcenter/n\r\n"); fwrite($socket, "ActionID: $actionid\r\n\r\n"); } $query = "delete from pbx_supervisor_agentes where id = '$idAgente'"; $result = pg_query($conexao, $query); if (!$result) { RaiseExcept(sprintf("Cmd: [%s] Var:[Conexao: %s Socket: %s Matricula: %s Dac: %s Ramal: %s Erro: %s!!!\n", $query, ($conexao ? 'Sim' : 'Nao'), ($socket ? 'Conectado' : 'Desconectado'), $agente, $dac, $ramal, $erro)); } $log = sprintf("Script: %s Data: %s Msg: %s \n", $argv[0], date("Y-m-d H:m:i"), "Agente: $agente, Dac: $dac excluido, Tempo: $logado Interface: Local/$ramal@app-callcenter/n.\n\n"); WriteLog($log, $path); } ?>