|
|
|
|
#!/usr/bin/php -q
|
|
|
|
|
<?php
|
|
|
|
|
error_reporting(E_ERROR);
|
|
|
|
|
ini_set('display_errors', 0);
|
|
|
|
|
include("util/constantes.php");
|
|
|
|
|
include("util/util.php");
|
|
|
|
|
include("funcoes/shared.php");
|
|
|
|
|
include("bd.php");
|
|
|
|
|
include("util/funcoesAmi.php");
|
|
|
|
|
include("phpmailer/class.phpmailer.php");
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Habilita o log do ami.
|
|
|
|
|
*/
|
|
|
|
|
$debugAmi = 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Indica se a mensagem deve ser enviada sempre que houver uma verificacao
|
|
|
|
|
* ou apenas quando existir um erro.
|
|
|
|
|
*/
|
|
|
|
|
$enviaSomenteErro = true;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Log do sistema.
|
|
|
|
|
*/
|
|
|
|
|
$pathLog = "/var/log/asterisk/monitor_0800.log";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Captura numeros passados na linha de comando ou usa numeros atribuidos diretamente
|
|
|
|
|
*/
|
|
|
|
|
$numerosDiscar = array('08000068280', '08000068281');
|
|
|
|
|
$clienteNome = "Simples IP";
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Tipo de envio
|
|
|
|
|
* 1 -> E-mail
|
|
|
|
|
* 2 -> SMS
|
|
|
|
|
* 3 -> Telegram
|
|
|
|
|
* 4 -> Whatsapp
|
|
|
|
|
*/
|
|
|
|
|
$tipoEnvio = 1;
|
|
|
|
|
$destinos = array(
|
|
|
|
|
array("nome" => "Amarildo Pereira", "destino" => "amarildo.pereira@simplesip.com.br"),
|
|
|
|
|
array("nome" => "Higor F. Silva", "destino" => "higorfsudi@gmail.com"),
|
|
|
|
|
array("nome" => "Alan Pablo", "destino" => "alan.pablo@simplesip.com.br")
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// array("nome" => "Alan Pablo", "destino" => "alan.pablo@simplesip.com.br")
|
|
|
|
|
$paramsEnvio = array(
|
|
|
|
|
'email_smtp' => 'mail.simplesip.com.br',
|
|
|
|
|
'email_auth' => true,
|
|
|
|
|
'email_conta_envio' => 'marketing@simplesip.com.br',
|
|
|
|
|
'email_senha_envio' => '$m@rk2t3ng_#',
|
|
|
|
|
'email_port' => '587',
|
|
|
|
|
'email_retorno' => 'noreply@simplesip.com.br',
|
|
|
|
|
'email_retorno_nome' => 'Monitor 0800',
|
|
|
|
|
'email_envio' => null,
|
|
|
|
|
'email_envio_nome' => '',
|
|
|
|
|
'email_html' => true,
|
|
|
|
|
'email_assunto' => 'Monitoramento para 0800',
|
|
|
|
|
'email_body' => '',
|
|
|
|
|
'email_charset' => 'iso-8859-1',
|
|
|
|
|
'email_template' => '',
|
|
|
|
|
'email_template_info' => array()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (isset($argv[1])) {
|
|
|
|
|
$numerosDiscar = array();
|
|
|
|
|
for ($i = 1; $i < count($argv); $i++) {
|
|
|
|
|
$numero = soNumero($argv[$i]);
|
|
|
|
|
if ((substr($numero, 0, 4) == "0800") && (strlen($numero) == 11)) {
|
|
|
|
|
if (array_search($numero, $numerosDiscar) === false) {
|
|
|
|
|
$numerosDiscar[] = $numero;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Verifica se os pre-requisitos para o monitor estao cadastrados:
|
|
|
|
|
* 1 -> Um ramal n<EFBFBD>o registrado para o monitor no campo Callerid deve conter "Monitor 0800";
|
|
|
|
|
* 2 -> Um anuncio de silencio com o nome "Monitor 0800";
|
|
|
|
|
* 3 -> Lista Negra para interceptar a ligacao e direcionara para o an<EFBFBD>ncio do Monitor, o nome da lista deve ser "Monitor 0800".
|
|
|
|
|
*/
|
|
|
|
|
if (!Monitor0800Check($dbcon)) {
|
|
|
|
|
RaiseExcept("Verifique os parametros \"An<EFBFBD>ncio, Lista Negra e Ramal\" do monitor 0800 para continuar!");
|
|
|
|
|
}
|
|
|
|
|
$params = GetParamsMonitor0800($dbcon);
|
|
|
|
|
$ramal = $params['ramal'];
|
|
|
|
|
$numeroOrigem = $params['numero_origem'];
|
|
|
|
|
$idAnuncio = $params['id_anuncio'];
|
|
|
|
|
$maxBilhete = $params['id_bilhetes'];
|
|
|
|
|
|
|
|
|
|
if (!$socket = ConectaAmi()) {
|
|
|
|
|
RaiseExcept("N<EFBFBD>o foi poss<EFBFBD>vel conectar ao servidor!!!", true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$result = array();
|
|
|
|
|
foreach ($numerosDiscar as $numDisc) {
|
|
|
|
|
if (!AlarmeAmi($socket, "SIP/{$ramal}", $numDisc, $ramal)) {
|
|
|
|
|
$result[$numDisc] = array("result" => 9, "data" => date("d/m/Y H:i:s"));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
sleep(10);
|
|
|
|
|
$result[$numDisc] = MonitorVerificaRetorno($dbcon, $numeroOrigem, $idAnuncio, $maxBilhete);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!$enviaSomenteErro || GetErro0800($result)) {
|
|
|
|
|
/*
|
|
|
|
|
* Formata o email para envio, de acordo com os resultados
|
|
|
|
|
* coletados no teste.
|
|
|
|
|
*/
|
|
|
|
|
$paramsEnvio["email_body"] = GetMsg0800($result);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Envias as informa<EFBFBD><EFBFBD>es de acordo com o metodo escolhido.
|
|
|
|
|
*/
|
|
|
|
|
EnviaNotificacao($dbcon, $paramsEnvio, $destinos, $tipoEnvio);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
GravaLog($ex->getMessage(), $pathLog);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Monitor0800Check($db) {
|
|
|
|
|
$query = "select count(*) from (
|
|
|
|
|
select '' from pbx_sip_ramais where UPPER(callerid) = 'MONITOR 0800'
|
|
|
|
|
union all
|
|
|
|
|
select '' from pbx_anuncios where UPPER(nome) = 'MONITOR 0800'
|
|
|
|
|
union all
|
|
|
|
|
select '' from pbx_listanegra where UPPER(nome) = 'MONITOR 0800'
|
|
|
|
|
) as monitor;";
|
|
|
|
|
$result = pg_query($db, $query);
|
|
|
|
|
$row = pg_fetch_row($result);
|
|
|
|
|
return ((int) $row[0] === 3);
|
|
|
|
|
/*
|
|
|
|
|
select nome from pbx_sip_ramais where UPPER(callerid) = 'MONITOR 0800';
|
|
|
|
|
select id from pbx_anuncios where UPPER(nome) = 'MONITOR 0800';
|
|
|
|
|
select numero from pbx_listanegra where UPPER(nome) = 'MONITOR 0800';
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetParamsMonitor0800($db) {
|
|
|
|
|
$query = "select (select coalesce(max(id_bilhetes), 0) from ast_bilhetes) as id_bilhetes, (select trim(callerid2) from pbx_sip_ramais where UPPER(callerid) = 'MONITOR 0800' ) as numero_origem, (select nome from pbx_sip_ramais where UPPER(callerid) = 'MONITOR 0800') as ramal, ('a' || (select id from pbx_anuncios where UPPER(nome) = 'MONITOR 0800')) as id_anuncio";
|
|
|
|
|
$result = pg_query($db, $query);
|
|
|
|
|
$row = pg_fetch_array($result, null, PGSQL_ASSOC);
|
|
|
|
|
|
|
|
|
|
return $row;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function MonitorVerificaRetorno($db, $numeroOrigem, $idAnuncio, &$maxBilhete) {
|
|
|
|
|
global $pathLog;
|
|
|
|
|
$query = sprintf("select id_bilhetes from ast_bilhetes where src = '%s' and dst = '%s' and id_bilhetes > '%s' ;", $numeroOrigem, $idAnuncio, $maxBilhete);
|
|
|
|
|
$result = pg_query($db, $query);
|
|
|
|
|
|
|
|
|
|
if (pg_num_rows($result)) {
|
|
|
|
|
$row = pg_fetch_array($result, null, PGSQL_ASSOC);
|
|
|
|
|
$maxBilhete = $row["id_bilhetes"];
|
|
|
|
|
return array("result" => 1, "data" => date("d/m/Y H:i:s"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return array("result" => 0, "data" => date("d/m/Y H:i:s"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function EnviaNotificacao($dbcon, $paramsEnvio, $destinos, $tipoEnvio) {
|
|
|
|
|
/*
|
|
|
|
|
* Tipo de envio
|
|
|
|
|
* 1 -> E-mail
|
|
|
|
|
* 2 -> SMS
|
|
|
|
|
* 3 -> Telegram
|
|
|
|
|
* 4 -> Whatsapp
|
|
|
|
|
*/
|
|
|
|
|
foreach ($destinos as $dadosDestino) {
|
|
|
|
|
$paramsEnvio["email_envio_nome"] = $dadosDestino["nome"];
|
|
|
|
|
$paramsEnvio["email_envio"] = $dadosDestino["destino"];
|
|
|
|
|
switch ($tipoEnvio) {
|
|
|
|
|
case 1:
|
|
|
|
|
$result = SendEmail($paramsEnvio);
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
$result = SendSMS($paramsEnvio);
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
$result = SendTelegram($paramsEnvio);
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
$result = SendWhatsapp($paramsEnvio);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$result = SendEmail($paramsEnvio);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* As funcoes quando executadas com sucesso devem retornar "true" para que a verificacao
|
|
|
|
|
* funcione, qualquer valor diferente sera considerado uma mensagem de erro.
|
|
|
|
|
*/
|
|
|
|
|
if (!($result === true)) {
|
|
|
|
|
GravaLog($result, $pathLog);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetMsg0800($dadosVerificacao) {
|
|
|
|
|
/*
|
|
|
|
|
* $dadosVerificacao = array("result" => 9, "data" => date("d/m/Y H:i:s"));
|
|
|
|
|
* "result":
|
|
|
|
|
* 0 -> Discou para o 0800 mas a chamda n<EFBFBD>o foi recebida;
|
|
|
|
|
* 1 -> Chamada Atendiada ok;
|
|
|
|
|
* 9 -> A chamamada n<EFBFBD>o saiu, portanto algum problema com o tronco de saida;
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
$tplH = '<table cellspacing="2" cellpadding="3" border="0" style="font-family:Arial; padding: 3; margin: 0; color:black;min-width: 600px">
|
|
|
|
|
<tr>
|
|
|
|
|
<td align="left">
|
|
|
|
|
<h1 style="font-family:Arial; font-weight:bold;font-size:large; color:black;">Verifica<EFBFBD><EFBFBD>o Ralizada para os seguintes n<EFBFBD>meros:</h1>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>';
|
|
|
|
|
|
|
|
|
|
$tplB = '<tr>
|
|
|
|
|
<td align="left">
|
|
|
|
|
<table width="100%" cellspacing="0" cellpadding="3" border="1" style="font-family:Arial; padding: 3; margin: 5px; color:black;width: 100%;">
|
|
|
|
|
<tr>
|
|
|
|
|
<th align="left" width="180">N<EFBFBD>mero:</th>
|
|
|
|
|
<td align="left">{NUMERO}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th align="left">Resultado:</th>
|
|
|
|
|
<td align="left">{RESULTADO}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<th align="left">Data:</th>
|
|
|
|
|
<td align="left">{DATA}</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>';
|
|
|
|
|
$tplF = ' <tr>
|
|
|
|
|
<td align="left">
|
|
|
|
|
<h3 style="font-family:Arial; font-weight:bold;font-size:large; color:black;">Suporte T<EFBFBD>cnico Simples IP</h3>
|
|
|
|
|
<p style="font-family:Arial; font-size:medium; color:black;"><strong>0800 006-8280</strong><br/>
|
|
|
|
|
<em>suporte@simplesip.com.br</em><br/>
|
|
|
|
|
<strong>www.simplesip.com.br</strong></p>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>';
|
|
|
|
|
|
|
|
|
|
$tpl = '';
|
|
|
|
|
foreach ($dadosVerificacao as $key => $value) {
|
|
|
|
|
|
|
|
|
|
switch ($value["result"]) {
|
|
|
|
|
case 0: $msg = "<p>Verifica<EFBFBD><EFBFBD>o realizada, a chamada n<EFBFBD>o completou pode indicar problema no 0800!</p>";
|
|
|
|
|
break;
|
|
|
|
|
case 1: $msg = "<p>A verifica<EFBFBD><EFBFBD>o foi realizada com sucesso!</p>";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
$msg = "<p>Falha na verifica<EFBFBD><EFBFBD>o, a chamda n<EFBFBD>o foi realizada, pode indicar problemas com os troncos locais!<p>";
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
$tpl .= $tplB;
|
|
|
|
|
$tpl = str_replace("{NUMERO}", $key, $tpl);
|
|
|
|
|
$tpl = str_replace("{RESULTADO}", $msg, $tpl);
|
|
|
|
|
$tpl = str_replace("{DATA}", $value["data"], $tpl);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $tplH . $tpl . $tplF;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetErro0800($dadosVerificacao) {
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* A chave result com valor 9 indica um erro na discagem(tronco local)
|
|
|
|
|
* A chave result com valor 0 indica problema no 0800.
|
|
|
|
|
*/
|
|
|
|
|
foreach ($dadosVerificacao as $key => $value) {
|
|
|
|
|
if (($value["result"] == 0) || ($value["result"] == 9)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|