bloqueio por horario. * 2 => bloqueio por exceder tentativas diarias. * 3 => bloqueio por exceder tentativas mensais. */ /* * Define o numero de tentativas diaria e Mensal. */ define("TLVB_MAX_DIA", 2); define("TLVB_MAX_MES", 15); define("TLVB_BLQ_HORARIO", 1); define("TLVB_BLQ_DIARIA", 2); define("TLVB_BLQ_MENSAL", 3); $pathLogTlvb = "/var/log/asterisk/televendas_bloqueio.log"; WriteLog("Iniciando checagem de regras Anatel.", $pathLogTlvb); /* * Menagens de som. */ $logOperErro = $pathSom . 'ligacaoinvalidaanatel'; $logBlqHorario = $pathSom . 'horarionaopermitidoanatel'; $logBlqDiario = $pathSom . 'limitdiarioanatel'; $logBlqMensal = $pathSom . 'limitemensalanatel'; /* * Regras de horario. */ $ini = strtotime("09:00"); $fim = strtotime("21:00"); $hr[0] = array(strtotime("00:00"), strtotime("00:00")); // Domingo $hr[1] = array($ini, $fim); //Segunda $hr[2] = array($ini, $fim); //Terca $hr[3] = array($ini, $fim); //Quarta $hr[4] = array($ini, $fim); //Quinta $hr[5] = array($ini, $fim); //Sexta $hr[6] = array(strtotime("10:00"), strtotime("16:00")); //Sabado try { $dataAtual = date("Y-m-d"); $mesAtual = date('m'); $diaSemana = date("w"); $horaAtual = strtotime(date("H:i")); $src = TlvbGetRaml($agi); $iniVal = $hr[$diaSemana][0]; $fimVal = $hr[$diaSemana][1]; WriteLog("Parametros configurados, iniciando checagem no banco de dados.", $pathLogTlvb); /* * Verifica o bloqueio por horario. */ if (($horaAtual < $iniVal) || ($horaAtual > $fimVal )) { $query = sprintf("insert into pbx_televendas_bloqueio(src,dst,tlvb_status)values('%s','%s','%s');", $src, $numeroConsulta, TLVB_BLQ_HORARIO); if (!$result = pg_query($query)) { throw new Exception("Nao foi possivel registra o bloqueio por horario: cmd: {$query}"); } TlvbBloqueio($logBlqHorario); } /* * Verifia bloqueio por tentativa diaria. */ $query = "select count(*) as num_dia from pbx_televendas_bloqueio where dst = '{$numeroConsulta}' and tlvb_data = '{$dataAtual}' and tlvb_status = '0'"; if (!$result = pg_query($query)) { throw new Exception("Nao foi possivel consultar o numero: {$numeroConsulta}!"); } $row = pg_fetch_row($result); $numTentativas = $row[0]; if ($numTentativas >= TLVB_MAX_DIA) { $query = sprintf("insert into pbx_televendas_bloqueio(src,dst,tlvb_status)values('%s','%s','%s');", $src, $numeroConsulta, TLVB_BLQ_DIARIA); if (!$result = pg_query($query)) { throw new Exception("Nao foi possivel registra o bloqueio por tentativa diaria: cmd: {$query}"); } TlvbBloqueio($logBlqDiario); } /* * Verifia bloqueio por tentariva diaria. */ $query = "select count(*) as num_dia from pbx_televendas_bloqueio where dst = '{$numeroConsulta}' and tlvb_mes = '{$mesAtual}' and tlvb_status = '0'"; if (!$result = pg_query($query)) { throw new Exception("Nao foi possivel consultar o numero: {$numeroConsulta}!"); } $row = pg_fetch_row($result); $numTentativas = $row[0]; if ($numTentativas >= TLVB_MAX_MES) { $query = sprintf("insert into pbx_televendas_bloqueio(src,dst,tlvb_status)values('%s','%s','%s');", $src, $numeroConsulta, TLVB_BLQ_MENSAL); if (!$result = pg_query($query)) { throw new Exception("Nao foi possivel registra o bloqueio por tentativa mensal: cmd: {$query}"); } TlvbBloqueio($logBlqMensal); } WriteLog("Registrando a chamada para chacagem futura.", $pathLogTlvb); /* * Nao ha bloquio, registra a ligacao */ $query = sprintf("insert into pbx_televendas_bloqueio(src,dst,tlvb_status)values('%s','%s','%s');", $src, $numeroConsulta, '0'); if (!$result = pg_query($query)) { throw new Exception("Nao foi possivel registra o bloqueio por horario: cmd: {$query}"); } } catch (Exception $ex) { WriteLog($ex->getMessage(), $pathLogTlvb); TlvbBloqueio($logOperErro); } function TlvbGetRaml($agi) { /* * Pega a origem. */ write("GET VARIABLE RAMAL"); $ramal = substr(strrchr(read(), "("), 1, -1); if (!$ramal) { $ramal = $agi["callerid"]; } return $ramal; } function TlvbBloqueio($audio) { /* * Executa audio padrao para o usuario. */ $audio = trim($audio); write("EXEC Playback $audio"); read(); write("HANGUP"); read(); exit; }