|
|
#!/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; |
|
|
}
|
|
|
|