forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
6.2 KiB
181 lines
6.2 KiB
2 years ago
|
<?php
|
||
|
|
||
|
/*
|
||
|
* Autor: Amarildo Pereira.
|
||
|
* Data: 02/07/2020
|
||
|
* Objetivo: Verificar regras da Anatel para televendas.
|
||
|
* Regra 1: As chamdas deverao serem feitas dentro do horario estipulado pela Anatel.
|
||
|
* Regra 2: Um numero so pode receber 2(duas) ligacoes no mesmo dia.
|
||
|
* Regra 3: Um numero so pode receber 15(quinze) ligacoes dentro do mes.
|
||
|
*
|
||
|
* Tabelas para acompanhamento.
|
||
|
-- drop table pbx_televendas_bloqueio
|
||
|
create table pbx_televendas_bloqueio(
|
||
|
tlvb_id bigserial not null primary key,
|
||
|
tlvb_mes int not null default extract('month' from now()),
|
||
|
tlvb_data date not null default now()::date,
|
||
|
src varchar(18),
|
||
|
dst varchar(18),
|
||
|
tlvb_status int,
|
||
|
tlvb_msg varchar(255),
|
||
|
data_reg timestamp not null default now()
|
||
|
);
|
||
|
|
||
|
create index "idxPbxTelevendasBloqueioDst" on pbx_televendas_bloqueio(dst);
|
||
|
create index "idxPbxTelevendasBloqueioDstData" on pbx_televendas_bloqueio(dst,tlvb_data);
|
||
|
create index "idxPbxTelevendasBloqueioSrc" on pbx_televendas_bloqueio(src);
|
||
|
create index "idxPbxTelevendasBloqueioMes" on pbx_televendas_bloqueio(tlvb_mes);
|
||
|
create index "idxPbxTelevendasBloqueioData" on pbx_televendas_bloqueio(tlvb_data);
|
||
|
|
||
|
-- drop table pbx_televendas_reg
|
||
|
create table pbx_televendas_reg(
|
||
|
tlvb_id bigserial not null primary key,
|
||
|
tlvb_mes int not null default extract('month' from now()),
|
||
|
tlvb_data date not null default now()::date,
|
||
|
src varchar(18),
|
||
|
dst varchar(18),
|
||
|
tlvb_status int,
|
||
|
tlvb_msg varchar(255),
|
||
|
data_reg timestamp not null default now()
|
||
|
);
|
||
|
|
||
|
create index "idxPbxTelevendasRegDst" on pbx_televendas_reg(dst);
|
||
|
create index "idxPbxTelevendasRegDstData" on pbx_televendas_bloqueio(dst,tlvb_data);
|
||
|
create index "idxPbxTelevendasRegSrc" on pbx_televendas_reg(src);
|
||
|
create index "idxPbxTelevendasRegMes" on pbx_televendas_reg(tlvb_mes);
|
||
|
create index "idxPbxTelevendasRegData" on pbx_televendas_reg(tlvb_data);
|
||
|
*
|
||
|
* Status:
|
||
|
* 1 => 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;
|
||
|
}
|