#!/usr/bin/php -q 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ã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úncio do Monitor, o nome da lista deve ser "Monitor 0800". */ if (!Monitor0800Check($dbcon)) { RaiseExcept("Verifique os parametros \"Anú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ão foi possí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çõ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ão foi recebida; * 1 -> Chamada Atendiada ok; * 9 -> A chamamada não saiu, portanto algum problema com o tronco de saida; */ $tplH = ''; $tplB = ''; $tplF = '

Verificação Ralizada para os seguintes números:

Número: {NUMERO}
Resultado: {RESULTADO}
Data: {DATA}

Suporte Técnico Simples IP

0800 006-8280
suporte@simplesip.com.br
www.simplesip.com.br

'; $tpl = ''; foreach ($dadosVerificacao as $key => $value) { switch ($value["result"]) { case 0: $msg = "

Verificação realizada, a chamada não completou pode indicar problema no 0800!

"; break; case 1: $msg = "

A verificação foi realizada com sucesso!

"; break; default: $msg = "

Falha na verificação, a chamda não foi realizada, pode indicar problemas com os troncos locais!

"; 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; }