Browse Source

updates

master
Lucas Ayala 2 years ago
parent
commit
7556f0a318
  1. 432
      Clientes/O2 Telecom/Integracao.php
  2. 929
      Clientes/O2 Telecom/IntegracaoDataBase.php
  3. 157
      Clientes/O2 Telecom/Logger.php
  4. 258
      Clientes/O2 Telecom/SimpleMail.php
  5. 32
      Clientes/O2 Telecom/abreAtendimento.php
  6. 355
      Clientes/O2 Telecom/conf.php
  7. 6
      Clientes/O2 Telecom/confRotas.php
  8. 82
      Clientes/O2 Telecom/config.php
  9. 69
      Clientes/O2 Telecom/consultaCliente.php
  10. 33
      Clientes/O2 Telecom/consultaPendencia.php
  11. 30
      Clientes/O2 Telecom/desbloqueiaCliente.php
  12. 33
      Clientes/O2 Telecom/email.html
  13. 35
      Clientes/O2 Telecom/enviaFatura.php
  14. 38
      Clientes/O2 Telecom/funcoesCustom.php
  15. 518
      Clientes/O2 Telecom/install.php
  16. 25
      Clientes/O2 Telecom/paradaTecnica.php
  17. 8
      Clientes/O2 Telecom/reload.php
  18. 19
      Clientes/SIMPLESIP_MOVIDESK/abdAgi.php
  19. 31
      Clientes/SIMPLESIP_MOVIDESK/movideskAbdAgi.php
  20. 4
      Clientes/TipBank/Integracao.php
  21. 2
      Clientes/TipBank/IntegracaoDataBase.php
  22. 1
      Clientes/TipBank/TipBank.php
  23. 4
      Clientes/TipBank/config.php
  24. 14
      Clientes/TipBank/protocolo.php
  25. 27
      Clientes/Titania/ISPIntegrator.php
  26. 16
      Clientes/Titania/desbloqueiaCliente.php
  27. 38
      Clientes/Titania/teste.php
  28. 25
      Clientes/onlineCertificadora/AbandonadaChamada.php
  29. 432
      Clientes/onlineCertificadora/Integracao.php
  30. 929
      Clientes/onlineCertificadora/IntegracaoDataBase.php
  31. 157
      Clientes/onlineCertificadora/Logger.php
  32. 430
      Clientes/onlineCertificadora/Movidesk.php
  33. 258
      Clientes/onlineCertificadora/SimpleMail.php
  34. 27
      Clientes/onlineCertificadora/completaChamada.php
  35. 6
      Clientes/onlineCertificadora/confRotas.php
  36. 75
      Clientes/onlineCertificadora/config.php
  37. 26
      Clientes/onlineCertificadora/registraChamada.php
  38. 31
      Clientes/onlineCertificadora/transfereChamada.php
  39. 1
      DefaultClass.php
  40. 555
      audio.php

432
Clientes/O2 Telecom/Integracao.php

@ -0,0 +1,432 @@
<?php
require_once 'phpagi/phpagi.php';
require_once 'IntegracaoDataBase.php';
require_once 'Logger.php';
require_once 'SimpleMail.php';
require_once 'conf.php';
// include("util/util.php");
/*
|*************************************************************************
| SISTEMA UNICO DE INTEGRACAO *
|*************************************************************************
*/
/**
* Classe para implementacao das integracoes da Simples IP
* @author Lucas Awade
* @Desenvolvedor
* @SimplesIP
* @version 1.1.1
*/
class Integracao {
protected $log;
protected $mail;
private $agi;
private $db;
########################################################################
## CONSTANTES DA CLASSE ##
########################################################################
const PATH_SOUND = '/var/lib/asterisk/sounds/customizados/';
const AGI_ERROR_HANDLER = false;
########################################################################
## FUNCOES UTILITARIAS ##
########################################################################
/**
* - Retorno é os dados referentes ao retornado da API
* - Params são os dados que serão disponibilizados na tela do agente.
*
* @param array $retorno
* @param array $params
*/
public function integracaoAgente($retorno, $params) {
$registros = 0;
$data = $this->db()->getRegistros();
$retorno_cliente = "{$data['reg_uniqueid']}|{$data['reg_fone']}|{$data['id']}|";
foreach ($retorno as $key => $value) {
if (in_array($key, $params)) {
$registros++;
$retorno_cliente .= sprintf("%s:%s",
strtoupper(str_replace("_", " ", $key)),
strtoupper(str_replace("|", "", $value)));
if (count($params) > $registros) {
$retorno_cliente .= "|";
}
}
}
$this->db()->setRegistros(array('retorno_cliente' => $retorno_cliente));
}
/**
* Converte um CPF ou CNPJ com marcara referente a cada modelo.
*
* @param string $string
* @return boolean|string
*/
protected function mask_cpf_cnpj($string) {
if (!empty($string)) {
if (strlen($string) == 11) {
$mask = "%s%s%s.%s%s%s.%s%s%s-%s%s";
} elseif (strlen($string) == 14) {
$mask = "%s%s.%s%s%s.%s%s%s/%s%s%s%s-%s%s";
}
return vsprintf($mask, str_split($string));
} else {
return false;
}
}
/**
* Retorna telefone com o (DDD)Numero de acordo com o parametro passado caso nao possua DDD sera o padrao da central.
* @param string $telefone
* @return array
*/
protected function mask_phone_tel($telefone) {
$retorno = array('telefone' => '', 'type' => '');
if (strlen($telefone) == 11) {
$numero_1 = substr($telefone, 2, 5);
$numero_2 = substr($telefone, 7, 4);
$ddd = substr($telefone, 0, 2);
$telefone = "({$ddd}) " . $numero_1 . '-' . $numero_2;
$retorno['telefone'] = $telefone;
$retorno['type'] = 'celular';
} else if (strlen($telefone) == 12) {
$ddd = substr($telefone, 1, 2);
$numero = substr($telefone, 3, 10);
$telefone = sprintf("(%s) %s", $ddd, $numero);
$retorno['telefone'] = $telefone;
$retorno['type'] = 'telefone';
} else if (strlen($telefone) == 13) {
$ddd = substr($telefone, 2, 2);
$numero = substr($telefone, 4, 10);
$telefone = "(" . $ddd . ") " . $numero;
$retorno['telefone'] = $telefone;
$retorno['type'] = 'celular';
} else if (strlen($telefone) == 10) {
$numero_1 = substr($telefone, 2, 4);
$numero_2 = substr($telefone, 6, 9);
$ddd = substr($telefone, 0, 2);
$telefone = "({$ddd}) " . $numero_1 . '-' . $numero_2;
$retorno['telefone'] = $telefone;
$retorno['type'] = 'fixo';
} else {
return null;
}
return $retorno;
}
/**
* Verifica se todos os parametros passados foram completados.
*
* @param array $args
* @return true|false
*/
protected function getArgs($args) {
foreach ($args as $value) {
if (!$value) {
return false;
}
}
return true;
}
/**
* Verifica a diferenca em dias entre a data de entrada e a data atual.
*
* @param type $dateParam
* @return type
*/
public function dateDiff($dateParam) {
$dateIni = strtotime(date('Y-m-d'));
if (strstr($dateParam, "/")) {
$dateParam = date(strtotime(str_replace('/', '-', $dateParam)));
} else {
$dateParam = date(strtotime($dateParam));
}
$diff = ($dateIni - $dateParam);
$days = (int) floor($diff / (60 * 60 * 24));
return $days;
}
/**
* Realiza a conversao de datas no formato brasileiro para a Defualt.
* @param string $data
* @return string|boolean
*/
public function convertDateDefault($data) {
if ($data) {
$data = explode('/', $data);
return "{$data[2]}-{$data[1]}-{$data[0]}";
}
return false;
}
/**
* Realiza a validação de pendencia financeira de acordo com a data informada
*
* OBS: O array deve possui nível = array( array('data' => 'yyyy-mm-dd'))
* OBS: O indice deve ser o nome do valor onde se encontra a data.
* @param array $array
* @param string $indice
* @param string $datavalida
* @return boolean
*/
public function verificaDataPendencia($array, $indice, $datavalida = null) {
if (!$datavalida) {
$datavalida = strototime(date('Y-m-d'));
} else {
$datavalida = strtotime($datavalida);
}
foreach ($array as $value) {
if (strtotime($value[$indice]) < $datavalida) {
return false;
}
}
return true;
}
/**
* Adiciona mascara no telefone para realizar a consulta
*
* @param type $value
* @return boolean
*/
protected function phoneMask($value) {
if (!empty($value)) {
if (strlen($value) == 10) {
$mask = '(%s%s)%s%s%s%s-%s%s%s%s';
} elseif (strlen($value) == 11) {
$mask = '(%s%s)%s%s%s%s%s-%s%s%s%s';
}
return vsprintf($mask, str_split($value));
} else {
return false;
}
}
/**
* Verifica se um servidor esta dando resposta de ping
* @param type $ip
* @return boolean
*/
public function verificaLatencia($ip) {
$ping = explode(",", shell_exec("ping -c 4 $ip"));
$latencia = substr($ping[1], 1, 2); //resposta do ping
if ($latencia >= 2) {
return true;
}
return false;
}
/**
* Verbaliza digitos
* @param string|int $string
*/
public function verbaliza($string) {
$vocaliza = str_split($string);
foreach ($vocaliza as $value) {
$this->agi()->say_digits($value);
}
}
/*
* Objetct to array
*/
public function objectToArray($d) {
if (is_object($d)) {
$d = get_object_vars($d);
}
if (is_array($d)) {
return array_map($this->objectToArray(), $d);
} else {
return $d;
}
}
############################################################################
######## CONFIGURACAO DE EMAIL ########
############################################################################
/**
* Inicia a instanciacao da Classe para envio de Email
* @param string $email
* @param string $password
* @param string $subject
*/
public function SimpleMail($email, $password, $subject) {
$this->mail = new SimpleMail($email, $password, $subject);
$this->log->debug("Instanciacao SimpleMail : " . ($this->mail ? "SUCCESS" : "FAIL"), debug_backtrace());
}
/**
* Configura o servidor de Envio dos Emails.
* @param string $host
* @param string|int $port
* @param string $title
* @return boolean
*/
public function confSMTP($host, $port, $title, $smtpAuth = true, $smtpSecure = 'TLS', $charset = 'UTF8') {
$this->log->debug("Configuracao SMTP", debug_backtrace());
if ($this->mail) {
$this->mail->config($host, $port, $title, $smtpAuth, $smtpSecure, $charset);
} else {
return false;
}
}
public function geraProtocoloSimples($uid){
$connPG = $this->db()->getConnection();
$protoAgente = GeraProtocolo($connPG, $uid);
return $protoAgente;
}
########################################################################
## FUNCOES IMPORTANTES ##
########################################################################
/**
* Instancia um objeto de Logger.
*
* @param Logger $log
*/
protected function setLog($log = false) {
if (!$this->log) {
$this->log = new Logger(CONF_LOGGER_PATH . CONF_NOME_EMPRESA, $log);
}
}
/**
* Retorna o objeto de Log.
* @return string
*/
public function log() {
return $this->log;
}
/**
* Instancia um objeto de AGI para se conectar com as informações do Asterisk.
*
* @return AGI
*/
public function agi() {
if (!$this->agi) {
$data = $this->db()->getAuthAgi();
$config = array();
$config['phpagi']['error_handler'] = self::AGI_ERROR_HANDLER;
$config['asmanager']['server'] = $data['host_sck'];
$config['asmanager']['port'] = $data['porta_sck'];
$config['asmanager']['username'] = $data['usuario_sck'];
$config['asmanager']['secret'] = $data['senha_sck'];
$agi = new AGI('phpagi.conf', $config);
$this->agi = $agi;
return $agi;
}
return $this->agi;
}
private function readAgiVariable() {
ob_implicit_flush(true);
set_time_limit(6);
$in = fopen("php://stdin", "r");
$input = str_replace("\n", "", fgets($in, 4096));
fclose($in);
$this->log->debug("Reading: " . $input);
return $input;
}
public function getAgiVariable($variable = null) {
$this->log->debug("Executing...", debug_backtrace());
while ($env = $this->readAgiVariable()) {
$s = explode(": ", $env);
$agi[str_replace("agi_", "", $s[0])] = trim($s[1]);
$this->log->debug("Data: " . print_r($agi, true), debug_backtrace());
if (($env == "") || ($env == "\n")) {
break;
}
}
$this->log->debug("Reading: " . print_r($agi, true));
if (!$variable || $agi[$variable]) {
return !$variable ? $agi : $agi[$variable];
}
return false;
}
/**
* Instancia um objeto de IntegracaoDataBase para se conectar com dados do
* Banco de dados e credenciais do Manager.
*
* @return IntegracaoDataBase
*/
public function db() {
if (!$this->db) {
$db = new IntegracaoDataBase();
$this->db = $db;
}
return $this->db;
}
protected function audioError() {
$this->log->debug('Audio de error');
$exten = $this->db()->getAnuncio();
$this->log->error('Encaminhando para áudio alternativo de Erros', debug_backtrace());
$this->agi()->exec_goto($exten);
exit();
}
protected function integracaoReg(){
global $ura, $tronco, $uid, $idMetodo, $uidOld, $numero;
$registros = array(
"id" => '',
"reg_ura" => $ura,
"reg_tronco" => $tronco,
"reg_uniqueid" => $uid,
"reg_id_metodo" => $idMetodo,
"reg_uniqueid" => $uid,
"reg_uniqueid_old" => $uidOld,
"reg_fone" => $numero,
"reg_status_exec" => '1',
"reg_inicio" => date());
$this->db()->setRegistros($registros);
if (CONF_AUDIO_ERROR) {
$this->db()->setIdAudioError($this->db()->getAnuncioIdByName(strtoupper(CONF_AUDIO_ERROR.CONF_NOME_EMPRESA.CONF_VERSAO)));
}
}
public function executarFluxo($tipo, $nome){
#INEGRACAO DE TELA
if(CONF_INTEGRACAO_TELA){
$parametrosTela = unserialize(CONF_PARAMETROS_TELA);
$itgcTela = array();
$itgcTelaNomes = array();
foreach($parametrosTela as $parametro){
$itgcTela[$parametro] = str_replace(array("|",":"),"-",utf8_decode($this->agi()->get_variable($parametro, true)));
$itgcTelaNomes[] = "$parametro";
}
$this->integracaoAgente($itgcTela, $itgcTelaNomes);
}
$dbFunction = "get".ucfirst(strtolower($tipo));//CONTRUIR NOME FUNCAO BUSCAR ID
$this->agi()->exec_goto($this->db()->$dbFunction(strtoupper($nome)));//REDIRECIONAR FLUXO
$this->db()->atualizaIntegracao();
}
}

929
Clientes/O2 Telecom/IntegracaoDataBase.php

@ -0,0 +1,929 @@
<?php
require_once 'Logger.php';
// *************************************************************************
// * SISTEMA UNICO DE INTEGRACAO *
// *************************************************************************
/**
* Classe para utilizar os registros do Banco de Dados;
*
* OBS: Deixar como usuario de execucao e acesso pbx:pbx
*
* @author Lucas Awade
* @function developer
* @company SimplesIP
* @version 1.0.1
*/
class IntegracaoDataBase {
private $query;
private $connection;
private $registros;
private $log;
private $credentials = array();
private $debug;
private $idAudioError;
/**
* @file
* Arquivo de configuracoes do banco e manager
*/
const FILE_DB = "/var/www/html/include/bd";
public function __construct() {
$this->log = new Logger(CONF_LOGGER_PATH, CONF_LOGGER_DB_ATIVO);
}
/**
* Retorna os registros armazenados na variavel registros pra ser disponibilizado
* no decorrer de uma integracao;
*
* @return array
*/
public function getRegistros() {
return $this->registros;
}
/**
* Informações coletadas do banco de dados para ser escritas no log.
*
* @param array $array
*/
private function logResult($array) {
if ($array) {
$this->log->success(print_r($array, true), $this->debug);
} else {
$this->log->warning('Nenhum resultado encontrado!', $this->debug);
}
}
/**
* Audio de erro padrao
*
* @param string $idAudioError
*/
public function setIdAudioError($idAudioError) {
$this->idAudioError = $idAudioError;
}
########################################################################
## BANCO DE DADOS ##
########################################################################
/**
* Pega as informacoes das credenciais no arquivos padrao "bd";
*/
private function filedb() {
if (file_exists(self::FILE_DB)) {
$contents = fopen(self::FILE_DB, 'r');
while (!feof($contents) && $contents) {
$str = fgets($contents);
$dados = explode('=', $str);
$this->credentials[strtolower($dados[0])] = str_replace('"', '', $dados[1]);
}
fclose($contents);
$this->credentials = array_filter($this->credentials);
$this->log->debug("Credenciais banco de dados: " . print_r($this->credentials, true), debug_backtrace());
} else {
$this->log->error("Nao foi possivel encontrar o arquivo 'bd' em " . self::FILE_DB);
}
}
/**
* Executa as querys da consulta a serem feitas, além de gravar logs de registros de dados,
* e qualquer erro é repassado a classe que está executando para tratar o erro;
*
* @param string $type
* @return boolean|array
*/
private function execute($type = '') {
try {
if (!$this->connection) {
$this->connection = $this->getConnection();
}
$result = pg_query($this->connection, $this->query);
switch (strtolower($type)) {
case 'assoc':
$data = pg_fetch_assoc($result);
break;
case 'row':
$data = pg_fetch_row($result);
break;
case 'array':
$data = pg_fetch_array($result);
break;
case 'all':
$data = pg_fetch_all($result);
break;
}
$this->logResult($data);
return $data;
} catch (Exception $ex) {
$this->log->error("Exception: {$ex->getMessage()} | Postgres : " . pg_last_error(), $this->debug);
}
}
public function getConnection() {
$this->filedb();
$this->connection = pg_connect(sprintf('host=%s port=%s dbname=%s user=%s password=%s', $this->credentials['host_db'], $this->credentials['porta_db'], $this->credentials['base_db'], $this->credentials['usuario'], $this->credentials['senha']));
if (pg_connection_status($this->connection) === 0) {
$this->log->success("Conectado na base {$this->credentials['base_db']}.", debug_backtrace());
return $this->connection;
} else {
throw new Exception('Nao foi possivel conectar na base de dados');
}
}
private function getPDO() {
try {
if (!$this->connection) {
$drive = CONF_DB_DRIVER;
$host = CONF_DB_HOST;
$dbname = CONF_DB_BASE;
$user = CONF_DB_USER;
$pass = CONF_DB_PASSWD;
$this->connection = new pdo("$drive:host=$host;dbname=$dbname", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
protected function strquery($stmt, $params) {
foreach ($params as $key => $value) {
if (!$value || $value == "null") {
$value = null;
}
$stmt->bindValue(":{$key}", $value, (is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR));
}
}
public function read($query, $params) {
try{
$this->getPDO();
$stmt = $this->connection->prepare($query);
$this->strquery($stmt, $params);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $data;
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
public function create($query, $params) {
try{
$this->getPDO();
$stmt = $this->connection->prepare($query);
$this->strquery($stmt, $params);
$stmt->execute();
$data = $this->connection->lastInsertId();
return $data;
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
public function delete($query, $params) {
try{
$this->getPDO();
$stmt = $this->connection->prepare($query);
$this->strquery($stmt, $params);
$stmt->execute();
$count = $stmt->rowCount();
$data = (!$count) ? false : true;
return $data;
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
public function update($query, $params) {
try{
$this->getPDO();
$stmt = $this->connection->prepare($query);
$this->strquery($stmt, $params);
$stmt->execute();
$count = $stmt->rowCount();
$data = (!$count) ? false : true;
return $data;
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
########################################################################
## ASTERISK ##
########################################################################
/**
* Coleta em qual Asterisk a central está rodadando e retorna o modelo padrao
* de configuracao do exten;
*
* @return string
*/
private function getVersionAsterisk() {
$result = array();
exec("asterisk -V", $result);
$this->log->info("Versao Asterisk: " . $result[0], debug_backtrace());
if (strpos($result[0], '1.4') !== false) {
return "|";
} else {
return ",";
}
}
/**
* Transforma uma string exten com "," para "|" de acordo com a versao do Asterisk
*
* @param string $string
* @return string
*/
private function string_exten($string) {
return str_replace(",", $this->getVersionAsterisk(), $string);
}
/**
* Coleta os dados de autenticacao do manager.
*
* @return array
*/
public function getAuthAgi() {
$data = array();
foreach ($this->credentials as $key => $value) {
if (strpos($key, '_sck') !== false) {
$data[$key] = $value;
}
}
return $data;
}
########################################################################
## QUERYS ##
########################################################################
/**
* Inicia um Transacao;
*/
public function beginTransaction() {
$this->debug = debug_backtrace();
$this->query = "BEGIN;";
$this->execute();
}
/**
* Registra uma Transacao.
*/
public function commitTransaction() {
$this->debug = debug_backtrace();
$this->query = "COMMIT;";
$this->execute();
}
/**
* Retorna as informacoes antes da Transacao.
*/
public function rollbackTransaction() {
$this->debug = debug_backtrace();
$this->query = "ROLLBACK;";
$this->execute();
}
/**
* Busca o DDD padrao cadastrado na central.
*
* @param string $name
* @return string
*/
public function getDDD() {
$this->debug = debug_backtrace();
$this->query = "SELECT prm_ddd_padrao FROM pbx_parametros";
return $this->execute('assoc') ? $this->execute('assoc')['prm_ddd_padrao'] : '';
}
/**
* Consulta no banco o nome do Anuncio e retorna o ID para ser escrito no exten;
*
* @param string $name
* @return string
*/
public function getAnuncio($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_anuncios WHERE nome = '$name'";
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError;
return sprintf($this->string_exten('ext-anuncios,a%s,1'), $result);
}
/**
* Consulta no banco o nome do Ura e retorna o ID para ser escrito no exten;
*
* @param string $name
* @return string
*/
public function getUra($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_ura WHERE nome = '$name'";
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError;
return sprintf($this->string_exten('ura-%s,s,1'), $result);
}
/**
* Consulta no banco a Ura por ID e retorna suas informacoes;
*
* @param string|int $id
* @return string
*/
public function getURAById($id) {
$this->debug = debug_backtrace();
$this->query = "SELECT * FROM pbx_ura WHERE id = '{$id}'";
$result = $this->execute('assoc') ? $this->execute('assoc') : $this->idAudioError;
return $result;
}
/**
* Consulta no banco o nome do Fila e retorna o ID para ser escrito no exten;
*
* @param string $name
* @return string
*/
public function getFila($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT numero FROM pbx_dacs WHERE nome = '$name'";
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError;
return sprintf($this->string_exten('ext-fila,%s,1'), $result);
}
/**
* Consulta no banco o nome do Ramal e retorna o ID para ser escrito no exten;
*
* @param string $name
* @return string
*/
public function getRamal($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_ramais WHERE nome = '$name'";
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError;
return sprintf($this->string_exten('ext-ramais,%s,1'), $result);
}
/**
* Coleta as opcoes que o usuario passou nas uras da sua chamada.
*
* @param string $uniqueid
* @param int $ura_id
* @return boolean|array
*/
public function getOptionsURA($uniqueid, $ura_id) {
$this->debug = debug_backtrace();
$this->query = "SELECT umv_ura_id,umv_ura_nome,uniqueid,umv_ura_opcao "
. "FROM pbx_ura_movimento WHERE uniqueid = '$uniqueid' "
. "AND umv_ura_opcao IS NOT NULL AND umv_opcao = 'ura' "
. "AND umv_ura_id = $ura_id "
. "ORDER BY umv_id";
return $this->execute('all');
}
/**
* Retorna o ID e Data Hora da primeira entrada da ligacao em um URA de
* acordo com o uniqueid;
* @param string $uniqueid
* @return array
*/
public function getFristURA($uniqueid) {
$this->debug = debug_backtrace();
$this->query = "SELECT destino, min(data_registro) "
. "FROM ast_bilhetes_complemento "
. "WHERE direcao = 'ura' "
. "AND uniqueid2 = '{$uniqueid}' GROUP BY destino LIMIT 1";
$result = $this->execute('assoc');
return $result;
}
public function registraIntegracao() {
$this->debug = debug_backtrace();
/**
* Parametros REGISTROS
*
* id -> Id do qual gerou a integracao para o retorno_cliente
*
* Todos os parametros devem ser igual a da tabela pbx_integracao_reg
*/
$ura = trim($this->registros['reg_ura']) ? trim($this->registros['reg_ura']) : 'null';
$tronco = trim($this->registros['reg_tronco']) ? trim($this->registros['reg_tronco']) : 'null';
$this->query = "INSERT INTO pbx_integracao_reg (reg_id_metodo,reg_uniqueid,reg_uniqueid_old,reg_fone,reg_inicio, reg_tronco, reg_ura)
SELECT * FROM (
SELECT {$this->registros['reg_id_metodo']},'{$this->registros['reg_uniqueid']}','{$this->registros['reg_uniqueid_old']}','{$this->registros['reg_fone']}', now(), '$tronco', '$ura') AS dados
WHERE NOT EXISTS (
SELECT reg_uniqueid FROM pbx_integracao_reg WHERE reg_uniqueid = '{$this->registros['reg_uniqueid']}'
) LIMIT 1;";
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
public function atualizaIntegracao() {
$this->debug = debug_backtrace();
$tronco = trim($this->registros['reg_tronco']) ? sprintf(",\nreg_tronco='%s'", trim($this->registros['reg_tronco'])) : '';
$ura = trim($this->registros['reg_ura']) ? sprintf(",\nreg_ura='%s'", trim($this->registros['reg_ura'])) : '';
$reg_msg = QuotedStr($this->registros['reg_msg']);
$reg_retorno = QuotedStr($this->registros['reg_fone']);
$retorno_cliente = substr($this->registros['retorno_cliente'], 0, 255);
$this->query = "UPDATE pbx_integracao_reg
SET reg_fim = NOW(),
reg_retorno = $reg_retorno,
reg_msg = $reg_msg,
reg_status_exec = '{$this->registros['reg_status_exec']}',
retorno_cliente = '{$retorno_cliente}'{$tronco}{$ura}
WHERE reg_uniqueid = '{$this->registros['reg_uniqueid']}'";
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/**
* Informa os dados para ser inseridos na tabela de integracao_reg;
*
* @param array $registros
*/
public function setRegistros($registros) {
if (is_array($registros) && !$this->registros) {
$this->registros = $registros;
$this->registraIntegracao();
} else {
foreach ($registros as $key => $value) {
$this->registros[$key] = $value;
}
}
}
/**
* Retorna todas as informacoes da tabela Supervisor_Dacs
* @param array $dacs
* @return array
*/
public function getSupervisorDAC($dacs = array()) {
$this->query = "SELECT * FROM pbx_supervisor_dacs ";
if ($dacs) {
$this->query .= sprintf("WHERE id IN (%s)", implode(",", $dacs));
}
return $this->execute('all');
}
/**
* Retorna credenciais cadastradas nos metodos de integracao
* @param int $id
* @return array
*/
public function getConexaoAPI($id) {
$this->query = "SELECT itgc_nome AS name, itgc_port AS id_user, itgc_host AS url,
itgc_database AS token, itgc_user AS user, itgc_password AS password,
itgc_timeout AS timeout
FROM pbx_integracao_configuracao
WHERE itgc_id = {$id}";
return $this->execute('assoc');
}
public function getScriptCredenciais($script) {
$this->query = "SELECT itgc_nome AS name, itgc_port AS id_user, itgc_host AS url,
itgc_database AS token, itgc_user AS user, itgc_password AS password,
itgc_timeout AS timeout
FROM pbx_integracao_configuracao a
INNER JOIN pbx_integracao_metodo b ON a.itgc_id = b.itgc_id
WHERE itgm_comando = '{$script}'";
return $this->execute('assoc');
}
public function getFilaPorNome($name) {
$this->debug = debug_backtrace();
$this->query = "SELECT * FROM pbx_dacs WHERE nome = '$name'";
return $this->execute('assoc');
}
public function getLastUraPorUniqueid($uniqueid) {
$this->query = "SELECT data_reg, umv_ura_id,umv_ura_nome,uniqueid,umv_ura_opcao
FROM pbx_ura_movimento WHERE uniqueid = '{$uniqueid}'
ORDER BY data_reg DESC
LIMIT 1";
return $this->execute('assoc');
}
public function getUraMovimentoByUniqueid($uniqueid, $orderByAtt = "data_reg", $orderByType = "ASC") {
$this->query = "SELECT data_reg, umv_ura_id,umv_ura_nome,uniqueid,umv_ura_opcao, umv_opcao
FROM pbx_ura_movimento WHERE uniqueid = '{$uniqueid}'
ORDER BY $orderByAtt $orderByType
LIMIT 1";
return $this->execute('assoc');
}
public function atualizaProtocoloParceiro($uid, $protocoloParceiro) {
$this->debug = debug_backtrace();
$this->query = "UPDATE pbx_protocolo_reg
SET protoparceiro='$protocoloParceiro'
WHERE uniqueid='$uid'";
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
########################################################################
#### INSTALACAO INTEGRACAO ####
########################################################################
public function findIntegracaoCustom() {
$this->debug = debug_backtrace();
$this->query = "SELECT itgp_id FROM pbx_integracao_protocolo WHERE itgp_descricao = 'Custom'";
$this->log->debug("Query: {$this->query}", $this->debug);
$return = $this->execute('assoc');
if (!$return['itgp_id']) {
$this->query = "INSERT INTO pbx_integracao_protocolo (itgt_id,itgp_id,itgp_descricao,itgp_status,itgp_prefix) VALUES(1,6,'Custom',0,'custom');";
$this->execute('assoc');
}
return 6;
}
public function findVersion($empresa = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT MAX(itgc_status) AS versao FROM pbx_integracao_configuracao where 1=1";
if($empresa){
$this->query .= "AND itgc_nome like '%$empresa%'";
}
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute('assoc');
}
public function createIntegracaoAtiva($nome, $versao, $comando) {
$this->debug = debug_backtrace();
$query = "insert into pbx_integracao_metodo(itgc_id, itgm_nome, itgm_comando, itgm_tipo, itgm_retorno, itgm_status, opcao, evento, stored_params, itgm_id_pai) values(%s,'%s','%s',%s,%s,%s,'%s',%s,'%s',%s) returning itgm_id;";
$this->query = "INSERT INTO pbx_integracao_configuracao "
. "(itgt_id, itgp_id, itgc_nome, itgc_host, itgc_port, itgc_database, itgc_user, itgc_password, itgc_timeout, itgc_status) "
. "VALUES (1, 6, '$nome', '127.0.0.1', '0', '0', '0', '0', '10', '$versao') RETURNING itgc_id; ";
$this->log->debug("Query: {$this->query}", $this->debug);
$return = $this->execute('assoc');
$this->query = sprintf($query, $return['itgc_id'], $nome, $comando, 1, 1, 0, 'anuncios', 'null', 'null', 'null');
$res = $this->execute('assoc');
unset($this->query);
for ($x = 2; $x < 4; $x++) {
$this->query .= sprintf($this->query, $return['itgc_id'], 'NOEXEC', 'NOEXEC', 1, 0, 0, 'null', $x, 'null', $res['itgm_id']);
}
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute('assoc');
}
/* Consulta no banco o nome da integracao metodo e retorna o ID;
*
* @param string $name
* @return string
*/
public function getIntegracaoMetodoByNameIntegracao($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT pim.itgm_id
FROM pbx_integracao_metodo pim INNER JOIN pbx_integracao_configuracao pic on pic.itgc_id = pim.itgc_id
WHERE pim.itgm_retorno = 1 AND pic.itgc_nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
######################### ANUNCIOS #########################
/*
* Inserir Anuncio
*/
public function addAnuncio($nome, $musica, $opcao = null, $acao = null) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_anuncios (nome, musica, opcao, acao)
VALUES('%s','%s','%s', '%s')", $nome, $musica, strtolower($opcao), $acao);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/* Consulta no banco o nome do Anuncio e retorna o ID;
*
* @param string $name
* @return string
*/
public function getAnuncioIdByName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_anuncios WHERE nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
/* Consulta no banco o id do Anuncio e retorna o nome;
*
* @param string $name
* @return string
*/
public function getAnuncioNameById($id = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_anuncios WHERE id = '$id'";
$result = $this->execute('row')[0];
return $result;
}
/* Atualiza no banco a acao e opcao do Anuncio;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateAnuncio($opcao, $acao, $id) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_anuncios
SET opcao='%s', acao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### URAS #########################
/*
* Inserir Ura
*/
public function addUra($nome, $som_ura, $tempo_espera = 5, $timeout_digito = 3, $permite_ligacao = 'N', $opcao = null, $acao = null) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_ura (nome, permite_ligacao, tempo_espera, som_ura, opcao, acao, timeout_digito)
VALUES('%s', '%s', %d, '%s', '%s', %d, '%s')", $nome, $permite_ligacao, $tempo_espera, $som_ura, strtolower($opcao), $acao, $timeout_digito);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/* Consulta no banco o nome do Ura e retorna o ID;
*
* @param string $name
* @return string
*/
public function getUraIdByName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_ura WHERE nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
/* Consulta no banco o ID do Ura e retorna o nome;
*
* @param string $name
* @return string
*/
public function getUraNameById($id = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_ura WHERE id = '$id'";
$result = $this->execute('row')[0];
return $result;
}
/* Atualiza no banco acao e opcao do Ura;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateUra($id, $opcao, $acao) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_ura
SET opcao='%s', acao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### URAS DESTINO #########################
/*
* Inserir Ura Destino
*/
public function addUraDestino($id_ura, $numero, $tipo, $comando = null, $sequencia, $nome_comando) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_ura_destino
(id_ura, numero, tipo, comando, sequencia, nome_comando)
VALUES(%d, '%s', '%s', '%s', %d, '%s')", $id_ura, $numero, $tipo, $comando, $sequencia, $nome_comando);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute(s);
}
/* Consulta no banco o nome do Ura e retorna os destinos;
*
* @param string $name
* @return string
*/
public function getUraDestinosIdByUraName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT pud.* FROM pbx_ura_destino pud inner join pbx_ura pu on pu.id = pud.id_ura WHERE pu.nome ='$name'";
$result = $this->execute('all');
return $result;
}
/* Atualiza no banco acao e opcao do Ura;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateUraDestino($opcao, $acao, $id) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_ura
SET opcao='%s', acao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### HORARIOS #########################
/*
* Inserir Horario
*/
public function addHorario($nome, $opcao = null, $acao = null, $status = 1) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_horarios
(nome, opcao_nao, acao_nao, status)
VALUES('%s', '%s', %d, %d)", $nome, strtolower($opcao), $acao, $status);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/* Consulta no banco o nome do Horario e retorna o ID;
*
* @param string $name
* @return string
*/
public function getHorarioIdByName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_horarios WHERE nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
/* Consulta no banco o ID do Horario e retorna o nome;
*
* @param string $name
* @return string
*/
public function getHorarioNameById($id = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_horarios WHERE nome = '$id'";
$result = $this->execute('row')[0];
return $result;
}
/* Atualiza no banco opcao e acao do Horario;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateHorario($id, $opcao, $acao) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_horarios
SET opcao_nao='%s', acao_nao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### HORARIOS ITENS #########################
/*
* Inserir Horario
*/
public function addHorarioItens($id_horario, $horario_ini = '08:00', $horario_fim = '17:59', $dias_semana = 0, $semana = 'mon', $semana_fim = 'fri', $opcao = null, $acao = null) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_horarios_itens
(id_horario, horario_inicio, horario_fim, todos_dias_semana, semana, semana_fim, opcao, acao)
VALUES(%d, '%s', '%s', %d, '%s', '%s', '%s', '%s')", $id_horario, $horario_ini, $horario_fim, $dias_semana, $semana, $semana_fim, $opcao, $acao);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/* Consulta no banco o nome do Horario retornar Horario Itens;
*
* @param string $name
* @return string
*/
public function getHorarioItensByHorarioName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT phi.* FROM pbx_horarios_itens phi INNER JOIN pbx_horarios ph ON ph.id = phi.id_horario WHERE ph.nome = '$name'";
$result = $this->execute('all');
return $result;
}
/* Atualiza no banco a opcao e acao do Horario Item;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateItemHorario($opcao, $acao, $id) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_horarios_itens
SET opcao='%s', acao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### FILAS #########################
/* Consulta no banco o nome da Fila e retorna o numero;
*
* @param string $name
* @return string
*/
public function getFilaNumeroByName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT numero FROM pbx_queues_grupos WHERE nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
/* Consulta no banco o numero da Fila e retorna o Nome;
*
* @param string $name
* @return string
*/
public function getFilaNameByNumero($numero = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_queues_grupos WHERE numero = '$numero'";
$result = $this->execute('row')[0];
return $result;
}
######################### HELPERS INSTALL ########################
public function getIdDirecionamento($tipo, $nome){
switch ($tipo) {
case CONF_URA:
return $this->getUraIdByName($nome) . "-" . $nome;
break;
case CONF_ANUNCIOS:
return $this->getAnuncioIdByName($nome);
break;
case CONF_HORARIO:
return $this->getHorarioIdByName($nome);
break;
case CONF_INTEGRACAO:
return $this->getIntegracaoMetodoByNameIntegracao($nome);
break;
case CONF_FILAS:
return $this->getFilaNumeroByName($nome);
break;
default:
break;
}
}
public function getNomeDirecionamento($tipo, $id){
$id = intval($id);
switch ($tipo) {
case CONF_URA:
return $this->getUraNameById($id);
break;
case CONF_ANUNCIOS:
return $this->getAnuncioNameById($id);
break;
case CONF_HORARIO:
return $this->getHorarioNameById($id);
break;
case CONF_INTEGRACAO:
return null;
break;
case CONF_FILAS:
return $this->getFilaNameByNumero($id);
break;
default:
break;
}
}
public function redirectUraDestino($ura, $status, $nomenclatura){
$ura_destinos = $this->getUraDestinosIdByUraName($ura.$nomenclatura);
foreach($ura_destinos as $destino){
if($destino['numero'] == strtoupper($status)){
return array(
"TIPO" => str_replace("s","",trim($destino['tipo'])),
"NOME" => $this->getNomeDirecionamento(trim($destino['tipo']), $destino['comando'])
);
}
}
return array("TIPO" => "ANUNCIO", "NOME" => CONF_AUDIO_ERROR.$nomenclatura);//DEFAULT
}
}

157
Clientes/O2 Telecom/Logger.php

@ -0,0 +1,157 @@
<?php
/**
* Classe para utilizar
*
* @documentation:
* @author Lucas Awade
* @function developer
* @company SimplesIP
* @version 1.0.0
*/
class Logger {
/*
* GENERATE LOG
*/
private $active;
private $log;
private $type;
private $text;
/*
* CONF. FILE LOG
*/
private $file;
private $path;
private $name;
/*
* CONST. MESSAGE TYPE
*/
const LOG_SUCCESS = "SUCCESS";
const LOG_DEBUG = "DEBUG";
const LOG_INFO = "INFO";
const LOG_WARNING = "WARNING";
const LOG_ERROR = "ERROR";
public function __construct($nameLog, $active = false, $path = "/var/log/asterisk/") {
$this->name = $nameLog;
$this->path = $path;
$this->active = $active;
$this->config($nameLog);
}
########################################################################
## TYPES ##
########################################################################
public function success($log, $debug_trace = null) {
$this->type = self::LOG_SUCCESS;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : debug_backtrace());
$this->write();
}
public function debug($log, $debug_trace = null) {
$this->type = self::LOG_DEBUG;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : $this->name);
$this->write();
}
public function info($log, $debug_trace = null) {
$this->type = self::LOG_INFO;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : $this->name);
$this->write();
}
public function error($log, $debug_trace = null) {
$this->type = self::LOG_ERROR;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : $this->name);
$this->write();
}
public function warning($log, $debug_trace = null) {
$this->type = self::LOG_WARNING;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : $this->name);
$this->write();
}
########################################################################
## IMPORTANT ##
########################################################################
private function write() {
if ($this->active) {
file_put_contents($this->file, $this->log, FILE_APPEND);
}
}
private function header($log, $debug_trace) {
$this->log = "________________________________________________________________________________________\n";
if(is_array($debug_trace)){
$method = $debug_trace[0]['class'] ? "{$debug_trace[0]['class']}::{$debug_trace[0]['function']}" : $debug_trace[0]['function'];
$args = null;
if(count($debug_trace[0]['args']) > 0){
foreach($debug_trace[0]['args'] as $key => $arg){
$x++;
$args .= $arg;
if(count($debug_trace[0]['args']) != $x){
$args .= ",";
}
}
}
$this->log .= sprintf("\n[ %s ][ LINE %s ][ %s ][ ARGS ($args) ][ %s ]\n\n", date('d/m/Y H:i:s'), $debug_trace[0]['line'], $method, $this->type);
} else {
$this->log .= sprintf("\n[ %s ][ %s ][ %s ]\n\n", date('d/m/Y H:i:s'), $debug_trace, $this->type);
}
$this->log .= "> " . $log;
$this->log .= "\n\n ---------------------------------- [ FINISH LOGGER ] ----------------------------------\n\n";
}
public function openLog() {
//$file = fopen($this->file, 'rb');
}
public function locateLog() {
echo "\n\n {$this->file} \n\n";
}
########################################################################
## CONFIGS ##
########################################################################
public function config($name, $exten = ".log", $prefix = null) {
if (file_exists($this->file)) {
$contents = file_get_contents($this->file);
}
$this->file = trim($this->path . $prefix . ($name ? $name : $this->name) . $exten);
file_put_contents($this->file, $contents ? $contents : "", FILE_APPEND);
}
public function getType() {
return $this->type;
}
public function getText(){
return $this->text;
}
public function setLogger($active) {
if ($this->active === true) {
$this->active = $active;
} else if ($active === false) {
$this->active = $active;
} else {
$this->active = true;
}
}
}

258
Clientes/O2 Telecom/SimpleMail.php

@ -0,0 +1,258 @@
<?php
/**
* Classe para implementacao envio de Emails em Massa ou único!
*
* @author Lucas Awade
* @Desenvolvedor
* @version 1.1.0
*/
require("phpmailer/class.phpmailer.php");
class SimpleMail {
########################################################################
## CONFIGURACOES CLASSE ##
########################################################################
private $log;
private $limit;
private $sended = 0;
private $mailer;
########################################################################
## CONFIGURACOES MAIL ##
########################################################################
private $host;
private $port;
private $smtpAuth;
private $smtpSecure;
private $charset;
private $mail;
private $passwd;
private $title;
private $subject;
########################################################################
## CONFIGURACOES DEFAULT ##
########################################################################
public function __construct($mail, $passwd, $subject, $logger = false) {
$this->log = new Logger('simplesmailer', $logger, "/var/log/");
if ($mail && $passwd && $subject) {
$this->mail = $mail;
$this->passwd = $passwd;
$this->subject = $subject;
$this->phpMailer();
} else {
$this->log->error('Nao foi possivel instanciar a Classe SimplesMail,informacoes incompletas!', debug_backtrace());
}
}
/**
* Metodo de configuração do Host de Envio;
* @param string $host
* @param string|int $port
* @param string $title
* @param boolean $smtpAuth
* @param string $smtpSecure
* @param string $charset
*/
public function config($host, $port, $title, $smtpAuth = true, $smtpSecure = 'TLS', $charset = 'UTF8') {
$this->host = $host;
$this->port = $port;
$this->title = $title;
$this->smtpAuth = $smtpAuth;
$this->smtpSecure = $smtpSecure;
$this->charset = $charset;
$this->phpMailer();
}
/**
* Informa um limite de email em massa a ser enviado.
*
* @param int $limit
*/
public function limitSend($limit) {
$this->log->debug('Limite de Email: ' . $limit, debug_backtrace());
$this->limit = $limit;
}
/**
* Mensagem escrito em HTML para envio de um email elaborado.
*
* Os dados em $data devem ser em formato array como o exemplo:
* array("MSG_HEADER" => 'Seja Bem vindo', "MSG_FOOTER" => 'Volte Sempre');
*
* @param string $path
* @param array $data
*/
public function pathBodyMail($path, $data) {
$this->log->info('Path HTML Body: ' . $path, debug_backtrace());
$contents = file_get_contents($path);
foreach ($data as $key => $value) {
$contents = str_replace($key, $value, $contents);
}
$this->mailer->Body = $contents;
}
/**
* Mensagem simples para o envio rapido de um email.
*
* @param string $message
*/
public function bodyMessage($message) {
$this->mailer->Body = $message;
}
/**
* Adiciona no email anexos para serem enviados
* @param array|string $files
*/
public function setAddAttachment($files) {
if ($files) {
if (is_array($files)) {
foreach ($files as $name => $file) {
$this->mailer->AddAttachment($file, (is_numeric($name) ? '' : $name));
}
} else {
$this->mailer->AddAttachment($files);
}
}
}
/**
* Adiciona no email imagens para visualizadas.
*
* #=> Caso o paramtro for um array seu corpo deve ser enviado da seguinte forma:
* $cid = array('minha_img_jpg' => 'img/path/mail/header.jpg');
*
* #=> Caso for uma string deve se passar o cid caso contrario gera um cid randomico;
*
* @param array|string $images
*/
public function setAddEmbeddedImage($images, $cid = null) {
if ($images) {
if (is_array($images)) {
foreach ($images as $name => $image) {
$this->mailer->AddEmbeddedImage($image, $name);
}
} else {
$cid = $cid ? $cid : rand(100, 999999);
$this->mailer->AddEmbeddedImage($image, $cid);
}
}
}
/**
* Esta funcao envia os email em massa ou unicos.
*
* Email em massa é necessario passar um array com os emails seu indice que representa o email.
*
* Email unico so é preciso passar o email na variavel $data;
*
* @param array|string $data
* @param string $indice
* @return array|boolean
*/
public function mailing($data, $indice = '') {
if (is_array($data)) {
$invalid = array();
foreach ($data as $mail) {
if ($this->sended <= $this->limit) {
$mail = $indice ? $mail[$indice] : $mail;
$this->setSended();
if (!$this->send($mail)) {
$invalid[] = $mail;
}
}
}
return $invalid;
} else {
if ($this->send($data)) {
$this->setSended();
return true;
} else {
return false;
}
}
}
public function getErrorSend(){
return $this->mailer->ErrorInfo;
}
########################################################################
## ENVIO MAIL ##
########################################################################
/**
* Gerencia a quantidade de email que esta sendo enviado.
*/
private function setSended() {
$this->sended++;
}
/**
* Gerencia o envio do email para estar sempre no limite de envio.
*
* @return boolean
*/
public function getSended() {
$this->log->debug("Sended: " . $this->sended, debug_backtrace());
if ($this->sended < $this->limit) {
return true;
} else {
return false;
}
}
/**
* Metodo responsavel para realizar o envio do email.
*
* @param string $mailFrom
* @return boolean
*/
private function send($mailFrom) {
if (!$this->mailer) {
$this->log->error("Objeto nao criado!", debug_backtrace());
return false;
}
try {
$this->mailer->setFrom($this->mail, $this->title);
$this->mailer->addAddress($mailFrom, $this->title);
$this->mailer->send();
$this->mailer->clearAllRecipients();
$this->log->success("Mail: {$mailFrom} | Send Queue: {$this->sended}", debug_backtrace());
return true;
} catch (Exception $ex) {
if ($this->mailer->ErrorInfo) {
$this->log->error("ErrorInfo Mail: " . $this->mailer->ErrorInfo . " | Exception Mail: {$mailFrom} >> " . $ex->getMessage(), debug_backtrace());
}
}
}
/**
* Cria as configurações e parametros para ser implementado e enviado os emails.
*
* @void null
*/
private function phpMailer() {
$this->log->debug("Instanciando objeto PHPMailer", debug_backtrace());
$this->mailer = new PHPMailer(true);
$this->mailer->isSMTP();
$this->mailer->Host = $this->host;
$this->mailer->SMTPAuth = $this->smtpAuth;
$this->mailer->isHTML(true);
if ($this->smtpAuth) {
$this->mailer->SMTPSecure = $this->smtpSecure;
$this->mailer->Username = $this->mail;
$this->mailer->Password = $this->passwd;
}
$this->mailer->CharSet = $this->charset;
$this->mailer->Port = $this->port;
$this->mailer->Subject = $this->subject;
}
}

32
Clientes/O2 Telecom/abreAtendimento.php

@ -0,0 +1,32 @@
<?php
require "SGP.php";
$sgp = new SGP();
$tipo = $sgp->agi()->get_variable('EXTEN', true);
$contrato = $sgp->agi()->get_variable('CONTRATO', true);
$chamadoAberto = $sgp->abreChamado($contrato);
switch ($tipo) {
case '1':
$sgp->executarFluxo('ANUNCIO', 'INT_SILENCIO_NETUP_V1'.CONF_NOME_EMPRESA);
break;
case '2':
$sgp->executarFluxo('ANUNCIO', 'PRE_SUPORTE_INT_NETUP_V1'.CONF_NOME_EMPRESA);
break;
case '3':
$sgp->executarFluxo('ANUNCIO', 'INT_SILENCIO_NETUP_V2'.CONF_NOME_EMPRESA);
break;
}
?>

355
Clientes/O2 Telecom/conf.php

@ -0,0 +1,355 @@
<?php
$provedores = [
##########################
/** @IXCSoftware */
##########################
'IXC' => [
'CREDENCIAIS' =>
[
'TOKEN' => '',
'URL' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'PARADA_TECNICA', 'ABRE_ATENDIMENTO']
],
##########################
/** @ISPIntegrator */
##########################
'ISP' => [
'CREDENCIAIS' =>
[
'USER' => '',
'PASSWORD' => '',
'URL' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'PARADA_TECNICA', 'ABRE_ATENDIMENTO']
],
##########################
/** @HUBSoft */
##########################
'HUBSOFT' => [
'CREDENCIAIS' =>
[
'CLIENT_ID' => '',
'CLIENT_SECRET' => '',
'USERNAME' => '',
'PASSWORD' => '',
'URL' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'PARADA_TECNICA', 'ABRE_ATENDIMENTO']
],
##########################
/** @MKSolution */
##########################
'MK' => [
'CREDENCIAIS' =>
[
'TOKEN' => '',
'URL' => '',
'CONTRASENHA' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'PARADA_TECNICA', 'ABRE_ATENDIMENTO']
],
##########################
/** @SGP */
##########################
'SGP' => [
'CREDENCIAIS' =>
[
'TOKEN' => '',
'URL' => '',
'APP' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE']
],
##########################
/** @CNTSistemas */
##########################
'CNT' => [
'CREDENCIAIS' =>
[
'TOKEN' => '',
'URL' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'ABRE_ATENDIMENTO']
],
##########################
/** @Routerbox */
##########################
'RBX' => [
'CREDENCIAIS' =>
[
'TOKEN' => '',
'URL' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'ABRE_ATENDIMENTO']
],
##########################
/** @TopSapp */
##########################
'TOPSAPP' => [
'CREDENCIAIS' =>
[
'USUARIO' => '',
'SENHA' => '',
'URL' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'PARADA_TECNICA']
],
##########################
/** @Gerenet */
##########################
'GERENET' => [
'CREDENCIAIS' =>
[
'TOKEN' => '',
'URL' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "ENDERECO"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE']
],
##########################
/** @Synsuite */
##########################
'SYNSUITE' => [
'CREDENCIAIS' =>
[
'TOKEN' => '',
'URL' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'ABRE_ATENDIMENTO']
],
##########################
/** @Altarede */
##########################
'ALTAREDE' => [
'CREDENCIAIS' =>
[
'TOKEN' => '',
'URL' => '',
'APPKEY' => ''
],
'INTEGRACAO_TELA' => [
'STATUS' => '1',
'PARAMETROS' => ["DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL"]
],
'METODOS' => ['CONSULTA_CLIENTE', 'CONSULTA_PENDENCIA', 'ENVIA_FATURA', 'DESBLOQUEIA_CLIENTE', 'ABRE_ATENDIMENTO']
]
];
/**
* Configuracoes do Desenvolvedor
*/
$configs = [
'FATURA' => [
'FATURA_DIAS_ANTES' => 30,
'FATURA_DIAS_APOS' => 5
],
'LOGGER' => [
'LOGGER_PATH' => 'integracao',
'LOGGER_ATIVO' => true,
'LOGGER_DB_ATIVO' => false
],
'EMAIL' => [
'EMAIL_TITLE', '[NO-REPLY] Envio de Fatura',
'EMAIL_SUBTITLE' => 'Estamos enviando o pedido de Segunda Via da sua Fatura!',
'SENDER_EMAIL_USER' => '',
'SENDER_EMAIL_PASSWORD' => '',
'SMTP_HOST' => '',
'SMTP_PORT' => '587',
'SMTP_SECURE' => 'TLS',
'SMTP_AUTH' => true
],
'CONF' => [
'NOMENCLATURA' => 'INT'
]
];
define('CONF_URA', 'ura');
define('CONF_FILAS', 'filas');
define('CONF_ANUNCIOS', 'anuncios');
define('CONF_HORARIO', 'horarios');
define('CONF_INTEGRACAO', 'integativa');
define('CONF_LOGGER_DB_ATIVO', true);
/**
* Cadastro de Anuncios
*/
$anuncios = [
'SAUDACAO' => [
CONF_URA => 'IDENTIFICACAO'
],
'AGRADECIMENTO' => [],
'CADASTRO_SUCESSO' => [
CONF_INTEGRACAO => 'CONSULTA_PENDENCIA',
CONF_URA => 'AUTOMATIZADA'
],
'CADASTRO_FALHA' => [
CONF_URA => 'IDENTIFICACAO'
],
'NAO_IDENTIFICADO' => [
CONF_ANUNCIOS => 'AGRADECIMENTO'
],
'PENDENCIA' => [
CONF_URA => 'AUTOMATIZADA'
],
'DESBLOQUEIA_SUCESSO' => [
CONF_URA => 'VOLTA_MENU'
],
'DESBLOQUEIA_FALHA' => [
CONF_URA => 'VOLTA_MENU'
],
'FATURA_SUCESSO' => [
CONF_URA => 'VOLTA_MENU'
],
'FATURA_FALHA' => [
CONF_URA => 'VOLTA_MENU'
],
'PRE_SUPORTE' => [
CONF_HORARIO => 'ATENDIMENTO'
],
'TRANSFERE_ATENDENTE' => [],
'PARADA_TECNICA' => [
CONF_URA => 'ATENDIMENTO'
],
'FORA_DE_HORARIO' => [
CONF_ANUNCIOS => 'AGRADECIMENTO'
],
'INTEGRACAO_ERRO' => [
CONF_HORARIO => 'ATENDIMENTO'
]
];
/*
* Configuração de Uras
*/
$ura = [
'AUTOMATIZADA' => [
"ITENS" => [
['numero' => '1', 'sequencia' => '1', 'acao' => [CONF_INTEGRACAO => 'ENVIA_FATURA']],
['numero' => '2', 'sequencia' => '2', 'acao' => [CONF_INTEGRACAO => 'DESBLOQUEIA_CLIENTE']],
['numero' => '3', 'sequencia' => '3', 'acao' => [CONF_INTEGRACAO => 'PARADA_TECNICA', CONF_URA => 'ATENDIMENTO']]
],
"TIMEOUT" => [
]
],
'IDENTIFICACAO' => [
"ITENS" => [
['numero' => '_X.', 'sequencia' => '0', 'acao' => [CONF_INTEGRACAO => 'CONSULTA_CLIENTE']],
['numero' => '9', 'sequencia' => '9', 'acao' => [CONF_HORARIO => 'ATENDIMENTO']]
],
"TIMEOUT" => [
]
],
'VOLTA_MENU' => [
"ITENS" => [
['numero' => '9', 'sequencia' => '9', 'acao' => [CONF_URA => 'AUTOMATIZADA']]
],
"TIMEOUT" => [
CONF_ANUNCIOS => "AGRADECIMENTO"
]
],
'ATENDIMENTO' => [
"ITENS" => [
['numero' => '1', 'sequencia' => '1', 'acao' => [CONF_HORARIO => 'ATENDIMENTO']],
['numero' => '2', 'sequencia' => '2', 'acao' => [CONF_ANUNCIOS => 'PRE_SUPORTE']],
['numero' => '3', 'sequencia' => '3', 'acao' => [CONF_HORARIO => 'ATENDIMENTO']]
],
"TIMEOUT" => [
]
]
];
/*
* Configuração de Uras Redirecionamento
*/
$ura_redir = [
'REDIR_CONSULTA_CLIENTE' => [
'SUCESSO' => [CONF_ANUNCIOS => 'CADASTRO_SUCESSO'],
'FALHA' => [CONF_ANUNCIOS => 'CADASTRO_FALHA'],
'ALTERNATIVO' => [CONF_ANUNCIOS => 'NAO_IDENTIFICADO']
],
'REDIR_CONSULTA_PENDENCIA' => [
'SUCESSO' => [CONF_ANUNCIOS => 'PENDENCIA'],
'FALHA' => [CONF_URA => 'AUTOMATIZADA'],
'ALTERNATIVO' => []
],
'REDIR_ENVIA_FATURA' => [
'SUCESSO' => [CONF_ANUNCIOS => 'FATURA_SUCESSO'],
'FALHA' => [CONF_ANUNCIOS => 'FATURA_FALHA'],
'ALTERNATIVO' => []
],
'REDIR_DESBLOQUEIA_CLIENTE' => [
'SUCESSO' => [CONF_ANUNCIOS => 'DESBLOQUEIA_SUCESSO'],
'FALHA' => [CONF_ANUNCIOS => 'DESBLOQUEIA_FALHA'],
'ALTERNATIVO' => []
],
'REDIR_PARADA_TECNICA' => [
'SUCESSO' => [CONF_ANUNCIOS => 'PARADA_TECNICA'],
'FALHA' => [CONF_URA => 'ATENDIMENTO'],
'ALTERNATIVO' => []
],
'REDIR_ABRE_ATENDIMENTO' => [
'SUCESSO' => [],
'FALHA' => [],
'ALTERNATIVO' => []
]
];
/*
* Configuração de Horario
*/
$horarioPadrao = [
"ATENDIMENTO" => [
"ITENS" => [
["HORARIO_INICIAL" => "08:00", "HORARIO_FINAL" => "18:00", "DIA_SEMANA_INICIO" => "mon", "DIA_SEMANA_FIM" => "fri"],
["HORARIO_INICIAL" => "08:00", "HORARIO_FINAL" => "12:00", "DIA_SEMANA_INICIO" => "sat", "DIA_SEMANA_FIM" => "sat"]
],
"FORA_HORARIO" => [CONF_ANUNCIOS => "FORA_DE_HORARIO"]
]
];

6
Clientes/O2 Telecom/confRotas.php

@ -0,0 +1,6 @@
<?php
$anuncioos = [
];

82
Clientes/O2 Telecom/config.php

@ -0,0 +1,82 @@
<?php
###########################################################################
##### #####
##### ARQUIVO PARA A CONFIGURACAO DE ACESSO API #####
##### ----------------------------------------- #####
##### CREDENCIAIS DE ACESSO #####
###########################################################################
define('CONF_ID_CREDENCIAIS', '');
define('CONF_TOKEN_API', 'KZojmoAm6YEArEYMBNO7s9dWYcp7tuz9BWnxrmAX');
define('CONF_URL_API', 'https://api.redesmartnet.hubsoft.com.br/');
define('CONF_USER_API', 'api@simplesip.com.br');
define('CONF_PASSWORD_API', '^x7j#ivjzrC9&Fuaqu');
define('CONF_USERID_API', '5');
###########################################################################
##### CONFIGURACOES #####
###########################################################################
define("CONF_INTEGRACAO_TELA", true);
define("CONF_PARAMETROS_TELA", serialize(array("NOME", "PLANO", "ENDERECO", "IP", "STATUS", "OBSERVACOES")));
/** @CONF_NOME_EMPRESA => colocar _EMPRESA */
define('CONF_NOME_EMPRESA', '');
/** @CONF_AUDIO_ERROR => ID Áudio */
define('CONF_AUDIO_ERROR', '');
define('CONF_LOGGER_PATH', 'integracao');
define('CONF_LOGGER_ATIVO', true);
define('CONF_LOGGER_DB_ATIVO', false);
define('CONF_FATURA_DIAS_ANTES', 30);
define('CONF_FATURA_DIAS_APOS', 5);
define('CONF_AUDIO_ERROR', 'INTEGRACAO_ERRO_INT');
###########################################################################
##### CREDENCIAIS DE ENVIO DE EMAIL #####
###########################################################################
define('CONF_EMAIL_TITLE_INVOICE', '[NO-REPLY] Envio de Fatura');
define('CONF_EMAIL_SUBTITLE_INVOICE', 'Estamos enviando o pedido de Segunda Via da sua Fatura!');
define('CONF_SENDER_EMAIL_USER', '');
define('CONF_SENDER_EMAIL_PASSWORD', '');
define('CONF_SMTP_HOST', '');
define('CONF_SMTP_POST', '587');
############################################################################
##### CONF. KING CAMPANHA #####
############################################################################
define('CONF_CAMP_LOGIN', "novahelp");
define('CONF_CAMP_DATAINI', date('Y-m-d 08:00:00'));
define('CONF_CAMP_DATAFIM', date('Y-m-d 18:00:00'));
define('CONF_CAMP_RAMAL', "2000");
define('CONF_CAMP_FLUXO', 0);
define('CONF_CAMP_PAUSA', 1);
define('CONF_CAMP_NUMREDISCAGEM', 1);
define('CONF_CAMP_MAXCALL', 10);
define('CONF_CAMP_RINGTIME', 45);
define('CONF_CAMP_INTERVALO', 1);
define('CONF_CAMP_AMD', 0);
define('CONF_CAMP_NDS', 0);
define('CONF_CAMP_PRIOMOVEL', 0);
define('CONF_CAMP_MAXCALLAGENT', 3);
############################################################################
##### CONF. INTEGRACAO DE TELA #####
############################################################################
define("CONF_INTEGRACAO_TELA", true);
define("CONF_PARAMETROS_TELA", serialize(array("DOCUMENTO", "NOME", "PLANO", "ENDERECO", "STATUS", "EMAIL")));
###########################################################################
##### CONFIGURACAO DE PARADA TECNICA HUBSOFT #####
###########################################################################
define('CONF_PARADA_TECNICA_MSG', "PROBLEMA MASSIVO");

69
Clientes/O2 Telecom/consultaCliente.php

@ -0,0 +1,69 @@
<?php
require "SGP.php";
$sgp = new SGP();
$documento = $sgp->agi()->get_variable('URA', true);
$clienteDados = $sgp->identificarDocumento($documento);
$qtdcons = $sgp->agi()->get_variable('QTDCONS', true);
$clienteInfo = end($clienteDados['contratos']);
if ($clienteInfo['clienteId']){
$nome = $clienteInfo['razaoSocial'];
$plano = "";
$contratoStatus = "";
$cidade = $clienteInfo['popNome'];
$cpfCnpj = $clienteInfo['cpfCnpj'];
$clienteId = $clienteInfo['clienteId'];
$contratoId = $clienteInfo['contratoId'];
$endereco = $clienteInfo['endereco_cidade'].", ".$clienteInfo['endereco_bairro'].', '.$clienteInfo['endereco_numero'];
$pendente = "NAO";
$status = "";
$bairro = "";
$contratosStatus = '';
foreach($clienteDados['contratos'] as $cliente){
$plano .= $cliente['planointernet']."<br>";
$clienteAcesso = $sgp->verificaAcesso($cliente['contratoId']);
$status .= $clienteAcesso['msg']."<br>";
$contratoStatus .= $cliente['contratoStatusDisplay']."<br>";
$login .= $cliente['servico_login']."<br>";
$bairro .= $cliente['endereco_bairro']."<br>";
$faturas = $sgp->segundaVia($cliente['contratoId']);
foreach ($faturas['links'] as $faturadata) {
$datavencimento = $faturadata['vencimento_original'] . ' 23:59:59';
if (strtotime($datavencimento) < time()) {
$pendente = "SIM";
}
}
}
$sgp->agi()->set_variable('NOME', $nome);
$sgp->agi()->set_variable('DOCUMENTO', $documento);
$sgp->agi()->set_variable('ENDERECO', $endereco);
$sgp->agi()->set_variable('BAIRRO', $bairro);
$sgp->agi()->set_variable('CONTRATO_STATUS', $contratoStatus);
$sgp->agi()->set_variable('PLANO', $plano);
$sgp->agi()->set_variable('STATUS', $status);
$sgp->agi()->set_variable('LOGIN', $login);
$sgp->agi()->set_variable('CONTRATO', $contratoId);
$sgp->agi()->set_variable('CODCLI', $clienteId);
$sgp->agi()->set_variable('CPFCNPJ', $cpfCnpj);
$sgp->executarFluxo('ANUNCIO', 'CADASTRO_SUCESSO_INT_NETUP_V1'.CONF_NOME_EMPRESA); //NAO IDENTIFICADO
}else if($qtdcons < 1){
$qtdcons += 1;
$sgp->agi()->set_variable('QTDCONS', $qtdcons);
$sgp->executarFluxo('ANUNCIO', 'CADASTRO_FALHA_INT_NETUP_V1'.CONF_NOME_EMPRESA); //NAO IDENTIFICADO
}else{
$sgp->executarFluxo('ANUNCIO', 'NAO_IDENTIFICADO_INT_NETUP_V1'.CONF_NOME_EMPRESA); //FALHA
}
?>

33
Clientes/O2 Telecom/consultaPendencia.php

@ -0,0 +1,33 @@
<?php
require "SGP.php";
$sgp = new SGP();
$documento = $sgp->agi()->get_variable('DOCUMENTO', true);
$clienteDados = $sgp->identificarDocumento($documento);
$pendente = 0;
foreach($clienteDados['contratos'] as $cliente){
if((strstr($cliente['contratoStatusDisplay'], "Ativo")) || (strstr($cliente['contratoStatusDisplay'], "Suspenso")) ){
$faturas = $sgp->segundaVia($cliente['contratoId']);
foreach ($faturas['links'] as $faturadata) {
$datavencimento = $faturadata['vencimento_original'] . ' 23:59:59';
if (strtotime($datavencimento) < time()) {
$pendente = 1;
break;
}
}
}
}
if($pendente){
$sgp->executarFluxo('ANUNCIO', 'PENDENCIA_INT_NETUP_V1'.CONF_NOME_EMPRESA);// Inadimplente
}else{
$sgp->executarFluxo('URA', 'AUTOMATIZADA_INT_NETUP_V1'.CONF_NOME_EMPRESA); // Cliente OK
}
?>

30
Clientes/O2 Telecom/desbloqueiaCliente.php

@ -0,0 +1,30 @@
<?php
require "SGP.php";
$sgp = new SGP();
$desbloqueado= false;
$documento = $sgp->agi()->get_variable('DOCUMENTO', true);
$clienteDados = $sgp->identificarDocumento($documento);
foreach($clienteDados['contratos'] as $cliente){
if($cliente['contratoStatusDisplay'] != "Ativo"){
$liberado = $sgp->liberacaoPromessa($cliente['contratoId']);
if($liberado['status']){
$desbloqueado = true;
}
}
}
if($desbloqueado){
$sgp->executarFluxo('ANUNCIO', 'DESBLOQUEIA_SUCESSO_INT_NETUP_V1'.CONF_NOME_EMPRESA); // Sucesso
}else{
$sgp->executarFluxo('ANUNCIO', 'DESBLOQUEIA_FALHA_INT_NETUP_V1'.CONF_NOME_EMPRESA);//Falha
}
?>

33
Clientes/O2 Telecom/email.html

@ -0,0 +1,33 @@
<meta charset="UTF-8">
<table align="center" width="60%" style="border: 1px solid #ddd; background-color: #fff;border-radius: 8px;">
<tr>
<td>
<br />
<h2 style="text-align: center;">$titulo</h2>
<hr style="border: 0.05px solid rgb(241, 241, 241);" />
</td>
</tr>
<tr>
<td>
<div style="margin: auto;margin-left: 20px">
<p>Olá $nome, estamos enviando a segunda via de sua fatura,
para mais informação entre em contato com nosso atendimento.
</p>
<p><b>Para visualizar seu Boleto clique em visualizar para abrir ou verifique nos anexos!</b></p>
<p>$link</p>
</div>
</td>
</tr>
<tr>
<td>
<br/>
<hr style="border: 0.05px solid rgb(241, 241, 241);" />
<div style="width: 80%; margin: auto;">
<p style="text-align: center;"><b>Este é uma mensagem gerada automaticamente, pedimos que não responda essa mensagem!</b></p>
<p style="text-align: center;"><i><b>A agradeçemos o seu contato!</b></i></p>
</div>
<br/>
</td>
</tr>
</table>

35
Clientes/O2 Telecom/enviaFatura.php

@ -0,0 +1,35 @@
<?php
require "SGP.php";
$sgp = new SGP();
$tipo = $sgp->agi()->get_variable('EXTEN', true);
$envioUm= 'email';
$envioDois = 'sms';
$envioSucesso = false;
$documento = $sgp->agi()->get_variable('DOCUMENTO', true);
$clienteDados = $sgp->identificarDocumento($documento);
foreach($clienteDados['contratos'] as $cliente){
if((strstr($cliente['contratoStatusDisplay'], "Ativo")) || (strstr($cliente['contratoStatusDisplay'], "Suspenso")) ){
$enviadoUm = $sgp->enviaFatura($cliente['contratoId'], $envioUm);
$enviadoDois = $sgp->enviaFatura($cliente['contratoId'], $envioDois);
if ($enviadoUm['status']) {
$envioSucesso = true;
}
}
}
if($envioSucesso){
$sgp->executarFluxo('ANUNCIO', 'FATURA_SUCESSO_INT_NETUP_V1'.CONF_NOME_EMPRESA);
}else{
$sgp->executarFluxo('ANUNCIO', 'FATURA_FALHA_INT_NETUP_V1'.CONF_NOME_EMPRESA);
}
?>

38
Clientes/O2 Telecom/funcoesCustom.php

@ -0,0 +1,38 @@
<?php //004fb
if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');if(function_exists('dl')){@dl($__ln);}if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;}}}if(function_exists('dl')){@dl($__ln);}}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo("Site error: the ".(php_sapi_name()=='cli'?'ionCube':'<a href="http://www.ioncube.com">ionCube</a>')." PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking.\n\nPlease visit ".(php_sapi_name()=='cli'?'get-loader.ioncube.com':'<a href="http://get-loader.ioncube.com">get-loader.ioncube.com</a>')." for install assistance.\n\n");exit(199);
?>
HR+cPxhIp+/P/zSqmAHYMione+iRnoY4a70d9+8HPphABKodPgg0LX0dNWmmTf72PvrODl8tXoOx
OnWnWY3bPCMgpYCiEM3wfUHndT57oH5oEBYX6kOIpTLdjIyzSYdY0UdmoIQGCk6c5EhQJmG1jZsF
0oRkySYvdyJ1js9ahyjLZa8G/obBAiaRSTQZ2mlHkrC64JvbAnwyFdenV0AuwAvMqnmNkGaS8M7v
z2grtgdWyPjADXcceTNqEwY+3aE7nqPuxMKGagfkogbsovoqZjnNUji0JEHvFsXeIq53QS2IaJ2l
DJnUB5fZ4sH84kjvnPL3RM7vKkLIZFmWJSzw9164W2EY1b7uCcU9kDWOrTWSJzuEV1HemIvKc4MH
UlhIVJ9XayEVz6YZu/CP9WjuHVwdM7eKveGggfPc/ng4w0kZu0kHuhZitTPnSvRicljxV0b9uJ7A
w6wMuAyW3+YcMCIfnS1ShqRWEUJIVaC5UCfAGJQGUONWGvqvmTf56+6ORxZr2M4BKEiHB3q2pA/F
FzLxctyTzYUtvQ5OUngSAcMZ0XTGZFpRqU1G26tK5YlZzzV1v3en3zI8L+I9PXcRDSsASRjvfGTM
u0oIb2IRDs0UtJ9hmNiiUdVoUuUbMyh0vBGNb+sOknIKjma0BqrZ6/yZ1cHWJs6YrsREn2U0/CML
q8OJ7NJQ1uday1ykQOMNYYpJN89LDkMDuGqIvk6ZM4rFzcxMv5HfzvrDaXhqz7FxffC2VfhpzHUE
8qXnq/nWzlOd1WPg0x9TryAQNOmBYwY/x8yEEolQIUEH8lgAWsiPNEJDVK7ztflpl6dMV/Wx6SFm
KJOVytSfT92u0+qgyXbpnjKJcVzYaqsv4sauH/3pBcCp2MqCLhWnZ4HA7QFUQI3X03TnrOtGOicM
sbGXQdYlilAYWJ717/99bXtJSTK+XF4OAmSEotRqumZgRnu4Z95FS1M7Vt8MvsZvTlcRZANANIXy
M3uB7BNqkBTacby8//XwY0biMhGBPtNG94Rynw7HgXJ3Kc1AmmI1wYepcQUTS6bzSoA84G9f4iTl
I4wIMdeh3ed0cN7C4zoDmTYdUM301+6eBAQoYTb7gid0so5hr8w053zfdWR6ZL8OjcwsKZbgsYt6
fDnHGOikBtxJUfWgUZMP85YkADE7dFg4MfBrf+qw2e6e8AfjvD5EwQORsN4geE+ukyI3nfx5/H0n
Ch1QFygKU/XE13jnrIvYdWwRmVkEzOzt9gJBfwwWcwulm1xTnakzgK65ABtdYXr/kq0JdIh/p1uW
T3EU+nAANJhbfaySZztYAR3QokMofdITUiFRgFcrIsZxGShc6vzPQY5Y523yp3i+EnblY94Za9W8
BnLp/ZEGLhk22gl03l0+1hwEjm28u5Fp6Y3bFJCIlvKdfakKI9kQIKslNy+IGz4QFNkZA0tpqG8g
TBwgQQQvDkUMTT2GI2dnr16Qia5uWSdCjac1s7ISUYrbT6q0KM96hW9y+5AfifsOCUJgDhbmTQlK
dEWGn4nIFVnR7nuVE+6gtPd8nQX1JDBysT2+8cC4Y4AsdE16bY1IU0GEvFH2/zfO749Lc/w3mRZt
/ji3jjj84KEkwn+Fw88E+qX1kIQdMDcj1KVCdRPi/imJun8oq/ruvQrc8XOVSXXFP/XjtovtMBta
Wucl8ONepSzHhOsWZu5h1lP+wGQrH1aEFtmZlZGR7Cd8+OmLEB0qi2NwNVmhZKLTxHvTqSOKhknX
KwTdpYUpTUs+NCt8fNLVR2fUWmgXfjBAsO+Nz74wGaCYBEVzt14pZyLju/XgA924KKUj7Bj7qqMs
wXLAmnidmyNXWlHfsgbvcnxU+jiUhRueFTe8bVZsXewgPzD8mTWZHDpYB18CNb0g42BRHOEHLgZP
3OnI/ESTnETpEb1Hc5HZmQzJpgDQEf7dr8iQQ5U2foDRj0+JXh9YqhWBYxdhjVe9HNYzc0WdYCfn
mtmirlofGz3zms3gSOsPyc0i7yrk1Ux/Hwlcz8n7uj1DjLk6gpu84Wq1J2lEYUHtAVKpFlgAuMKn
54rUGsZypuG5WaIMRTxRAa1HmfCHWTcWX+FaVgUdqvEtb+5ErJJS1mgwxcFQzC1SzRrMglgqT3k8
B5pZ5intC9AKj3VgrmH8PR3cE1OCJN4d1IvQI+XBZa0cO5DruT7CVQ3sNdW+HUANpyGoudGOWdsb
lulnanyXy3rbKBpQKkLs+7GmLKuSJnL+VLIJ27w+dA0lEW2V5xY0cq0GiOAl4SMCHkATJh/yMG/4
yniLu469jmUAUVbUn5rCw1Ozt4gnR8O3ZC+mFKh9HQjIp7DXwKMXckUgrV0KOfDUGHL43+raQla1
cr+MQsWsRdQeUAX8jro/kQUkdnwOXqISEloB4fmXiZK8arMBWSXS+R3Zr9wxhC5m5zn1+3A9/aY4
XAGZcL/+RwWgeJh7/sn2tdqqBu+GU4/fNoS6/4TH1qumKHesaZ8kOwXzSjhLmARLENJrPZYJna5d
ZdrDSfiGnq7wfGG5bGdN4JuPMBw1CasfiXQFzuBQjHXJPjKUXqheadxvyv7M7WFE/7gUa4eiJFV3
nGFpKMHUWd0GlKHV2Ym=

518
Clientes/O2 Telecom/install.php

@ -0,0 +1,518 @@
#!/usr/bin/php -q
<?php
include_once 'conf.php';
include_once 'config.php';
require_once 'IntegracaoDataBase.php';
include_once("util/util.php");
include_once '/var/www/html/aplicativo/admin/funcoes.php';
include_once 'util/funcoesAmi.php';
error_reporting(E_ALL);
ini_set('display_errors', 1);
/**
* CONEXAO COM BANCO DE DADOS
*/
$db = new IntegracaoDataBase();
/**
* APRESENTA OS PROVEDORES DISPONIVEIS
*/
apresentaProvedoresDisponiveis($provedores);
/**
* AGUARDA O COLABORADOR INFORMAR O SISTEMA A SER USADO!
*/
$provedor = informaSistemaProvedor($provedores);
/**
* INFORMA A EMPRESA CASO FOR CLOUD
*/
$empresa = informaEmpresa();
/**
* INFORMA A FILA A SER INSTALADA
*/
$queue = informaFilas();
$filasInput = explode(",", $queue);
$filas = validaFilas($filasInput);
$horarios = $filas;
/**
* COLETA A VERSAO DO BANCO DE DADOS
*/
$version = installIntegracaoAtiva($provedor, $empresa);
$db->beginTransaction();
if ($version) {
#############CADASTRO################
echo "Integracao install init...\n";
//ANUNCIOS
if(installAnuncio($empresa, $version)){
echo "Anuncio install [ OK ]\n";
} else {
echo "Anuncio install [ FAIL ]\n";
$db->rollbackTransaction();
}
//URAS
if(installURA($empresa, $version)){
echo "URA install [ OK ]\n";
}else{
echo "URA install [ FAIL ]\n";
$db->rollbackTransaction();
}
//HORARIOS
if(installHorario($empresa, $version)){
echo "Horario install [ OK ]\n";
}else{
echo "Horario install [ FAIL ]\n";
$db->rollbackTransaction();
}
//URA REDIR
if(installURARedir($provedor, $empresa, $version)){
echo "URA Redir install [ OK ]\n";
}else{
echo "URA Redir install [ FAIL ]\n";
$db->rollbackTransaction();
}
#########CONFIGURA FLUXO################
echo "Integracao config init...\n";
//ANUNCIO
if(configuraFluxoAnuncio($provedor, $empresa, $version)){
echo "Anuncio fluxo config [ OK ]\n";
}else{
echo "Anuncio fluxo config [ FAIL ]\n";
$db->rollbackTransaction();
}
//URA
if(configuraFluxoUra($provedor, $empresa, $version)){
echo "Ura fluxo config [ OK ]\n";
}else{
echo "Ura fluxo config [ FAIL ]\n";
$db->rollbackTransaction();
}
//HORARIO
if(configuraFluxoHorario($provedor, $empresa, $version)){
echo "Horario fluxo config [ OK ]\n";
}else{
echo "Horario fluxo config [ FAIL ]\n";
$db->rollbackTransaction();
}
//URA REDIR
if(configuraFluxoUraRedir($provedor, $empresa, $version)){
echo "Ura Redir fluxo config [ OK ]\n";
}else{
echo "Ura Redir fluxo config [ FAIL ]\n";
$db->rollbackTransaction();
}
atualizaAsterisk();
$db->commitTransaction();
} else {
$db->rollbackTransaction();
}
############################################################################
#### FUNCOES INSTALACAO ####
############################################################################
function installIntegracaoAtiva($provedor, $empresa) {
global $provedores, $configs, $db;
try {
$db->findIntegracaoCustom();
$versao = $db->findVersion($empresa)['versao'] + 1;
$version = $versao ? $versao : 1;
$metodos = $provedores[$provedor]['METODOS'];
foreach ($metodos as $metodo) {
$nome = $metodo . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$comando = ($empresa ? $empresa . '/' : '') . $provedor . '/' . lcfirst(str_replace(' ', '', ucwords(strtolower(str_replace('_', ' ', $metodo))))) . '.php';
$db->createIntegracaoAtiva($nome, $version, $comando);
}
return $version;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
function installAnuncio($empresa, $version) {
global $anuncios, $configs, $db;
try {
foreach ($anuncios as $key => $val) {
$nome = $key . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$musica = strtolower($key . "_" . $configs['CONF']['NOMENCLATURA']) . ".ulaw";
$db->addAnuncio($nome, $musica, null, null);
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
function installURA($empresa, $version) {
global $ura, $configs, $db;
try {
foreach ($ura as $key => $val) {
$nome = $key . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$musica = strtolower($key . "_" . $configs['CONF']['NOMENCLATURA']) . ".ulaw";
$db->addUra($nome, $musica);
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
function installHorario($empresa, $version) {
global $horarios, $db, $configs;
try {
foreach ($horarios as $val) {
$nome = $val . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$db->addHorario($nome);
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
function installURARedir($provedor, $empresa, $version) {
global $provedores, $ura_redir, $configs, $db;
$metodos = $provedores[$provedor]['METODOS'];
try {
foreach ($ura_redir as $key => $val) {
if(in_array(str_replace("REDIR_", "", $key), $metodos)){
$nome = $key . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$musica = "silencio_int.ulaw";
$db->addUra($nome, $musica);
}
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
############################################################################
#### FUNCOES CONFIGURA FLUXO ####
############################################################################
/*
* Configuração de Anuncios
*/
function configuraFluxoAnuncio($provedor, $empresa, $version) {
global $provedores, $anuncios, $configs, $db, $horarios;
$metodos = $provedores[$provedor]['METODOS'];
try {
foreach ($anuncios as $key => $val) {
$direcaoTipo = null;
$direcaoNome = null;
foreach($val as $tipo => $nome){
if(in_array($nome, $metodos)){//PRIORIZAR INTEGRACAO CASO O PROVEDOR TIVER
$direcaoTipo = $tipo;
$direcaoNome = $nome;
break;
}else if($tipo != CONF_INTEGRACAO){//CASO NAO EXISTIR INTEGRACAO DO PROVEDOR, NAO PODE PEGAR INTEGRACAO, POIS O PROXIMO PODE SER UMA INTEGRACAO NAO EXISTENTE
$direcaoTipo = $tipo;
$direcaoNome = $nome;
if($tipo == CONF_HORARIO){
$direcaoNome = $horarios[0];
}
break;
}
}
$nome = $direcaoNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$key .= "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAnuncio = $db->getAnuncioIdByName($key);
$idAcao = $db->getIdDirecionamento($direcaoTipo, $nome);
$db->updateAnuncio($direcaoTipo, $idAcao, $idAnuncio);
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
/*
* Configuração de Horarios
*/
function configuraFluxoHorario($provedor, $empresa, $version) {
global $filas, $configs, $db, $horarios, $horarioPadrao;
try {
foreach ($horarios as $horarioNome) {
$nome = $horarioNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$horarioId = $db->getHorarioIdByName($nome);
$fila = $filas[0] . ($empresa ? '_'.$empresa: '');
foreach($horarioPadrao as $horarioPadraoItem){
foreach ($horarioPadraoItem as $tipo => $dado){
switch ($tipo) {
case "ITENS":
foreach($dado as $itens){
$horario_ini = $itens['HORARIO_INICIAL'];
$horario_fim = $itens['HORARIO_FINAL'];
$dias_semana = 0;
$semana = $itens['DIA_SEMANA_INICIO'];
$semana_fim = $itens['DIA_SEMANA_FIM'];
$opcao = CONF_FILAS;
$acao = $fila;
$idAcao = $db->getIdDirecionamento($opcao, $acao);
$db->addHorarioItens($horarioId, $horario_ini, $horario_fim, $dias_semana, $semana, $semana_fim, $opcao, $idAcao);
}
break;
case "FORA_HORARIO":
foreach($dado as $tipo => $nome){
$nome = $nome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAcao = $db->getIdDirecionamento($tipo, $nome);
$db->updateHorario($horarioId, $tipo, $idAcao);
}
break;
default:
break;
}
}
}
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
/*
* Configuração de Uras
*/
function configuraFluxoUra($provedor, $empresa, $version) {
global $provedores, $ura, $configs, $db, $horarios;
$metodos = $provedores[$provedor]['METODOS'];
try {
foreach ($ura as $key => $val) {
$key .= "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$uraId = $db->getUraIdByName($key);
foreach($val as $key => $itens){
switch ($key) {
case "ITENS":
foreach ($itens as $item){
$direcaoTipo = null;
$direcaoNome = null;
foreach ($item['acao'] as $tipo => $nome) {
if(in_array($nome, $metodos)){//PRIORIZAR INTEGRACAO CASO O PROVEDOR TIVER
$direcaoTipo = $tipo;
$direcaoNome = $nome;
break;
}else if($tipo != CONF_INTEGRACAO){//CASO NAO EXISTIR INTEGRACAO DO PROVEDOR, NAO PODE PEGAR INTEGRACAO, POIS O PROXIMO PODE SER UMA INTEGRACAO NAO EXISTENTE
$direcaoTipo = $tipo;
$direcaoNome = $nome;
if($tipo == CONF_HORARIO){
$direcaoNome = $horarios[0];
}
break;
}
}
$nome = $direcaoNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAcao = $db->getIdDirecionamento($direcaoTipo, $nome);
$db->addUraDestino($uraId, $item['numero'], $tipo, $idAcao, $item['sequencia'], $nome) ;
}
break;
case "TIMEOUT":
$direcaoTipo = null;
$direcaoNome = null;
foreach ($itens as $tipo => $nome){//PRIORIZAR INTEGRACAO CASO O PROVEDOR TIVER
if(in_array($nome, $metodos)){
$direcaoTipo = $tipo;
$direcaoNome = $nome;
break;
}else if($tipo != CONF_INTEGRACAO){//CASO NAO EXISTIR INTEGRACAO DO PROVEDOR, NAO PODE PEGAR INTEGRACAO, POIS O PROXIMO PODE SER UMA INTEGRACAO NAO EXISTENTE
$direcaoTipo = $tipo;
$direcaoNome = $nome;
if($tipo == CONF_HORARIO){
$direcaoNome = $horarios[0];
}
break;
}
}
$nome = $direcaoNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAcao = $db->getIdDirecionamento($direcaoTipo, $nome);
$db->updateUra($uraId, $direcaoTipo, $idAcao) ;
break;
default:
break;
}
}
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
/*
* Configuração de Uras Redirecionamento
*/
function configuraFluxoUraRedir($provedor, $empresa, $version) {
global $provedores, $ura_redir, $configs, $db, $horarios;
$metodos = $provedores[$provedor]['METODOS'];
try {
foreach ($ura_redir as $key => $val) {
$key .= "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$uraId = $db->getUraIdByName($key);
$sequencia=1;
foreach($val as $key => $item){
$sequencia+=1;
if(!empty($item)){
$direcaoTipo = null;
$direcaoNome = null;
foreach ($item as $tipo => $nome){
if($tipo != CONF_INTEGRACAO){//NAO PODE TER REDIRECIONAMENTO PARA INTEGRACAO
$direcaoTipo = $tipo;
$direcaoNome = $nome;
if($tipo == CONF_HORARIO){
$direcaoNome = $horarios[0];
}
break;
}
}
$nome = $direcaoNome . "_" . $configs['CONF']['NOMENCLATURA'] . "_" . ($empresa ? $empresa . '_' : '') . 'V' . $version;
$idAcao = $db->getIdDirecionamento($direcaoTipo, $nome);
$db->addUraDestino($uraId, $key, $tipo, $idAcao, $sequencia, $nome);
}else{
$db->addUraDestino($uraId, $key, '', null, $sequencia, null);
}
}
}
return true;
} catch (Exception $ex) {
echo $ex->getMessage();
}
return false;
}
############################################################################
#### FUNCOES IMPORTANTES ####
############################################################################
function apresentaProvedoresDisponiveis($provedores, $select = null) {
$prov = "Sistemas de provedores disponiveis: \n\n";
foreach ($provedores as $key => $val) {
$prov .= sprintf(" - [ %s ] \n", $key);
if (strtoupper($select) == $key) {
return true;
}
}
if (!$select) {
echo $prov;
} else {
return false;
}
}
function informaSistemaProvedor($provedores) {
do {
echo "\n --------------------------------- \n";
echo "\nSelecione o sistema de provedor: \n";
echo "\n --------------------------------- \n";
$input = strtoupper(trim(fgets(STDIN)));
$resp = apresentaProvedoresDisponiveis($provedores, $input);
} while (!$resp);
return $input;
}
function informaEmpresa() {
echo "\n --------------------------------- \n";
echo "\nInforme a empresa: \n";
echo "\n OBS: APENAS PARA EMPRESAS NO CLOUD \n";
echo "\n --------------------------------- \n";
$empresa = strtoupper(trim(fgets(STDIN)));
return $empresa;
}
function informaFilas() {
echo "\n --------------------------------- \n";
echo "\nInforme as que seram utilizadas na integracao: \n";
echo "\n OBS: FILAS DEVEM SER SEPADADAS POR Virgulas(,) \n";
echo "\n --------------------------------- \n";
$queue = strtoupper(trim(fgets(STDIN)));
return $queue;
}
function validaFilas($filas){
global $db, $empresa;
$filaValidada = [];
foreach ($filas as $value) {
$fila = $value . ($empresa ? '_'.$empresa: '');
$filaId = $db->getFilaNumeroByName($fila);
if(empty($filaId)){
echo "\n --------------------------------- \n";
echo "\n Fila $value nao existe \n";
echo "\n --------------------------------- \n";
exit();
return null;
}
array_push($filaValidada, $value);
}
return $filaValidada;
}
function atualizaAsterisk(){
global $db;
gera_arquivos($db->getConnection(), 'ANUNCIOS');
gera_arquivos($db->getConnection(), 'TESTES');
gera_arquivos($db->getConnection(), 'URA');
gera_arquivos($db->getConnection(), 'TESTES');
gera_arquivos($db->getConnection(), 'HORARIOS');
gera_arquivos($db->getConnection(), 'TESTES');
}

25
Clientes/O2 Telecom/paradaTecnica.php

@ -0,0 +1,25 @@
<?php
require "SGP.php";
$sgp = new SGP();
$documento = $sgp->agi()->get_variable('DOCUMENTO', true);
$clienteDados = $sgp->identificarDocumento($documento);
$parada = false;
foreach($clienteDados['contratos'] as $cliente){
$clienteAcesso = $sgp->verificaAcesso($cliente['contratoId']);
if(strstr($clienteAcesso['msg'], "Manuten")){
$parada = true;
}
}
if($parada){
$sgp->executarFluxo('ANUNCIO', 'PARADA_TECNICA_INT_NETUP_V1'.CONF_NOME_EMPRESA);//PENDENTE
}else{
$sgp->executarFluxo('ANUNCIO', 'PENDENCIA_INT_NETUP_V1'.CONF_NOME_EMPRESA);
}
?>

8
Clientes/O2 Telecom/reload.php

@ -0,0 +1,8 @@
#!/usr/bin/php -q
<?php
include("util/util.php");
include '/var/www/html/aplicativo/admin/funcoes.php';
gera_arquivos($dbcon, 'ANUNCIOS');
gera_arquivos($dbcon, 'TESTES');

19
Clientes/SIMPLESIP_MOVIDESK/abdAgi.php

@ -76,6 +76,7 @@ ini_set('display_errors', 0);
include 'util/util.php';
include 'funcoes/shared.php';
include("util/funcoesAgi.php");
include_once 'movideskAbdAgi.php';
require '/var/lib/asterisk/scripts/integracao/serverFunctions.php';
/*
@ -542,25 +543,7 @@ if ($ligueme) {
* parametros de entrada. O programas ou scripts ficam localizados
* no diretorio /var/lib/asterisk/scripts/integracao/custom.
*/
$query = "SELECT itgm_id FROM pbx_integracao_reg a, pbx_integracao_metodo b WHERE b.itgm_id_pai = a.reg_id_metodo AND b.evento = 2 AND a.reg_uniqueid = '{$arg1}'";
$result = pg_query($query);
$idMetodo = pg_fetch_assoc($result)['itgm_id'];
$pathIntegra = "/var/lib/asterisk/scripts/integracao/custom/";
if ($idMetodo && ExecuteCustom($idMetodo, $nomeMetodo)) {
__logStr("ExecuteCustom", $nomeMetodo, 'serverAgi', true);
/** Movidesk **/
__logStr("abdAgi.php", file_exists($pathIntegra . "Movidesk.php") . " | " . $chamadaAtendida, true);
if (file_exists($pathIntegra . "Movidesk.php") && !$chamadaAtendida) {
include $pathIntegra . "AbandonadaChamada.php";
}
include($nomeMetodo);
exit;
}
function GetVarFila() {
$varFila = array('QUEUESTATUS', 'QUEUESRVLEVELPERF', 'QUEUESRVLEVEL', 'QUEUEABANDONED', 'QUEUECOMPLETED', 'QUEUETALKTIME', 'QUEUEHOLDTIME', 'QUEUECALLS', 'QUEUESTRATEGY', 'QUEUEMAX', 'QUEUENAME', 'QEORIGINALPOS', 'QEHOLDTIME', 'MEMBERREALTIME', 'MEMBERDYNAMIC', 'MEMBERPENALTY', 'MEMBERLASTCALL', 'MEMBERCALLS', 'MEMBERNAME', 'MEMBERINTERFACE');

31
Clientes/SIMPLESIP_MOVIDESK/movideskAbdAgi.php

@ -0,0 +1,31 @@
<?php
/*
* Verifica se o tipo de execução é custom, se for desvia a execução
* para um script customizado para integração, capturando antes os
* parametros de entrada. O programas ou scripts ficam localizados
* no diretorio /var/lib/asterisk/scripts/integracao/custom.
*/
if ($agi->get_variable('MEMBERINTERFACE', true) || $evento == 'ABANDON') {
$query = "SELECT itgm_id FROM pbx_integracao_reg a, pbx_integracao_metodo b WHERE b.itgm_id_pai = a.reg_id_metodo AND b.evento = 2 AND a.reg_uniqueid = '{$arg1}'";
$result = pg_query($query);
$idMetodo = pg_fetch_assoc($result)['itgm_id'];
$pathIntegra = "/var/lib/asterisk/scripts/integracao/custom/";
if ($idMetodo && ExecuteCustom($idMetodo, $nomeMetodo)) {
__logStr("ExecuteCustom", $nomeMetodo, 'serverAgi', true);
/** Movidesk * */
if (file_exists($pathIntegra . "Movidesk.php") && $evento == 'ABANDON') {
include $pathIntegra . "abandonadaChamada.php";
} else {
include($nomeMetodo);
}
exit;
}
}
?>

4
Clientes/TipBank/Integracao.php

@ -366,7 +366,7 @@
* Banco de dados e credenciais do Manager.
*
* @return IntegracaoDataBase
*/
*/
public function db() {
if (!$this->db) {
$db = new IntegracaoDataBase();
@ -396,7 +396,7 @@
"reg_fone" => $numero,
"reg_status_exec" => '1',
"reg_inicio" => date());
$this->db()->setRegistros($registros);
if (CONF_AUDIO_ERROR) {

2
Clientes/TipBank/IntegracaoDataBase.php

@ -423,7 +423,7 @@
public function registraIntegracao() {
$this->debug = debug_backtrace();
/**
* Parametros REGISTROS
* Parametros REGISTROS
*
* id -> Id do qual gerou a integracao para o retorno_cliente
*

1
Clientes/TipBank/TipBank.php

@ -67,6 +67,7 @@
$this->user = $user;
$this->password = $password;
$this->setLog(CONF_LOGGER_ATIVO);
$this->integracaoReg();
$this->log->info("Iniciando integracao", debug_backtrace());
}

4
Clientes/TipBank/config.php

@ -19,7 +19,7 @@
###########################################################################
define("CONF_INTEGRACAO_TELA", true);
define("CONF_PARAMETROS_TELA", serialize(array("NOME", "PLANO", "ENDERECO", "IP", "STATUS", "PROTOCOLO")));
define("CONF_PARAMETROS_TELA", serialize(array("PROTOCOLO", "-", "-", "-", "-", "-")));
/** @CONF_NOME_EMPRESA => colocar _EMPRESA */
define('CONF_NOME_EMPRESA', '');
@ -73,7 +73,7 @@
############################################################################
define("CONF_INTEGRACAO_TELA", true);
define("CONF_PARAMETROS_TELA", serialize(array("DOCUMENTO", "NOME", "PLANO", "ENDERECO", "PROTOCOLO", "EMAIL")));
define("CONF_PARAMETROS_TELA", serialize(array("PROTOCOLO", "-", "-", "-", "-", "-")));
###########################################################################
##### CONFIGURACAO DE PARADA TECNICA HUBSOFT #####

14
Clientes/TipBank/protocolo.php

@ -2,6 +2,7 @@
require_once 'TipBank.php';
$tip = new TipBank();
$protocolo = $tip->agi()->get_variable('EXTEN', true);
@ -9,9 +10,14 @@ $reg_pass = $tip->agi()->get_variable("REG_PASS", true);
$retornoProtocolo = $tip->db()->getProtocolo($protocolo);
if($retornoProtocolo){
$tip->agi()->set_variable('PROTOCOLO', $protocolo);
$tip->agi()->exec_goto($tip->db()->getAnuncio('silencio_teste'));
} else{
$tip->agi()->exec_goto($tip->db()->getAnuncio('PROTOCOLO_ERRADO'));
}
$tip->executarFluxo('ANUNCIO', 'SILENCIO_TESTE'.CONF_NOME_EMPRESA);
} else{
$tip->executarFluxo('ANUNCIO', 'PROTOCOLO_ERRADO'.CONF_NOME_EMPRESA);
}

27
Clientes/Titania/ISPIntegrator.php

@ -81,7 +81,7 @@ class ISPIntegrator extends Integracao
}
}
public function abrirChamado($codcli, $codsercli)
public function abrirChamado($codcli, $codsercli,$codtcoCl)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
@ -92,13 +92,30 @@ class ISPIntegrator extends Integracao
$this->params['codocop'] = 'ELZ90OV9SZ';
$this->params['codusu'] = '09';
$this->params['descri_oco'] = 'Desbloqueio provisório';
$this->params['codco_cl'] = $codtcoCl;
return $this->setParamsJSON();
} else {
return false;
}
}
public function fecharChamadoEmail($codoco, $protocolo)
public function getCodcoCl($codcli)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("contacts.list");
$this->params['_user'] = $this->user;
$this->params['_passwd'] = $this->password;
$this->params['codcli'] = $codcli;
$this->params['codtco_cl'] = 'FINANCEIRO';
return $this->setParamsJSON();
} else {
return false;
}
}
public function fecharChamadoEmail($codoco)
{
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
@ -109,11 +126,7 @@ class ISPIntegrator extends Integracao
$this->params['motivo_fechamento'] = '01RESOLVID';
$this->params['codocop_sol'] = 'ELZ90OV9SZ';
$this->params['descri_oco_sol'] = 'Desbloqueio provisório';
$this->params['enviar_email'] = 'S';
$this->params['e_mail_sender'] = 'ti@titania.com.br';
$this->params['email_resposta'] = 'lucas.ayala@simplesip.com.br';
$this->params['assunto'] = 'Atendimento Fechado';
$this->params['conteudo_mail'] = $protocolo;
$this->params['enviar_email'] = 'N';
return $this->setParamsJSON();
} else {
return false;

16
Clientes/Titania/desbloqueiaCliente.php

@ -23,7 +23,7 @@
$email = $isp->agi()->get_variable('EMAIL', true);
if (CONF_AUDIO_ERROR) {
$isp->db()->setIdAudioError(CONF_AUDIO_ERROR);
$isp->db()->setIdAudioError(CONF_AUDIO_ERROR);
}
$contSucesso = 0;
@ -37,8 +37,14 @@
if ($regexSusp == true && !$habprov) {
$hab = $isp->habilitacaoProvisoria($value['codsercli']);
if($hab['error'] == false){
$abrir = $isp->abrirChamado($codcli,$value['codsercli']);
$chamado = $isp->fecharChamadoEmail($abrir['data']['results'][0]['codoco'], $protocolo);
$lists = $isp->getCodcoCl($codcli);
foreach($lists as $list){
if($list['results'][0]['ativo'] == 'S'){
$codtcoCl = $list['results'][0]['codco_cl'];
$abrir = $isp->abrirChamado($codcli,$value['codsercli'],$codtcoCl);
}
}
$chamado = $isp->fecharChamadoEmail($abrir['data']['results'][0]['codoco']);
$contSucesso ++;
}
}
@ -73,4 +79,6 @@
}
} -->
} -->

38
Clientes/Titania/teste.php

@ -1,5 +1,5 @@
<?php
require_once 'ISPIntegrator.php';
$isp = new ISPIntegrator(CONF_USER_API, CONF_PASSWORD_API, CONF_URL_API);
@ -8,38 +8,24 @@ $isp = new ISPIntegrator(CONF_USER_API, CONF_PASSWORD_API, CONF_URL_API);
$protocolo = '202220222022';
$doc = $isp->identificarDocumento('93338540027');
$list = $isp->listaDetalhesServico('98111');
// $chamado = $isp->fecharChamadoEmail('09WG2PE1MX',$protocolo);
$chamado = $isp->fecharChamadoEmail('09WHSKH8J5');
//$codsercli = $list['data']['results']['planos'][5]['codsercli'];
//$hab = $isp->habilitacaoProvisoria('CMWHEPK1ZD');
//$lis = $isp->listaServico('125822');
$lists = $isp->getCodcoCl('98111');
// print_r($hab);
// if($hab['error'] == false){
// echo 'O error esta TRUE';
// } else {
// echo 'O error esta FALSE';
// }
// foreach ($list['data']['results']['planos'] as $value) {
// $regex = preg_match('/\Suspenso\b/', $value['descri_est']);
// $habprov = $value['hab_prov'];
// if ($regex == true && !$habprov) {
// $hab2 = $isp->habilitacaoProvisoria($value['codsercli']);
// print_r($hab2);
// } else{
// echo "O plano {$cont} ja foi desbloqueado \n";
// foreach($lists as $list){
// if($list['results'][0]['ativo'] == 'S'){
// $codtcoCl = $list['results'][0]['codco_cl'];
// $chamado = $isp->abrirChamado('98111','FNSLOPUUU1',$codtcoCl);
// print_r($chamado);
// }
// }
// }
// $abrir = $isp->abrirChamado('98111',$codsercli);
print_r($doc);
print_r($lists);
// if (strpos($value['descri_est'], 'Suspenso') ) {
// $hab2 = $isp->habilitacaoProvisoria($codsercli);

25
Clientes/onlineCertificadora/AbandonadaChamada.php

@ -0,0 +1,25 @@
<?php
require_once "Movidesk.php";
$registros = array(
"id" => '',
"reg_ura" => $ura,
"reg_tronco" => $tronco,
"reg_uniqueid" => $uid,
"reg_id_metodo" => $idMetodo,
"reg_uniqueid" => $uid,
"reg_uniqueid_old" => $uidOld,
"reg_fone" => $numero,
"reg_status_exec" => '1',
"reg_inicio" => date());
$movidesk = new Movidesk(CONF_TOKEN_API, CONF_URL_API);
$movidesk->db()->setRegistros($registros);
if (CONF_AUDIO_ERROR) {
$movidesk->db()->setIdAudioError(CONF_AUDIO_ERROR);
}
$movidesk->startCanceledCall($id, $queueId, $clientNumber, $branchLine, $callDate, $canceledDate);

432
Clientes/onlineCertificadora/Integracao.php

@ -0,0 +1,432 @@
<?php
require_once 'phpagi/phpagi.php';
require_once 'IntegracaoDataBase.php';
require_once 'Logger.php';
require_once 'SimpleMail.php';
require_once 'conf.php';
// include("util/util.php");
/*
|*************************************************************************
| SISTEMA UNICO DE INTEGRACAO *
|*************************************************************************
*/
/**
* Classe para implementacao das integracoes da Simples IP
* @author Lucas Awade
* @Desenvolvedor
* @SimplesIP
* @version 1.1.1
*/
class Integracao {
protected $log;
protected $mail;
private $agi;
private $db;
########################################################################
## CONSTANTES DA CLASSE ##
########################################################################
const PATH_SOUND = '/var/lib/asterisk/sounds/customizados/';
const AGI_ERROR_HANDLER = false;
########################################################################
## FUNCOES UTILITARIAS ##
########################################################################
/**
* - Retorno é os dados referentes ao retornado da API
* - Params são os dados que serão disponibilizados na tela do agente.
*
* @param array $retorno
* @param array $params
*/
public function integracaoAgente($retorno, $params) {
$registros = 0;
$data = $this->db()->getRegistros();
$retorno_cliente = "{$data['reg_uniqueid']}|{$data['reg_fone']}|{$data['id']}|";
foreach ($retorno as $key => $value) {
if (in_array($key, $params)) {
$registros++;
$retorno_cliente .= sprintf("%s:%s",
strtoupper(str_replace("_", " ", $key)),
strtoupper(str_replace("|", "", $value)));
if (count($params) > $registros) {
$retorno_cliente .= "|";
}
}
}
$this->db()->setRegistros(array('retorno_cliente' => $retorno_cliente));
}
/**
* Converte um CPF ou CNPJ com marcara referente a cada modelo.
*
* @param string $string
* @return boolean|string
*/
protected function mask_cpf_cnpj($string) {
if (!empty($string)) {
if (strlen($string) == 11) {
$mask = "%s%s%s.%s%s%s.%s%s%s-%s%s";
} elseif (strlen($string) == 14) {
$mask = "%s%s.%s%s%s.%s%s%s/%s%s%s%s-%s%s";
}
return vsprintf($mask, str_split($string));
} else {
return false;
}
}
/**
* Retorna telefone com o (DDD)Numero de acordo com o parametro passado caso nao possua DDD sera o padrao da central.
* @param string $telefone
* @return array
*/
protected function mask_phone_tel($telefone) {
$retorno = array('telefone' => '', 'type' => '');
if (strlen($telefone) == 11) {
$numero_1 = substr($telefone, 2, 5);
$numero_2 = substr($telefone, 7, 4);
$ddd = substr($telefone, 0, 2);
$telefone = "({$ddd}) " . $numero_1 . '-' . $numero_2;
$retorno['telefone'] = $telefone;
$retorno['type'] = 'celular';
} else if (strlen($telefone) == 12) {
$ddd = substr($telefone, 1, 2);
$numero = substr($telefone, 3, 10);
$telefone = sprintf("(%s) %s", $ddd, $numero);
$retorno['telefone'] = $telefone;
$retorno['type'] = 'telefone';
} else if (strlen($telefone) == 13) {
$ddd = substr($telefone, 2, 2);
$numero = substr($telefone, 4, 10);
$telefone = "(" . $ddd . ") " . $numero;
$retorno['telefone'] = $telefone;
$retorno['type'] = 'celular';
} else if (strlen($telefone) == 10) {
$numero_1 = substr($telefone, 2, 4);
$numero_2 = substr($telefone, 6, 9);
$ddd = substr($telefone, 0, 2);
$telefone = "({$ddd}) " . $numero_1 . '-' . $numero_2;
$retorno['telefone'] = $telefone;
$retorno['type'] = 'fixo';
} else {
return null;
}
return $retorno;
}
/**
* Verifica se todos os parametros passados foram completados.
*
* @param array $args
* @return true|false
*/
protected function getArgs($args) {
foreach ($args as $value) {
if (!$value) {
return false;
}
}
return true;
}
/**
* Verifica a diferenca em dias entre a data de entrada e a data atual.
*
* @param type $dateParam
* @return type
*/
public function dateDiff($dateParam) {
$dateIni = strtotime(date('Y-m-d'));
if (strstr($dateParam, "/")) {
$dateParam = date(strtotime(str_replace('/', '-', $dateParam)));
} else {
$dateParam = date(strtotime($dateParam));
}
$diff = ($dateIni - $dateParam);
$days = (int) floor($diff / (60 * 60 * 24));
return $days;
}
/**
* Realiza a conversao de datas no formato brasileiro para a Defualt.
* @param string $data
* @return string|boolean
*/
public function convertDateDefault($data) {
if ($data) {
$data = explode('/', $data);
return "{$data[2]}-{$data[1]}-{$data[0]}";
}
return false;
}
/**
* Realiza a validação de pendencia financeira de acordo com a data informada
*
* OBS: O array deve possui nível = array( array('data' => 'yyyy-mm-dd'))
* OBS: O indice deve ser o nome do valor onde se encontra a data.
* @param array $array
* @param string $indice
* @param string $datavalida
* @return boolean
*/
public function verificaDataPendencia($array, $indice, $datavalida = null) {
if (!$datavalida) {
$datavalida = strototime(date('Y-m-d'));
} else {
$datavalida = strtotime($datavalida);
}
foreach ($array as $value) {
if (strtotime($value[$indice]) < $datavalida) {
return false;
}
}
return true;
}
/**
* Adiciona mascara no telefone para realizar a consulta
*
* @param type $value
* @return boolean
*/
protected function phoneMask($value) {
if (!empty($value)) {
if (strlen($value) == 10) {
$mask = '(%s%s)%s%s%s%s-%s%s%s%s';
} elseif (strlen($value) == 11) {
$mask = '(%s%s)%s%s%s%s%s-%s%s%s%s';
}
return vsprintf($mask, str_split($value));
} else {
return false;
}
}
/**
* Verifica se um servidor esta dando resposta de ping
* @param type $ip
* @return boolean
*/
public function verificaLatencia($ip) {
$ping = explode(",", shell_exec("ping -c 4 $ip"));
$latencia = substr($ping[1], 1, 2); //resposta do ping
if ($latencia >= 2) {
return true;
}
return false;
}
/**
* Verbaliza digitos
* @param string|int $string
*/
public function verbaliza($string) {
$vocaliza = str_split($string);
foreach ($vocaliza as $value) {
$this->agi()->say_digits($value);
}
}
/*
* Objetct to array
*/
public function objectToArray($d) {
if (is_object($d)) {
$d = get_object_vars($d);
}
if (is_array($d)) {
return array_map($this->objectToArray(), $d);
} else {
return $d;
}
}
############################################################################
######## CONFIGURACAO DE EMAIL ########
############################################################################
/**
* Inicia a instanciacao da Classe para envio de Email
* @param string $email
* @param string $password
* @param string $subject
*/
public function SimpleMail($email, $password, $subject) {
$this->mail = new SimpleMail($email, $password, $subject);
$this->log->debug("Instanciacao SimpleMail : " . ($this->mail ? "SUCCESS" : "FAIL"), debug_backtrace());
}
/**
* Configura o servidor de Envio dos Emails.
* @param string $host
* @param string|int $port
* @param string $title
* @return boolean
*/
public function confSMTP($host, $port, $title, $smtpAuth = true, $smtpSecure = 'TLS', $charset = 'UTF8') {
$this->log->debug("Configuracao SMTP", debug_backtrace());
if ($this->mail) {
$this->mail->config($host, $port, $title, $smtpAuth, $smtpSecure, $charset);
} else {
return false;
}
}
public function geraProtocoloSimples($uid){
$connPG = $this->db()->getConnection();
$protoAgente = GeraProtocolo($connPG, $uid);
return $protoAgente;
}
########################################################################
## FUNCOES IMPORTANTES ##
########################################################################
/**
* Instancia um objeto de Logger.
*
* @param Logger $log
*/
protected function setLog($log = false) {
if (!$this->log) {
$this->log = new Logger(CONF_LOGGER_PATH . CONF_NOME_EMPRESA, $log);
}
}
/**
* Retorna o objeto de Log.
* @return string
*/
public function log() {
return $this->log;
}
/**
* Instancia um objeto de AGI para se conectar com as informações do Asterisk.
*
* @return AGI
*/
public function agi() {
if (!$this->agi) {
$data = $this->db()->getAuthAgi();
$config = array();
$config['phpagi']['error_handler'] = self::AGI_ERROR_HANDLER;
$config['asmanager']['server'] = $data['host_sck'];
$config['asmanager']['port'] = $data['porta_sck'];
$config['asmanager']['username'] = $data['usuario_sck'];
$config['asmanager']['secret'] = $data['senha_sck'];
$agi = new AGI('phpagi.conf', $config);
$this->agi = $agi;
return $agi;
}
return $this->agi;
}
private function readAgiVariable() {
ob_implicit_flush(true);
set_time_limit(6);
$in = fopen("php://stdin", "r");
$input = str_replace("\n", "", fgets($in, 4096));
fclose($in);
$this->log->debug("Reading: " . $input);
return $input;
}
public function getAgiVariable($variable = null) {
$this->log->debug("Executing...", debug_backtrace());
while ($env = $this->readAgiVariable()) {
$s = explode(": ", $env);
$agi[str_replace("agi_", "", $s[0])] = trim($s[1]);
$this->log->debug("Data: " . print_r($agi, true), debug_backtrace());
if (($env == "") || ($env == "\n")) {
break;
}
}
$this->log->debug("Reading: " . print_r($agi, true));
if (!$variable || $agi[$variable]) {
return !$variable ? $agi : $agi[$variable];
}
return false;
}
/**
* Instancia um objeto de IntegracaoDataBase para se conectar com dados do
* Banco de dados e credenciais do Manager.
*
* @return IntegracaoDataBase
*/
public function db() {
if (!$this->db) {
$db = new IntegracaoDataBase();
$this->db = $db;
}
return $this->db;
}
protected function audioError() {
$this->log->debug('Audio de error');
$exten = $this->db()->getAnuncio();
$this->log->error('Encaminhando para áudio alternativo de Erros', debug_backtrace());
$this->agi()->exec_goto($exten);
exit();
}
protected function integracaoReg(){
global $ura, $tronco, $uid, $idMetodo, $uidOld, $numero;
$registros = array(
"id" => '',
"reg_ura" => $ura,
"reg_tronco" => $tronco,
"reg_uniqueid" => $uid,
"reg_id_metodo" => $idMetodo,
"reg_uniqueid" => $uid,
"reg_uniqueid_old" => $uidOld,
"reg_fone" => $numero,
"reg_status_exec" => '1',
"reg_inicio" => date());
$this->db()->setRegistros($registros);
if (CONF_AUDIO_ERROR) {
$this->db()->setIdAudioError($this->db()->getAnuncioIdByName(strtoupper(CONF_AUDIO_ERROR.CONF_NOME_EMPRESA.CONF_VERSAO)));
}
}
public function executarFluxo($tipo, $nome){
#INEGRACAO DE TELA
if(CONF_INTEGRACAO_TELA){
$parametrosTela = unserialize(CONF_PARAMETROS_TELA);
$itgcTela = array();
$itgcTelaNomes = array();
foreach($parametrosTela as $parametro){
$itgcTela[$parametro] = str_replace(array("|",":"),"-",utf8_decode($this->agi()->get_variable($parametro, true)));
$itgcTelaNomes[] = "$parametro";
}
$this->integracaoAgente($itgcTela, $itgcTelaNomes);
}
$dbFunction = "get".ucfirst(strtolower($tipo));//CONTRUIR NOME FUNCAO BUSCAR ID
$this->agi()->exec_goto($this->db()->$dbFunction(strtoupper($nome)));//REDIRECIONAR FLUXO
$this->db()->atualizaIntegracao();
}
}

929
Clientes/onlineCertificadora/IntegracaoDataBase.php

@ -0,0 +1,929 @@
<?php
require_once 'Logger.php';
// *************************************************************************
// * SISTEMA UNICO DE INTEGRACAO *
// *************************************************************************
/**
* Classe para utilizar os registros do Banco de Dados;
*
* OBS: Deixar como usuario de execucao e acesso pbx:pbx
*
* @author Lucas Awade
* @function developer
* @company SimplesIP
* @version 1.0.1
*/
class IntegracaoDataBase {
private $query;
private $connection;
private $registros;
private $log;
private $credentials = array();
private $debug;
private $idAudioError;
/**
* @file
* Arquivo de configuracoes do banco e manager
*/
const FILE_DB = "/var/www/html/include/bd";
public function __construct() {
$this->log = new Logger(CONF_LOGGER_PATH, CONF_LOGGER_DB_ATIVO);
}
/**
* Retorna os registros armazenados na variavel registros pra ser disponibilizado
* no decorrer de uma integracao;
*
* @return array
*/
public function getRegistros() {
return $this->registros;
}
/**
* Informações coletadas do banco de dados para ser escritas no log.
*
* @param array $array
*/
private function logResult($array) {
if ($array) {
$this->log->success(print_r($array, true), $this->debug);
} else {
$this->log->warning('Nenhum resultado encontrado!', $this->debug);
}
}
/**
* Audio de erro padrao
*
* @param string $idAudioError
*/
public function setIdAudioError($idAudioError) {
$this->idAudioError = $idAudioError;
}
########################################################################
## BANCO DE DADOS ##
########################################################################
/**
* Pega as informacoes das credenciais no arquivos padrao "bd";
*/
private function filedb() {
if (file_exists(self::FILE_DB)) {
$contents = fopen(self::FILE_DB, 'r');
while (!feof($contents) && $contents) {
$str = fgets($contents);
$dados = explode('=', $str);
$this->credentials[strtolower($dados[0])] = str_replace('"', '', $dados[1]);
}
fclose($contents);
$this->credentials = array_filter($this->credentials);
$this->log->debug("Credenciais banco de dados: " . print_r($this->credentials, true), debug_backtrace());
} else {
$this->log->error("Nao foi possivel encontrar o arquivo 'bd' em " . self::FILE_DB);
}
}
/**
* Executa as querys da consulta a serem feitas, além de gravar logs de registros de dados,
* e qualquer erro é repassado a classe que está executando para tratar o erro;
*
* @param string $type
* @return boolean|array
*/
private function execute($type = '') {
try {
if (!$this->connection) {
$this->connection = $this->getConnection();
}
$result = pg_query($this->connection, $this->query);
switch (strtolower($type)) {
case 'assoc':
$data = pg_fetch_assoc($result);
break;
case 'row':
$data = pg_fetch_row($result);
break;
case 'array':
$data = pg_fetch_array($result);
break;
case 'all':
$data = pg_fetch_all($result);
break;
}
$this->logResult($data);
return $data;
} catch (Exception $ex) {
$this->log->error("Exception: {$ex->getMessage()} | Postgres : " . pg_last_error(), $this->debug);
}
}
public function getConnection() {
$this->filedb();
$this->connection = pg_connect(sprintf('host=%s port=%s dbname=%s user=%s password=%s', $this->credentials['host_db'], $this->credentials['porta_db'], $this->credentials['base_db'], $this->credentials['usuario'], $this->credentials['senha']));
if (pg_connection_status($this->connection) === 0) {
$this->log->success("Conectado na base {$this->credentials['base_db']}.", debug_backtrace());
return $this->connection;
} else {
throw new Exception('Nao foi possivel conectar na base de dados');
}
}
private function getPDO() {
try {
if (!$this->connection) {
$drive = CONF_DB_DRIVER;
$host = CONF_DB_HOST;
$dbname = CONF_DB_BASE;
$user = CONF_DB_USER;
$pass = CONF_DB_PASSWD;
$this->connection = new pdo("$drive:host=$host;dbname=$dbname", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
protected function strquery($stmt, $params) {
foreach ($params as $key => $value) {
if (!$value || $value == "null") {
$value = null;
}
$stmt->bindValue(":{$key}", $value, (is_int($value) ? PDO::PARAM_INT : PDO::PARAM_STR));
}
}
public function read($query, $params) {
try{
$this->getPDO();
$stmt = $this->connection->prepare($query);
$this->strquery($stmt, $params);
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $data;
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
public function create($query, $params) {
try{
$this->getPDO();
$stmt = $this->connection->prepare($query);
$this->strquery($stmt, $params);
$stmt->execute();
$data = $this->connection->lastInsertId();
return $data;
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
public function delete($query, $params) {
try{
$this->getPDO();
$stmt = $this->connection->prepare($query);
$this->strquery($stmt, $params);
$stmt->execute();
$count = $stmt->rowCount();
$data = (!$count) ? false : true;
return $data;
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
public function update($query, $params) {
try{
$this->getPDO();
$stmt = $this->connection->prepare($query);
$this->strquery($stmt, $params);
$stmt->execute();
$count = $stmt->rowCount();
$data = (!$count) ? false : true;
return $data;
} catch (PDOException $ex) {
$this->log->error("Exception: {$ex->getMessage()} ", $this->debug);
}
}
########################################################################
## ASTERISK ##
########################################################################
/**
* Coleta em qual Asterisk a central está rodadando e retorna o modelo padrao
* de configuracao do exten;
*
* @return string
*/
private function getVersionAsterisk() {
$result = array();
exec("asterisk -V", $result);
$this->log->info("Versao Asterisk: " . $result[0], debug_backtrace());
if (strpos($result[0], '1.4') !== false) {
return "|";
} else {
return ",";
}
}
/**
* Transforma uma string exten com "," para "|" de acordo com a versao do Asterisk
*
* @param string $string
* @return string
*/
private function string_exten($string) {
return str_replace(",", $this->getVersionAsterisk(), $string);
}
/**
* Coleta os dados de autenticacao do manager.
*
* @return array
*/
public function getAuthAgi() {
$data = array();
foreach ($this->credentials as $key => $value) {
if (strpos($key, '_sck') !== false) {
$data[$key] = $value;
}
}
return $data;
}
########################################################################
## QUERYS ##
########################################################################
/**
* Inicia um Transacao;
*/
public function beginTransaction() {
$this->debug = debug_backtrace();
$this->query = "BEGIN;";
$this->execute();
}
/**
* Registra uma Transacao.
*/
public function commitTransaction() {
$this->debug = debug_backtrace();
$this->query = "COMMIT;";
$this->execute();
}
/**
* Retorna as informacoes antes da Transacao.
*/
public function rollbackTransaction() {
$this->debug = debug_backtrace();
$this->query = "ROLLBACK;";
$this->execute();
}
/**
* Busca o DDD padrao cadastrado na central.
*
* @param string $name
* @return string
*/
public function getDDD() {
$this->debug = debug_backtrace();
$this->query = "SELECT prm_ddd_padrao FROM pbx_parametros";
return $this->execute('assoc') ? $this->execute('assoc')['prm_ddd_padrao'] : '';
}
/**
* Consulta no banco o nome do Anuncio e retorna o ID para ser escrito no exten;
*
* @param string $name
* @return string
*/
public function getAnuncio($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_anuncios WHERE nome = '$name'";
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError;
return sprintf($this->string_exten('ext-anuncios,a%s,1'), $result);
}
/**
* Consulta no banco o nome do Ura e retorna o ID para ser escrito no exten;
*
* @param string $name
* @return string
*/
public function getUra($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_ura WHERE nome = '$name'";
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError;
return sprintf($this->string_exten('ura-%s,s,1'), $result);
}
/**
* Consulta no banco a Ura por ID e retorna suas informacoes;
*
* @param string|int $id
* @return string
*/
public function getURAById($id) {
$this->debug = debug_backtrace();
$this->query = "SELECT * FROM pbx_ura WHERE id = '{$id}'";
$result = $this->execute('assoc') ? $this->execute('assoc') : $this->idAudioError;
return $result;
}
/**
* Consulta no banco o nome do Fila e retorna o ID para ser escrito no exten;
*
* @param string $name
* @return string
*/
public function getFila($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT numero FROM pbx_dacs WHERE nome = '$name'";
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError;
return sprintf($this->string_exten('ext-fila,%s,1'), $result);
}
/**
* Consulta no banco o nome do Ramal e retorna o ID para ser escrito no exten;
*
* @param string $name
* @return string
*/
public function getRamal($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_ramais WHERE nome = '$name'";
$result = $this->execute('row')[0] ? $this->execute('row')[0] : $this->idAudioError;
return sprintf($this->string_exten('ext-ramais,%s,1'), $result);
}
/**
* Coleta as opcoes que o usuario passou nas uras da sua chamada.
*
* @param string $uniqueid
* @param int $ura_id
* @return boolean|array
*/
public function getOptionsURA($uniqueid, $ura_id) {
$this->debug = debug_backtrace();
$this->query = "SELECT umv_ura_id,umv_ura_nome,uniqueid,umv_ura_opcao "
. "FROM pbx_ura_movimento WHERE uniqueid = '$uniqueid' "
. "AND umv_ura_opcao IS NOT NULL AND umv_opcao = 'ura' "
. "AND umv_ura_id = $ura_id "
. "ORDER BY umv_id";
return $this->execute('all');
}
/**
* Retorna o ID e Data Hora da primeira entrada da ligacao em um URA de
* acordo com o uniqueid;
* @param string $uniqueid
* @return array
*/
public function getFristURA($uniqueid) {
$this->debug = debug_backtrace();
$this->query = "SELECT destino, min(data_registro) "
. "FROM ast_bilhetes_complemento "
. "WHERE direcao = 'ura' "
. "AND uniqueid2 = '{$uniqueid}' GROUP BY destino LIMIT 1";
$result = $this->execute('assoc');
return $result;
}
public function registraIntegracao() {
$this->debug = debug_backtrace();
/**
* Parametros REGISTROS
*
* id -> Id do qual gerou a integracao para o retorno_cliente
*
* Todos os parametros devem ser igual a da tabela pbx_integracao_reg
*/
$ura = trim($this->registros['reg_ura']) ? trim($this->registros['reg_ura']) : 'null';
$tronco = trim($this->registros['reg_tronco']) ? trim($this->registros['reg_tronco']) : 'null';
$this->query = "INSERT INTO pbx_integracao_reg (reg_id_metodo,reg_uniqueid,reg_uniqueid_old,reg_fone,reg_inicio, reg_tronco, reg_ura)
SELECT * FROM (
SELECT {$this->registros['reg_id_metodo']},'{$this->registros['reg_uniqueid']}','{$this->registros['reg_uniqueid_old']}','{$this->registros['reg_fone']}', now(), '$tronco', '$ura') AS dados
WHERE NOT EXISTS (
SELECT reg_uniqueid FROM pbx_integracao_reg WHERE reg_uniqueid = '{$this->registros['reg_uniqueid']}'
) LIMIT 1;";
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
public function atualizaIntegracao() {
$this->debug = debug_backtrace();
$tronco = trim($this->registros['reg_tronco']) ? sprintf(",\nreg_tronco='%s'", trim($this->registros['reg_tronco'])) : '';
$ura = trim($this->registros['reg_ura']) ? sprintf(",\nreg_ura='%s'", trim($this->registros['reg_ura'])) : '';
$reg_msg = QuotedStr($this->registros['reg_msg']);
$reg_retorno = QuotedStr($this->registros['reg_fone']);
$retorno_cliente = substr($this->registros['retorno_cliente'], 0, 255);
$this->query = "UPDATE pbx_integracao_reg
SET reg_fim = NOW(),
reg_retorno = $reg_retorno,
reg_msg = $reg_msg,
reg_status_exec = '{$this->registros['reg_status_exec']}',
retorno_cliente = '{$retorno_cliente}'{$tronco}{$ura}
WHERE reg_uniqueid = '{$this->registros['reg_uniqueid']}'";
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/**
* Informa os dados para ser inseridos na tabela de integracao_reg;
*
* @param array $registros
*/
public function setRegistros($registros) {
if (is_array($registros) && !$this->registros) {
$this->registros = $registros;
$this->registraIntegracao();
} else {
foreach ($registros as $key => $value) {
$this->registros[$key] = $value;
}
}
}
/**
* Retorna todas as informacoes da tabela Supervisor_Dacs
* @param array $dacs
* @return array
*/
public function getSupervisorDAC($dacs = array()) {
$this->query = "SELECT * FROM pbx_supervisor_dacs ";
if ($dacs) {
$this->query .= sprintf("WHERE id IN (%s)", implode(",", $dacs));
}
return $this->execute('all');
}
/**
* Retorna credenciais cadastradas nos metodos de integracao
* @param int $id
* @return array
*/
public function getConexaoAPI($id) {
$this->query = "SELECT itgc_nome AS name, itgc_port AS id_user, itgc_host AS url,
itgc_database AS token, itgc_user AS user, itgc_password AS password,
itgc_timeout AS timeout
FROM pbx_integracao_configuracao
WHERE itgc_id = {$id}";
return $this->execute('assoc');
}
public function getScriptCredenciais($script) {
$this->query = "SELECT itgc_nome AS name, itgc_port AS id_user, itgc_host AS url,
itgc_database AS token, itgc_user AS user, itgc_password AS password,
itgc_timeout AS timeout
FROM pbx_integracao_configuracao a
INNER JOIN pbx_integracao_metodo b ON a.itgc_id = b.itgc_id
WHERE itgm_comando = '{$script}'";
return $this->execute('assoc');
}
public function getFilaPorNome($name) {
$this->debug = debug_backtrace();
$this->query = "SELECT * FROM pbx_dacs WHERE nome = '$name'";
return $this->execute('assoc');
}
public function getLastUraPorUniqueid($uniqueid) {
$this->query = "SELECT data_reg, umv_ura_id,umv_ura_nome,uniqueid,umv_ura_opcao
FROM pbx_ura_movimento WHERE uniqueid = '{$uniqueid}'
ORDER BY data_reg DESC
LIMIT 1";
return $this->execute('assoc');
}
public function getUraMovimentoByUniqueid($uniqueid, $orderByAtt = "data_reg", $orderByType = "ASC") {
$this->query = "SELECT data_reg, umv_ura_id,umv_ura_nome,uniqueid,umv_ura_opcao, umv_opcao
FROM pbx_ura_movimento WHERE uniqueid = '{$uniqueid}'
ORDER BY $orderByAtt $orderByType
LIMIT 1";
return $this->execute('assoc');
}
public function atualizaProtocoloParceiro($uid, $protocoloParceiro) {
$this->debug = debug_backtrace();
$this->query = "UPDATE pbx_protocolo_reg
SET protoparceiro='$protocoloParceiro'
WHERE uniqueid='$uid'";
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
########################################################################
#### INSTALACAO INTEGRACAO ####
########################################################################
public function findIntegracaoCustom() {
$this->debug = debug_backtrace();
$this->query = "SELECT itgp_id FROM pbx_integracao_protocolo WHERE itgp_descricao = 'Custom'";
$this->log->debug("Query: {$this->query}", $this->debug);
$return = $this->execute('assoc');
if (!$return['itgp_id']) {
$this->query = "INSERT INTO pbx_integracao_protocolo (itgt_id,itgp_id,itgp_descricao,itgp_status,itgp_prefix) VALUES(1,6,'Custom',0,'custom');";
$this->execute('assoc');
}
return 6;
}
public function findVersion($empresa = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT MAX(itgc_status) AS versao FROM pbx_integracao_configuracao where 1=1";
if($empresa){
$this->query .= "AND itgc_nome like '%$empresa%'";
}
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute('assoc');
}
public function createIntegracaoAtiva($nome, $versao, $comando) {
$this->debug = debug_backtrace();
$query = "insert into pbx_integracao_metodo(itgc_id, itgm_nome, itgm_comando, itgm_tipo, itgm_retorno, itgm_status, opcao, evento, stored_params, itgm_id_pai) values(%s,'%s','%s',%s,%s,%s,'%s',%s,'%s',%s) returning itgm_id;";
$this->query = "INSERT INTO pbx_integracao_configuracao "
. "(itgt_id, itgp_id, itgc_nome, itgc_host, itgc_port, itgc_database, itgc_user, itgc_password, itgc_timeout, itgc_status) "
. "VALUES (1, 6, '$nome', '127.0.0.1', '0', '0', '0', '0', '10', '$versao') RETURNING itgc_id; ";
$this->log->debug("Query: {$this->query}", $this->debug);
$return = $this->execute('assoc');
$this->query = sprintf($query, $return['itgc_id'], $nome, $comando, 1, 1, 0, 'anuncios', 'null', 'null', 'null');
$res = $this->execute('assoc');
unset($this->query);
for ($x = 2; $x < 4; $x++) {
$this->query .= sprintf($this->query, $return['itgc_id'], 'NOEXEC', 'NOEXEC', 1, 0, 0, 'null', $x, 'null', $res['itgm_id']);
}
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute('assoc');
}
/* Consulta no banco o nome da integracao metodo e retorna o ID;
*
* @param string $name
* @return string
*/
public function getIntegracaoMetodoByNameIntegracao($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT pim.itgm_id
FROM pbx_integracao_metodo pim INNER JOIN pbx_integracao_configuracao pic on pic.itgc_id = pim.itgc_id
WHERE pim.itgm_retorno = 1 AND pic.itgc_nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
######################### ANUNCIOS #########################
/*
* Inserir Anuncio
*/
public function addAnuncio($nome, $musica, $opcao = null, $acao = null) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_anuncios (nome, musica, opcao, acao)
VALUES('%s','%s','%s', '%s')", $nome, $musica, strtolower($opcao), $acao);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/* Consulta no banco o nome do Anuncio e retorna o ID;
*
* @param string $name
* @return string
*/
public function getAnuncioIdByName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_anuncios WHERE nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
/* Consulta no banco o id do Anuncio e retorna o nome;
*
* @param string $name
* @return string
*/
public function getAnuncioNameById($id = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_anuncios WHERE id = '$id'";
$result = $this->execute('row')[0];
return $result;
}
/* Atualiza no banco a acao e opcao do Anuncio;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateAnuncio($opcao, $acao, $id) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_anuncios
SET opcao='%s', acao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### URAS #########################
/*
* Inserir Ura
*/
public function addUra($nome, $som_ura, $tempo_espera = 5, $timeout_digito = 3, $permite_ligacao = 'N', $opcao = null, $acao = null) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_ura (nome, permite_ligacao, tempo_espera, som_ura, opcao, acao, timeout_digito)
VALUES('%s', '%s', %d, '%s', '%s', %d, '%s')", $nome, $permite_ligacao, $tempo_espera, $som_ura, strtolower($opcao), $acao, $timeout_digito);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/* Consulta no banco o nome do Ura e retorna o ID;
*
* @param string $name
* @return string
*/
public function getUraIdByName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_ura WHERE nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
/* Consulta no banco o ID do Ura e retorna o nome;
*
* @param string $name
* @return string
*/
public function getUraNameById($id = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_ura WHERE id = '$id'";
$result = $this->execute('row')[0];
return $result;
}
/* Atualiza no banco acao e opcao do Ura;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateUra($id, $opcao, $acao) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_ura
SET opcao='%s', acao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### URAS DESTINO #########################
/*
* Inserir Ura Destino
*/
public function addUraDestino($id_ura, $numero, $tipo, $comando = null, $sequencia, $nome_comando) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_ura_destino
(id_ura, numero, tipo, comando, sequencia, nome_comando)
VALUES(%d, '%s', '%s', '%s', %d, '%s')", $id_ura, $numero, $tipo, $comando, $sequencia, $nome_comando);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute(s);
}
/* Consulta no banco o nome do Ura e retorna os destinos;
*
* @param string $name
* @return string
*/
public function getUraDestinosIdByUraName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT pud.* FROM pbx_ura_destino pud inner join pbx_ura pu on pu.id = pud.id_ura WHERE pu.nome ='$name'";
$result = $this->execute('all');
return $result;
}
/* Atualiza no banco acao e opcao do Ura;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateUraDestino($opcao, $acao, $id) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_ura
SET opcao='%s', acao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### HORARIOS #########################
/*
* Inserir Horario
*/
public function addHorario($nome, $opcao = null, $acao = null, $status = 1) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_horarios
(nome, opcao_nao, acao_nao, status)
VALUES('%s', '%s', %d, %d)", $nome, strtolower($opcao), $acao, $status);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/* Consulta no banco o nome do Horario e retorna o ID;
*
* @param string $name
* @return string
*/
public function getHorarioIdByName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT id FROM pbx_horarios WHERE nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
/* Consulta no banco o ID do Horario e retorna o nome;
*
* @param string $name
* @return string
*/
public function getHorarioNameById($id = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_horarios WHERE nome = '$id'";
$result = $this->execute('row')[0];
return $result;
}
/* Atualiza no banco opcao e acao do Horario;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateHorario($id, $opcao, $acao) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_horarios
SET opcao_nao='%s', acao_nao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### HORARIOS ITENS #########################
/*
* Inserir Horario
*/
public function addHorarioItens($id_horario, $horario_ini = '08:00', $horario_fim = '17:59', $dias_semana = 0, $semana = 'mon', $semana_fim = 'fri', $opcao = null, $acao = null) {
$this->debug = debug_backtrace();
$this->query = sprintf("INSERT INTO pbx_horarios_itens
(id_horario, horario_inicio, horario_fim, todos_dias_semana, semana, semana_fim, opcao, acao)
VALUES(%d, '%s', '%s', %d, '%s', '%s', '%s', '%s')", $id_horario, $horario_ini, $horario_fim, $dias_semana, $semana, $semana_fim, $opcao, $acao);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
/* Consulta no banco o nome do Horario retornar Horario Itens;
*
* @param string $name
* @return string
*/
public function getHorarioItensByHorarioName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT phi.* FROM pbx_horarios_itens phi INNER JOIN pbx_horarios ph ON ph.id = phi.id_horario WHERE ph.nome = '$name'";
$result = $this->execute('all');
return $result;
}
/* Atualiza no banco a opcao e acao do Horario Item;
*
* @param $opcao $acao Iid
* @return string
*/
public function updateItemHorario($opcao, $acao, $id) {
$this->debug = debug_backtrace();
$this->query = sprintf("UPDATE pbx_horarios_itens
SET opcao='%s', acao='%s'
WHERE id=%d", strtolower($opcao), $acao, $id);
$this->log->debug("Query: {$this->query}", $this->debug);
return $this->execute();
}
######################### FILAS #########################
/* Consulta no banco o nome da Fila e retorna o numero;
*
* @param string $name
* @return string
*/
public function getFilaNumeroByName($name = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT numero FROM pbx_queues_grupos WHERE nome = '$name'";
$result = $this->execute('row')[0];
return $result;
}
/* Consulta no banco o numero da Fila e retorna o Nome;
*
* @param string $name
* @return string
*/
public function getFilaNameByNumero($numero = null) {
$this->debug = debug_backtrace();
$this->query = "SELECT nome FROM pbx_queues_grupos WHERE numero = '$numero'";
$result = $this->execute('row')[0];
return $result;
}
######################### HELPERS INSTALL ########################
public function getIdDirecionamento($tipo, $nome){
switch ($tipo) {
case CONF_URA:
return $this->getUraIdByName($nome) . "-" . $nome;
break;
case CONF_ANUNCIOS:
return $this->getAnuncioIdByName($nome);
break;
case CONF_HORARIO:
return $this->getHorarioIdByName($nome);
break;
case CONF_INTEGRACAO:
return $this->getIntegracaoMetodoByNameIntegracao($nome);
break;
case CONF_FILAS:
return $this->getFilaNumeroByName($nome);
break;
default:
break;
}
}
public function getNomeDirecionamento($tipo, $id){
$id = intval($id);
switch ($tipo) {
case CONF_URA:
return $this->getUraNameById($id);
break;
case CONF_ANUNCIOS:
return $this->getAnuncioNameById($id);
break;
case CONF_HORARIO:
return $this->getHorarioNameById($id);
break;
case CONF_INTEGRACAO:
return null;
break;
case CONF_FILAS:
return $this->getFilaNameByNumero($id);
break;
default:
break;
}
}
public function redirectUraDestino($ura, $status, $nomenclatura){
$ura_destinos = $this->getUraDestinosIdByUraName($ura.$nomenclatura);
foreach($ura_destinos as $destino){
if($destino['numero'] == strtoupper($status)){
return array(
"TIPO" => str_replace("s","",trim($destino['tipo'])),
"NOME" => $this->getNomeDirecionamento(trim($destino['tipo']), $destino['comando'])
);
}
}
return array("TIPO" => "ANUNCIO", "NOME" => CONF_AUDIO_ERROR.$nomenclatura);//DEFAULT
}
}

157
Clientes/onlineCertificadora/Logger.php

@ -0,0 +1,157 @@
<?php
/**
* Classe para utilizar
*
* @documentation:
* @author Lucas Awade
* @function developer
* @company SimplesIP
* @version 1.0.0
*/
class Logger {
/*
* GENERATE LOG
*/
private $active;
private $log;
private $type;
private $text;
/*
* CONF. FILE LOG
*/
private $file;
private $path;
private $name;
/*
* CONST. MESSAGE TYPE
*/
const LOG_SUCCESS = "SUCCESS";
const LOG_DEBUG = "DEBUG";
const LOG_INFO = "INFO";
const LOG_WARNING = "WARNING";
const LOG_ERROR = "ERROR";
public function __construct($nameLog, $active = false, $path = "/var/log/asterisk/") {
$this->name = $nameLog;
$this->path = $path;
$this->active = $active;
$this->config($nameLog);
}
########################################################################
## TYPES ##
########################################################################
public function success($log, $debug_trace = null) {
$this->type = self::LOG_SUCCESS;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : debug_backtrace());
$this->write();
}
public function debug($log, $debug_trace = null) {
$this->type = self::LOG_DEBUG;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : $this->name);
$this->write();
}
public function info($log, $debug_trace = null) {
$this->type = self::LOG_INFO;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : $this->name);
$this->write();
}
public function error($log, $debug_trace = null) {
$this->type = self::LOG_ERROR;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : $this->name);
$this->write();
}
public function warning($log, $debug_trace = null) {
$this->type = self::LOG_WARNING;
$this->text = $log;
$this->header($log, $debug_trace ? $debug_trace : $this->name);
$this->write();
}
########################################################################
## IMPORTANT ##
########################################################################
private function write() {
if ($this->active) {
file_put_contents($this->file, $this->log, FILE_APPEND);
}
}
private function header($log, $debug_trace) {
$this->log = "________________________________________________________________________________________\n";
if(is_array($debug_trace)){
$method = $debug_trace[0]['class'] ? "{$debug_trace[0]['class']}::{$debug_trace[0]['function']}" : $debug_trace[0]['function'];
$args = null;
if(count($debug_trace[0]['args']) > 0){
foreach($debug_trace[0]['args'] as $key => $arg){
$x++;
$args .= $arg;
if(count($debug_trace[0]['args']) != $x){
$args .= ",";
}
}
}
$this->log .= sprintf("\n[ %s ][ LINE %s ][ %s ][ ARGS ($args) ][ %s ]\n\n", date('d/m/Y H:i:s'), $debug_trace[0]['line'], $method, $this->type);
} else {
$this->log .= sprintf("\n[ %s ][ %s ][ %s ]\n\n", date('d/m/Y H:i:s'), $debug_trace, $this->type);
}
$this->log .= "> " . $log;
$this->log .= "\n\n ---------------------------------- [ FINISH LOGGER ] ----------------------------------\n\n";
}
public function openLog() {
//$file = fopen($this->file, 'rb');
}
public function locateLog() {
echo "\n\n {$this->file} \n\n";
}
########################################################################
## CONFIGS ##
########################################################################
public function config($name, $exten = ".log", $prefix = null) {
if (file_exists($this->file)) {
$contents = file_get_contents($this->file);
}
$this->file = trim($this->path . $prefix . ($name ? $name : $this->name) . $exten);
file_put_contents($this->file, $contents ? $contents : "", FILE_APPEND);
}
public function getType() {
return $this->type;
}
public function getText(){
return $this->text;
}
public function setLogger($active) {
if ($this->active === true) {
$this->active = $active;
} else if ($active === false) {
$this->active = $active;
} else {
$this->active = true;
}
}
}

430
Clientes/onlineCertificadora/Movidesk.php

@ -0,0 +1,430 @@
<?php
require_once 'Integracao.php';
include "config.php";
/**
* DESCRICAO DO DESENVOLVEDOR
* @documentation https://atendimento.movidesk.com/kb/pt-br/article/32178/api-do-movidesk-telefonia-sem-controle-da-fila
* @documentation https://atendimento.movidesk.com/kb/pt-br/article/18625/api-do-movidesk-telefonia
* @author Lucas Awade
* @function developer
* @company SimplesIP
* @version 1.0.0
*/
class Movidesk extends Integracao {
private $token;
private $url;
private $metodo;
private $query;
private $curl;
private $debug;
private $params = array();
########################################################################
## FUNCOES DA API ##
########################################################################
/**
* Inicia a transferencia para o ramal!
* Request = GET
* OBS: Sem Controle de Fila
* @param string $id = uniqueid da Chamada
* @param string $queueId = Id da Fila
* @param string $clientNumber = Numero de Origem
* @param string $branchLine = Ramal do agente para qual a chamada foi transferida.
* @param timestamp $callDate = Data da ligacao | Formato -> [2020-01-01 00:00:00]
* @param timestamp $transferDate = Data da transferencia | Formato -> [2020-01-01 00:00:00]
* @return boolean
*/
public function startTransferedCall($id, $queueId, $clientNumber, $branchLine, $callDate, $transferDate) {
$this->debug = debug_backtrace();
$this->log->debug("uniqueid: $id,$queueId, $clientNumber, $branchLine, $callDate, $transferDate");
if ($this->getArgs(func_get_args())) {
$this->setMetodo("asterisk_startTransferedCall");
$this->request('GET');
$this->params['queueId'] = $queueId;
$this->params['clientNumber'] = $clientNumber;
$this->params['id'] = $id;
$this->params['branchLine'] = $branchLine;
$this->params['callDate'] = $this->dateUTC($callDate);
$this->params['transferDate'] = $this->dateUTC($transferDate);
return $this->setParams();
} else {
return false;
}
}
/**
* Informa que a chamada foi abandonada/cancelada
* Request = GET
* OBS: Sem Controle de Fila
* @param string $id = uniqueid da Chamada
* @param string $queueId = Id da Fila
* @param string $clientNumber = Numero de Origem
* @param timestamp $callDate = Data da ligacao | Formato -> [2020-01-01 00:00:00]
* @param timestamp $canceledDate = Data da transferencia | Formato -> [2020-01-01 00:00:00]
* @return boolean
*/
public function startCanceledCall($id, $queueId, $clientNumber, $callDate, $canceledDate) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("asterisk_startCanceledCall");
$this->request('GET');
$this->params['queueId'] = $queueId;
$this->params['clientNumber'] = $clientNumber;
$this->params['id'] = $id;
$this->params['callDate'] = $this->dateUTC($callDate);
$this->params['canceledDate'] = $this->dateUTC($canceledDate);
return $this->setParams();
} else {
return false;
}
}
/**
* Informa que a chamada foi recebida
* Request = POST
* OBS: Com Controle de Fila
*
* @param string $id = uniqueid da Chamada
* @param string $queueId = Id da Fila
* @param string $clientNumber = Numero de Origem
* @param string $branchLine = Ramal do agente para qual a chamada foi transferida.
* @param timestamp $callDate = Data da ligacao | Formato -> [2020-01-01 00:00:00]
* @param string $request
* @return boolean
*/
public function receivedCall($id, $queueId, $clientNumber, $branchLine, $callDate) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("asterisk_receivedCall");
$this->request("POST");
$this->params['queueId'] = $queueId;
$this->params['clientNumber'] = $clientNumber;
$this->params['id'] = $id;
$this->params['branchLine'] = $branchLine;
$this->params['callDate'] = $this->dateUTC($callDate);
return $this->setParams();
} else {
return false;
}
}
/**
* Informa que a chamada foi transferida
* Request = POST
* OBS: Com Controle de Fila
* @param string $id = uniqueid da Chamada
* @param string $queueId = Id da Fila
* @param string $branchLine = Ramal do agente para qual a chamada foi transferida.
* @param timestamp $transferDate = Data da ligacao | Formato -> [2020-01-01 00:00:00]
* @return boolean
*/
public function transferedCall($id, $queueId, $branchLine, $transferDate) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("asterisk_transferedCall");
$this->request('POST');
$this->params['queueId'] = $queueId;
$this->params['id'] = $id;
$this->params['branchLine'] = $branchLine;
$this->params['transferDate'] = $this->dateUTC($transferDate);
return $this->setParams();
} else {
return false;
}
}
/**
* Informa que a chamada foi Completada
* Request = POST
* OBS: Com Controle de Fila
* @param string $id = uniqueid da Chamada
* @param string $link = link do audio da Chamada
* @param string $completedDate = Data da ligacao | Formato -> [2020-01-01 00:00:00]
* @return boolean
*/
public function completedCall($id, $completedDate, $link = '', $request = 'GET') {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("asterisk_completedCall");
$this->request(strtoupper($request) == 'GET' ? strtoupper($request) : strtoupper("POST"));
$this->params['link'] = $link;
$this->params['id'] = $id;
$this->params['completedDate'] = $this->dateUTC($completedDate);
return $this->setParams();
} else {
return false;
}
}
/**
* Informa que a chamada foi Perdida
* Request = POST
* OBS: Com Controle de Fila
* @param string $id = uniqueid da Chamada
* @param string $link = link do audio da Chamada
* @param string $completedDate = Data da ligacao | Formato -> [2020-01-01 00:00:00]
* @return boolean
*/
public function lostCall($id, $link, $completedDate) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("asterisk_lostCall");
$this->request('POST');
$this->params['link'] = $link;
$this->params['id'] = $id;
$this->params['transferDate'] = $this->dateUTC($completedDate);
return $this->setParams();
} else {
return false;
}
}
/**
* Informa que a chamada foi cancelada
* Request = POST
* OBS: Com Controle de Fila
* @param string $id = uniqueid
* @param string $canceledDate = Data da ligacao | Formato -> [2020-01-01 00:00:00]
* @return boolean
*/
public function canceledCall($id, $canceledDate) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("asterisk_canceledCall");
$this->request('POST');
$this->params['id'] = $id;
$this->params['transferDate'] = $this->dateUTC($canceledDate);
return $this->setParams();
} else {
return false;
}
}
/**
* Cria um ticket na plataforma de acordo com os dados passados.
* @param int $id
* @param int $type
* @param string $status
* @param string $email
* @param string $telefone
* @param string $descricao
* @return boolean|array
*/
public function createTicket($id, $type, $status, $personType, $profileType, $email, $telefone, $descricao) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("tickets");
$this->request('POST');
$this->params['type'] = $type;
$this->params['urgency'] = $status;
$this->params['origin'] = 9;
$this->params['createdBy'] = array("id" => $id);
$this->params['clients'] = array(
array(
"id" => $id,
"personType" => $personType,
"profileType" => $profileType,
"businessName" => $id,
"email" => $email,
"phone" => $telefone
)
);
$this->params['actions'] = array(
array(
"type" => $type,
"origin" => 9,
"description" => $descricao
)
);
return $this->setParams();
} else {
return false;
}
}
########################################################################
## FUNCOES DEFAULT DA CLASSE ##
########################################################################
/**
* Coleta as informacoes iniciais para o inicio da integracao com a API.
*
* @param string $token
* @param string $url
* @param boolean $log
*/
public function __construct($token, $url) {
$this->token = $token;
$this->url = $url;
$this->setLog(CONF_LOGGER_ATIVO);
$this->log->info("Iniciando integracao", debug_backtrace());
}
private function dateUTC($data) {
$dt = new DateTime($data);
$dt->setTimeZone(new DateTimeZone('UTC'));
return $dt->format('Y-m-d\TH:i:s');
}
/**
* Informa o tipo de requisicao que sera feita pela cURL
* @param bool $request
*/
private function request($request = null) {
if (!$this->request || $request) {
$this->request = (strtoupper($request) == 'POST' ? strtoupper($request) : "GET");
}
$this->log->debug("HTTP Request: " . $this->request, debug_backtrace());
return $this->request;
}
/**
* Parametriza o metodo utilizado para a consulta.
*
* @param type $metodo
*/
private function setMetodo($metodo) {
$this->metodo = $metodo;
}
/**
* Escreve a query para ser passada para o curl
*
* @param string $query
*/
private function setQuery($query) {
return $this->query .= $query;
}
/**
* retorna a string pronta da query do curl e limpa a variavel.
*
* @return string $query
*/
private function getQuery() {
$query = $this->query;
unset($this->query);
return $query;
}
/**
* Constroi de forma dinamica a string para ser passada para a execucao do Curl
*
* @void
*/
private function curl() {
$this->log->debug("Query: " . $this->query, debug_backtrace());
$header = array('Content-Type: application/json; charset=utf-8');
$this->curl = curl_init();
curl_setopt($this->curl, CURLOPT_URL, $this->url . $this->metodo . ($this->request() == "GET" ? $this->getQuery() : null));
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
if ($this->request() == "POST") {
curl_setopt($this->curl, CURLOPT_POST, 1);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $this->getQuery());
$header[] = "token: " . $this->token;
}
curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($this->curl, CURLOPT_HTTPHEADER, $header);
/*
* Final da linha para pegar os dados da variavel
*/
$this->log->debug("Curl: {$this->curl}", debug_backtrace());
}
/**
* Recebe array de forma de indice e valor
*
* @example array("qtype" => 'test_api', "query" => '123', "oper" => '=')
*
* @obs sempre chamar a função debug_backtrace() para ser disponível em log
*
* @param type $params
* @debug_track function debug_backtrace()
*/
private function setParams() {
$x = 0;
if ($this->request() == "POST") {
$this->setQuery("{");
foreach ($this->params as $key => $param) {
$x++;
if (is_array($param[0])) {
$this->log->debug("Data: " . print_r($param[0], true), debug_backtrace());
$this->setQuery(sprintf('"%s": [%s]', $key, json_encode($param[0])));
} else if (is_array($param)) {
$this->setQuery(sprintf('"%s" : {', $key));
foreach($param as $k => $val){
$this->setQuery(sprintf('"%s": %s', $k, $val));
}
$this->setQuery("}");
} else {
$this->setQuery("\"{$key}\": \"$param\"");
}
if ($x == count($this->params)) {
$this->setQuery("} ");
} else {
$this->setQuery(",");
}
unset($param);
}
} else {
if ($this->params) {
$this->setQuery("?token={$this->token}&");
foreach ($this->params as $key => $value) {
$this->setQuery("{$key}=$value");
if (count($this->params) != ++$x) {
$this->setQuery("&");
}
}
}
}
unset($this->params);
$response = $this->exec();
return $this->response($response);
}
/**
* Recebe as informações e realiza a execucao da API
*
* @void
*/
private function exec() {
$respondeCurl = array();
$this->curl();
$response = curl_exec($this->curl);
if (curl_errno($this->curl)) {
$this->log->error(curl_error($this->curl), debug_backtrace());
curl_close($this->curl);
// $this->audioError();
return false;
}
$respondeCurl['execute'] = json_decode($response, true);
$respondeCurl['curl_response'] = curl_getinfo($this->curl, CURLINFO_HTTP_CODE);
curl_close($this->curl);
return $respondeCurl;
}
/**
* Prepara dos dados para ser transmitidos para o metodo a ser retornado a
* integracao.
*
* @return array
*/
private function response($data) {
$this->log->debug("Reponse API: " . print_r($data, true), $this->debug);
if ($data) {
return $data;
} else {
return false;
}
}
}

258
Clientes/onlineCertificadora/SimpleMail.php

@ -0,0 +1,258 @@
<?php
/**
* Classe para implementacao envio de Emails em Massa ou único!
*
* @author Lucas Awade
* @Desenvolvedor
* @version 1.1.0
*/
require("phpmailer/class.phpmailer.php");
class SimpleMail {
########################################################################
## CONFIGURACOES CLASSE ##
########################################################################
private $log;
private $limit;
private $sended = 0;
private $mailer;
########################################################################
## CONFIGURACOES MAIL ##
########################################################################
private $host;
private $port;
private $smtpAuth;
private $smtpSecure;
private $charset;
private $mail;
private $passwd;
private $title;
private $subject;
########################################################################
## CONFIGURACOES DEFAULT ##
########################################################################
public function __construct($mail, $passwd, $subject, $logger = false) {
$this->log = new Logger('simplesmailer', $logger, "/var/log/");
if ($mail && $passwd && $subject) {
$this->mail = $mail;
$this->passwd = $passwd;
$this->subject = $subject;
$this->phpMailer();
} else {
$this->log->error('Nao foi possivel instanciar a Classe SimplesMail,informacoes incompletas!', debug_backtrace());
}
}
/**
* Metodo de configuração do Host de Envio;
* @param string $host
* @param string|int $port
* @param string $title
* @param boolean $smtpAuth
* @param string $smtpSecure
* @param string $charset
*/
public function config($host, $port, $title, $smtpAuth = true, $smtpSecure = 'TLS', $charset = 'UTF8') {
$this->host = $host;
$this->port = $port;
$this->title = $title;
$this->smtpAuth = $smtpAuth;
$this->smtpSecure = $smtpSecure;
$this->charset = $charset;
$this->phpMailer();
}
/**
* Informa um limite de email em massa a ser enviado.
*
* @param int $limit
*/
public function limitSend($limit) {
$this->log->debug('Limite de Email: ' . $limit, debug_backtrace());
$this->limit = $limit;
}
/**
* Mensagem escrito em HTML para envio de um email elaborado.
*
* Os dados em $data devem ser em formato array como o exemplo:
* array("MSG_HEADER" => 'Seja Bem vindo', "MSG_FOOTER" => 'Volte Sempre');
*
* @param string $path
* @param array $data
*/
public function pathBodyMail($path, $data) {
$this->log->info('Path HTML Body: ' . $path, debug_backtrace());
$contents = file_get_contents($path);
foreach ($data as $key => $value) {
$contents = str_replace($key, $value, $contents);
}
$this->mailer->Body = $contents;
}
/**
* Mensagem simples para o envio rapido de um email.
*
* @param string $message
*/
public function bodyMessage($message) {
$this->mailer->Body = $message;
}
/**
* Adiciona no email anexos para serem enviados
* @param array|string $files
*/
public function setAddAttachment($files) {
if ($files) {
if (is_array($files)) {
foreach ($files as $name => $file) {
$this->mailer->AddAttachment($file, (is_numeric($name) ? '' : $name));
}
} else {
$this->mailer->AddAttachment($files);
}
}
}
/**
* Adiciona no email imagens para visualizadas.
*
* #=> Caso o paramtro for um array seu corpo deve ser enviado da seguinte forma:
* $cid = array('minha_img_jpg' => 'img/path/mail/header.jpg');
*
* #=> Caso for uma string deve se passar o cid caso contrario gera um cid randomico;
*
* @param array|string $images
*/
public function setAddEmbeddedImage($images, $cid = null) {
if ($images) {
if (is_array($images)) {
foreach ($images as $name => $image) {
$this->mailer->AddEmbeddedImage($image, $name);
}
} else {
$cid = $cid ? $cid : rand(100, 999999);
$this->mailer->AddEmbeddedImage($image, $cid);
}
}
}
/**
* Esta funcao envia os email em massa ou unicos.
*
* Email em massa é necessario passar um array com os emails seu indice que representa o email.
*
* Email unico so é preciso passar o email na variavel $data;
*
* @param array|string $data
* @param string $indice
* @return array|boolean
*/
public function mailing($data, $indice = '') {
if (is_array($data)) {
$invalid = array();
foreach ($data as $mail) {
if ($this->sended <= $this->limit) {
$mail = $indice ? $mail[$indice] : $mail;
$this->setSended();
if (!$this->send($mail)) {
$invalid[] = $mail;
}
}
}
return $invalid;
} else {
if ($this->send($data)) {
$this->setSended();
return true;
} else {
return false;
}
}
}
public function getErrorSend(){
return $this->mailer->ErrorInfo;
}
########################################################################
## ENVIO MAIL ##
########################################################################
/**
* Gerencia a quantidade de email que esta sendo enviado.
*/
private function setSended() {
$this->sended++;
}
/**
* Gerencia o envio do email para estar sempre no limite de envio.
*
* @return boolean
*/
public function getSended() {
$this->log->debug("Sended: " . $this->sended, debug_backtrace());
if ($this->sended < $this->limit) {
return true;
} else {
return false;
}
}
/**
* Metodo responsavel para realizar o envio do email.
*
* @param string $mailFrom
* @return boolean
*/
private function send($mailFrom) {
if (!$this->mailer) {
$this->log->error("Objeto nao criado!", debug_backtrace());
return false;
}
try {
$this->mailer->setFrom($this->mail, $this->title);
$this->mailer->addAddress($mailFrom, $this->title);
$this->mailer->send();
$this->mailer->clearAllRecipients();
$this->log->success("Mail: {$mailFrom} | Send Queue: {$this->sended}", debug_backtrace());
return true;
} catch (Exception $ex) {
if ($this->mailer->ErrorInfo) {
$this->log->error("ErrorInfo Mail: " . $this->mailer->ErrorInfo . " | Exception Mail: {$mailFrom} >> " . $ex->getMessage(), debug_backtrace());
}
}
}
/**
* Cria as configurações e parametros para ser implementado e enviado os emails.
*
* @void null
*/
private function phpMailer() {
$this->log->debug("Instanciando objeto PHPMailer", debug_backtrace());
$this->mailer = new PHPMailer(true);
$this->mailer->isSMTP();
$this->mailer->Host = $this->host;
$this->mailer->SMTPAuth = $this->smtpAuth;
$this->mailer->isHTML(true);
if ($this->smtpAuth) {
$this->mailer->SMTPSecure = $this->smtpSecure;
$this->mailer->Username = $this->mail;
$this->mailer->Password = $this->passwd;
}
$this->mailer->CharSet = $this->charset;
$this->mailer->Port = $this->port;
$this->mailer->Subject = $this->subject;
}
}

27
Clientes/onlineCertificadora/completaChamada.php

@ -0,0 +1,27 @@
<?php
require_once "Movidesk.php";
$host_central_interno = '127.0.0.1';
$registros = array(
"id" => '',
"reg_ura" => $ura,
"reg_tronco" => $tronco,
"reg_uniqueid" => $uid,
"reg_id_metodo" => $idMetodo,
"reg_uniqueid" => $uid,
"reg_uniqueid_old" => $uidOld,
"reg_fone" => $numero,
"reg_status_exec" => '1',
"reg_inicio" => date());
$movidesk = new Movidesk(CONF_TOKEN_API, CONF_URL_API);
$movidesk->db()->setRegistros($registros);
if (CONF_AUDIO_ERROR) {
$movidesk->db()->setIdAudioError(CONF_AUDIO_ERROR);
}
$movidesk->completedCall($uid, date('Y-m-d H:i:s'), "http://{$host_central_interno}/fileurl.php?url=" . base64_encode("integracao/?method=GetAudio&uniqueid=$uid&tipo=mp3&login=user.api&senha=0000&tipoRetorno=JSON/STREAM"));

6
Clientes/onlineCertificadora/confRotas.php

@ -0,0 +1,6 @@
<?php
$anuncioos = [
];

75
Clientes/onlineCertificadora/config.php

@ -0,0 +1,75 @@
<?php
###########################################################################
##### #####
##### ARQUIVO PARA A CONFIGURACAO DE ACESSO API #####
##### ----------------------------------------- #####
##### CREDENCIAIS DE ACESSO #####
###########################################################################
define('CONF_ID_CREDENCIAIS', '11');
define('CONF_TOKEN_API', '0fe8b64f-1ade-4084-bf97-72f0b9a22858');
define('CONF_URL_API', 'https://api.movidesk.com/public/v1/');
define('CONF_USER_API', 'SIMPLESIP');
define('CONF_PASSWORD_API', '25RH0QELJF');
define('CONF_USERID_API', '-445847518');
define('CONF_ID_CREDENCIAIS2', '12');
define('CONF_URL_GETAUDIO', 'http://voip.simplesip.com.br:8080/integracao/index.php?method=GetAudio&');
###########################################################################
##### CONFIGURACAO DE LOG #####
###########################################################################
define('CONF_LOGGER_ATIVO', true);
define('CONF_LOGGER_DB_ATIVO', false);
###########################################################################
##### CONFIGURACAO DE ERROR #####
###########################################################################
define('CONF_AUDIO_ERROR', '');
###########################################################################
##### CREDENCIAIS DE ENVIO DE EMAIL #####
###########################################################################
define('CONF_EMAIL_TITLE_INVOICE', '[NO-REPLY] NOVO CLIENTE');
define('CONF_EMAIL_SUBTITLE_INVOICE', 'CLIENTE IMPORTADO NO MOVIDESK!');
define('CONF_SENDER_EMAIL_USER', 'marketing@simplesip.com.br');
define('CONF_SENDER_EMAIL_PASSWORD', '$m@rk2t3ng_#');
define('CONF_SMTP_HOST', 'mail.simplesip.com.br');
define('CONF_SMTP_POST', '587');
###########################################################################
##### CONFIGURACAO PDO #####
###########################################################################
define('CONF_DB_DRIVER', "");
define('CONF_DB_HOST', "192.168.115.28");
define('CONF_DB_PORT', "");
define('CONF_DB_BASE', "VendaMaisDB_simplesip");
define('CONF_DB_USER', "integracao");
define('CONF_DB_PASSWD', "SimpleS_root");
define('CONF_DB_OPTIONS', "");
###########################################################################
##### CONFIGURACAO GERAÇÃO DE FATURA #####
###########################################################################
define('CONF_FATURA_DIAS_ANTES', 30);
define('CONF_FATURA_DIAS_APOS', 0);
###########################################################################
##### CONFIGURACAO CITSMART #####
###########################################################################
define('CONF_CONTACT_NAME', 'Consultor');
define('CONF_CONTACT_PHONENUMBER', '6199999999');
define('CONF_CONTACT_EMAIL', 'abcd.efgh@centralit.com.br');
define('CONF_CONTACT_DEPARTAMENT', 'Portal');
define('CONF_CONTACT_ID', '1157');
define('CONF_SERVICE_CODE', '4423');
define('CONF_INTEGRACAO_PLATAFORM', 'Integracao Notas MT');

26
Clientes/onlineCertificadora/registraChamada.php

@ -0,0 +1,26 @@
<?php
require_once "Movidesk.php";
$registros = array(
"id" => '',
"reg_ura" => $ura,
"reg_tronco" => $tronco,
"reg_uniqueid" => $uid,
"reg_id_metodo" => $idMetodo,
"reg_uniqueid" => $uid,
"reg_uniqueid_old" => $uidOld,
"reg_fone" => $numero,
"reg_status_exec" => '1',
"reg_inicio" => date());
$movidesk = new Movidesk(CONF_TOKEN_API, CONF_URL_API);
$movidesk->db()->setRegistros($registros);
if (CONF_AUDIO_ERROR) {
$movidesk->db()->setIdAudioError(CONF_AUDIO_ERROR);
}
$movidesk->agi()->exec_goto($movidesk->db()->getURA('URA ONLINE'));
$movidesk->db()->atualizaIntegracao();

31
Clientes/onlineCertificadora/transfereChamada.php

@ -0,0 +1,31 @@
<?php
require_once "Movidesk.php";
$registros = array(
"id" => '',
"reg_ura" => $ura,
"reg_tronco" => $tronco,
"reg_uniqueid" => $uid,
"reg_id_metodo" => $idMetodo,
"reg_uniqueid" => $uid,
"reg_uniqueid_old" => $uidOld,
"reg_fone" => $numero,
"reg_status_exec" => '1',
"reg_inicio" => date());
$movidesk = new Movidesk(CONF_TOKEN_API, CONF_URL_API);
$movidesk->db()->setRegistros($registros);
if (CONF_AUDIO_ERROR) {
$movidesk->db()->setIdAudioError(CONF_AUDIO_ERROR);
}
if (isset($argv[8]) && isset($argv[10])) {
$movidesk->log()->debug("argv: " . $uid, explode('-', $argv[8])[0], $argv[5], $argv[4], $argv[10], date('Y-m-d H:i:s'));
$resp = $movidesk->startTransferedCall($uid, explode('-', $argv[8])[0], $argv[5], $argv[4], $argv[10], date('Y-m-d H:i:s'));
$movidesk->log()->debug("Response: " . print_r($resp, true));
}
$movidesk->db()->atualizaIntegracao();

1
DefaultClass.php

@ -65,6 +65,7 @@
$this->token = $token;
$this->url = $url;
$this->setLog(CONF_LOGGER_ATIVO);
$this->integracaoReg();
$this->log->info("Iniciando integracao", debug_backtrace());
}

555
audio.php

@ -0,0 +1,555 @@
<?php
/*
* Trata requisição de audio
*/
$exitAudio = 0;
if (isset($_REQUEST['nomeRamalMonitorar'])) {
ConfigRamalMonitorar();
exit;
}
GetAudioFoneAutomatico($_GET['audioFoneAuto']);
if (isset($_GET['audioMobile'])) {
$dir = "/var/www/html/aplicativo/audio/";
$filepath = VerificaCharFinal($_SESSION[SS_PRM_PATH_AUDIO]) . $_GET["audio"];
$fileOrig = $dir . $_GET["audio"];
@file_put_contents($fileOrig, @file_get_contents($filepath));
$audioMobile = $_GET['audioMobile'];
$file = $dir . $audioMobile;
if (!file_exists($file)) {
$cmd = "ffmpeg -i $fileOrig -acodec libmp3lame $file";
//$cmd = "ffmpeg -i $fileOrig -f mp3 $file";
$dbcon = $GLOBALS['dbcon'];
ExecutaComando($cmd, $dbcon);
}
$file = "/audio/" . $audioMobile;
@header("Location: $file");
exit;
}
if (isset($_GET["audio"]) || isset($_GET["repAudio"])) {
$file = $_GET["audio"] ? $_GET["audio"] : $_GET["repAudio"];
$filepath = VerificaCharFinal($_SESSION[SS_PRM_PATH_AUDIO]) . $_GET["audio"];
if (!@file_get_contents($filepath)) {
$jsStartup[] = "alert('Arquivo não encontrado!');";
$exitAudio = 1;
} else {
if (isset($_GET["audio"])) {
$proto = $_GET['proto'] != '-' ? $_GET['proto'] : '';
DownloadAudio($file, $filepath, 'wav', $proto, $_GET['dataAudio']);
exit;
}
}
}
if (isset($_GET['audioFone'])) {
global $debugAmi;
//$debugAmi = false;
$cmd = array();
$uid_registro = $_GET['audioFone'];
if (strpos($uid_registro, 'AUTO') !== false) {
$uid_registro = explode('|', $uid_registro)[1];
$cmd["Channel"] = sprintf('Local/%s@app-callcenter', GetRamalMonitorar(RAMAL_MONITOR_AUDIO));
} else {
$cmd["Channel"] = GetRamalMonitorar(CANAL_MONITOR_AUDIO);
}
$cmd["Action"] = "Originate";
$cmd["Context"] = 'audio-escuta-apl';
$cmd["Exten"] = 's';
$cmd["Priority"] = '1';
$cmd["CallerID"] = GetRamalMonitorar(RAMAL_MONITOR_AUDIO);
$cmd["Variable"] = sprintf("AVISO=OK,AUDIO=%s", $uid_registro);
$retCmd = CommandoAmi($cmd);
if ($retCmd === false) {
echo "ERRO";
} else {
$retCmd = strtoupper(trim($retCmd));
echo $retCmd == 'OK' ? "OK" : "ERRO";
}
exit;
}
if (isset($_GET['audioRamalEscuta'])) {
$audioRamalEscuta = $_GET['audioRamalEscuta'];
echo "OK;$audioRamalEscuta";
exit;
}
if (!IsAjax()) {
$getAgt = 0;
$getClass = 0;
$getItem = 0;
if (!IsPostBack() && !$exitAudio && !isset($_GET['pgn'])) {
$_SESSION["listaDacs"] = !IsAjax() ? GetIdDacPadrao($dbcon, $_SESSION["SSidUser"]) : $_GET["listaDacs"];
$_SESSION["dataIni"] = !IsAjax() ? date('d/m/Y') : $_GET["dataIni"];
$_SESSION["dataFim"] = !IsAjax() ? date('d/m/Y') : $_GET["dataFim"];
$_SESSION["tipoConsulta"] = "0";
$_SESSION["listaAgente"] = 0;
$_SESSION["listaItem"] = "0";
$_SESSION["listaClass"] = "0";
$colspan = 10;
$mostaCallcenter = true;
} else {
if (!$exitAudio) {
$trocaDac = $_SESSION["listaDacs"] != trim($_REQUEST["listaDacs"]);
$_SESSION["listaDacs"] = trim($_REQUEST["listaDacs"]);
$_SESSION["listaAgente"] = trim($_REQUEST["listaAgente"]);
$_SESSION["listaItem"] = trim($_REQUEST["listaItem"]);
$_SESSION["listaClass"] = trim($_REQUEST["listaClass"]);
$_SESSION["dataIni"] = trim($_REQUEST["dataIni"]);
$_SESSION["dataFim"] = trim($_REQUEST["dataFim"]);
$_SESSION["src"] = trim($_REQUEST["src"]);
$_SESSION["dst"] = trim($_REQUEST["dst"]);
$_SESSION["proto"] = trim($_REQUEST["proto"]);
$_SESSION["tipoConsulta"] = trim($_REQUEST["tipoConsulta"]);
}
$mostaCallcenter = ($_SESSION["tipoConsulta"] == 0) || ($_SESSION["tipoConsulta"] == 2);
$imp = 0;
$linhas = "";
$downloadAudio = VerificaPerfilAcesso($dbcon, GetIdProgFromNomeArq('downloadAudio.php'));
$params = array('listaDacs', 'listaAgente', 'listaItem', 'listaClass', 'dataIni', 'dataFim', 'src', 'dst', 'tipoConsulta');
$param = '';
foreach ($params as $nomeParam) {
$param .= sprintf('&%s=%s', $nomeParam, $_REQUEST[$nomeParam]);
}
$setQuery = GetQuery($dbcon);
$pagMostra = 0;
$links = PaginaDados($idProg, $setQuery, $param, $regPagina, $offSet, $pagMostra, true);
$setQuery .= " limit $regPagina offset $offSet";
$result = @pg_query($dbcon, $setQuery);
$colspan = $mostaCallcenter ? 10 : 5;
$contaReg = 0;
while ($dados = @pg_fetch_array($result)) {
$userField = trim($dados["userfield"]);
$acessoAudio = $dados["acesso_audio"];
$tipoChamada = $dados["tipo"];
$linkAudio = '';
$msgAudio = '';
$proto = !$dados["protocolo"] ? '-' : substr($dados["protocolo"], 0, 4) . '-' . substr($dados["protocolo"], 4, 6);
$dataAudio = date('Y-m-d', strtotime($dados['calldate']));
if (!$acessoAudio || IsAdmin()) {
if (IsAdmin()) {
$msgAudio = "Usuário Administrador não tem permissão para acessar áudios!";
} else {
$msgAudio = $tipoChamada == 'PBX' ? "Verifique as permissões do usuário para acesso ao áudio na fila!" : "Este usuário possui restrição aos audios do referido ramal, verifique as permissões no grupo de usuários!";
}
$linkAudio = sprintf("<img src=\"imgSite/lockClose.gif\" width=\"22\" height=\"22\" title=\"%s\" border=\"0\">", $msgAudio);
$linkAudioFone = '';
} else {
if ($downloadAudio && $infoDispositivo->isMobile()) { //$infoDispositivo->isMobile
$audioMobile = str_ireplace(".WAV", ".MP3", $userField);
$linkAudio = "<a href=\"index.php?idProg=23&audioMobile=$audioMobile&proto=$proto&dataAudio=$dataAudio&audio=$userField\" style=\"color: #000;\" target=\"_blank\">" . "<img src=\"imgSite/audio-download-apl.png\" width=\"22\" height=\"22\" border=\"0\">" . "</a>";
} else if ($downloadAudio) {
$linkAudio = "<a href=\"index.php?idProg=23&proto=$proto&dataAudio=$dataAudio&audio=$userField\" style=\"color: #000;\">" . "<img src=\"imgSite/audio-download-apl.png\" border=\"0\">" . "</a>";
}
$uniqueid = trim($dados["uniqueid"]);
$audioFone = substr($userField, 0, -4);
$linkAudioFone = "<a href=\"javaScript:AudioEscutaApl('$audioFone');\" style=\"color: #000;\">" . "<img src=\"imgSite/audio-escuta-apl.png\" border=\"0\">" . "</a>";
}
$data = date('d/m/Y H:i:s', strtotime($dados['calldate']));
$duration = SecondToStrTime($dados['duration']);
$dados["src"] = strtoupper($dados["src"]) == "S" ? "-" : $dados["src"];
$dst = $dados["destino"];
$fila = !$dados['fila'] ? '-' : $dados['fila'];
$apelido = !$dados['apelido'] ? '-' : $dados['apelido'];
$tipo = $dados['direcao'];
//$proto = !$dados["protocolo"] ? '-' : substr($dados["protocolo"], 0, 4) . '-' . substr($dados["protocolo"], 4, 6);
$clasDesc = !$dados["clas_descricao"] ? '-' : $dados["clas_descricao"];
$ItemDesc = !$dados["clit_descricao"] ? '-' : $dados["clit_descricao"];
$linhas .= "<tr>";
if ($mostaCallcenter)
$linhas .= "<td align=\"left\" class=\"headData\">$fila</td>
<td align=\"left\" class=\"headData\">$apelido</td>\n";
$linhas .= "<td align=\"left\" class=\"headData\"> $data</td>
<td align=\"center\" class=\"headData\">$duration</td>
<td align=\"left\" class=\"headData\">$dados[src]</td>
<td align=\"left\" class=\"headData\">$dst</td>
<td align=\"left\" class=\"headData\">$tipo</td>\n";
if ($mostaCallcenter)
$linhas .= "<td align=\"center\" class=\"headData\">$proto</td>
<td align=\"center\" class=\"headData\">$clasDesc</td>
<td align=\"center\" class=\"headData\">$ItemDesc</td>\n";
$linhas .= "<td align=\"center\" class=\"headData\">$linkAudio &nbsp; $linkAudioFone</td>
</tr>";
$contaReg++;
}
} //Post Back
// ($dbcon, $codDac, $disableb = "", $incTodos = 0, $soAtivo = 1, $incCampanha = 0, $matricula = 0, $useNull = 0, $valueUseNull='', $useSelect=1)
$cssBlock = '<style type="text/css">#listaDacs { width:190px; } #listaAgente, #dataIni, #dataFim, #src, #dst{ width:120px; } #listaClass, #listaItem{ width:240px;} </style>';
$dacs = GetDac($dbcon, $_SESSION["listaDacs"], "", 1, 0, 1, 0, 0, '', 1, 1);
$agentes = GetAgtAudio($dbcon);
$class = GetClassAudio($dbcon);
$itemClas = GetClassItemAudio($dbcon);
$linhas .= "<tr>
<th colspan=\"$colspan\" align=\"center\" class=\"headColun\">Total de Registros</th>
<th align=\"center\" class=\"headColun\">$pagMostra de $totalReg</th>
</tr>";
$jsJQuery[] = "\$('#dataIni').keypress(function(){formataDataHora(this);}) ";
$jsJQuery[] = "\$('#dataFim').keypress(function(){formataDataHora(this);}) ";
//Tamanho da tabela dos filtros
$filtroWidth = 190;
$erro = '';
//if($isPostBack){$erro = ""; if(pg_last_error($dbcon)) $erro = "Ocorreram erros durante a operação. Erro: " . pg_last_error($dbcon);}
$smarty->assign('erro', $erro);
$smarty->assign('filtroWidth', $filtroWidth);
$smarty->assign('dtIni', IsPostBack() || $exitAudio || isset($_GET['pgn']) ? $_SESSION["dataIni"] : date('d/m/Y'));
$smarty->assign('dtFim', IsPostBack() || $exitAudio || isset($_GET['pgn']) ? $_SESSION["dataFim"] : date('d/m/Y'));
$smarty->assign('src', $_SESSION["src"]);
$smarty->assign('dst', $_SESSION["dst"]);
$smarty->assign('proto', $_SESSION["proto"]);
$smarty->assign('tipo', $_SESSION["tipoConsulta"]);
$smarty->assign('dacs', $dacs);
$smarty->assign('agentes', $agentes);
$smarty->assign('class', $class);
$smarty->assign('itemClas', $itemClas);
$smarty->assign('linhas', $linhas);
$smarty->assign('mostraCallcenter', $mostaCallcenter);
$smarty->assign('nomeRamalMonitor', (RAMAL_MONITOR_AUDIO));
$smarty->assign('canalRamallMonitor', (CANAL_MONITOR_AUDIO));
$smarty->assign('ramal_monitor', GetRamalMonitorar(RAMAL_MONITOR_AUDIO));
$smarty->assign('colspan', $colspan + 1);
$smarty->assign('links', $links);
GetTemplate($smarty, 'audio.tpl');
}
function GetQuery($db) {
//print "agente ".$_POST["listaAgente"]."<br>";
$dt = !soNumero($_SESSION["dataIni"]) ? "null" : FormatDtMssql($_SESSION["dataIni"]);
$dtFim = !soNumero($_SESSION["dataFim"]) ? "null" : FormatDtMssql($_SESSION["dataFim"]);
$src = !soNumero($_SESSION["src"]) ? "null" : soNumero($_SESSION["src"]);
$dst = !soNumero($_SESSION["dst"]) ? "null" : soNumero($_SESSION["dst"]);
$proto = !soNumero($_SESSION["proto"]) ? "null" : soNumero($_SESSION["proto"]);
$dac = $_SESSION["listaDacs"];
$agente = $_SESSION["listaAgente"];
$class = $_SESSION["listaClass"];
$classItem = $_SESSION["listaItem"];
$tipo = $_SESSION["tipoConsulta"];
return GetDadosRelAudio($db, $crcCode, $dt, $dtFim, $src, $dst, $proto, $tipo, $dac, $agente, $class, $classItem);
}
function GetDadosRelAudio($db, $crcCode, $dt, $dtFim, $src, $dst, $proto, $tipo, $dac, $agente, $class, $classItem) {
$query = '';
$verProto = soNumero($proto);
$isProto = !empty($verProto);
if ($src != 'null') {
$src = QuotedStr("%$src%");
}
if ($dst != 'null') {
$dst = QuotedStr("%$dst%");
}
if ($proto != 'null') {
$proto = QuotedStr($proto);
}
if ($dt != 'null') {
$dt = QuotedStr("$dt");
}
if ($dtFim != 'null') {
$dtFim = QuotedStr("$dtFim");
}
$idUser = GetIdUser();
$dacTd = explode("|", $dac);
$dacs = '';
$y = 0;
if ($dacTd[1]) {
$dacs .= "AND c.id IN (";
foreach ($dacTd as $nDac) {
if ($y != 0) {
$dacs .= ", ";
}
$dacs .= "$nDac ";
$y = 1;
}
$dacs .= ") ";
} else {
$dac = "AND c.id = $dac ";
}
/*
* Variaveis globais indicam o tipo de query executada no momento,
* esses valores são modificados dentro das funções GetAgtAudio(), GetClassAudio(), GetClassItemAudio(),
* ou seja todos usam GetQuery para retornar uma query especifica para cada situação.
*/
$getAgt = isset($GLOBALS['getAgt']) && $GLOBALS['getAgt'];
$getClass = isset($GLOBALS['getClass']) && $GLOBALS['getClass'];
$getItem = isset($GLOBALS['getItem']) && $GLOBALS['getItem'];
if ((($tipo == 1) or ( $tipo == 2)) && !($getAgt || $getClass || $getItem)) {
$query = "drop table if exists tmp_restricao_ramal;
create temporary table tmp_restricao_ramal as
SELECT distinct x.nome FROM pbx_grupo_audio_ramal x, pbx_grupo_usuario y WHERE y.gp_id = x.gp_id AND y.user_id = '{$idUser}';
create index \"tmpRestricaoRamalNome\" on tmp_restricao_ramal(nome);\n\n";
}
$addPdx = !($getAgt || $getClass || $getItem);
if (($tipo == 0) || ($tipo == 2) || ($isProto)) {
if ($getAgt) {
$query .= "SELECT DISTINCT d.matricula, d.apelido\n";
} else if ($getClass) {
$query .= "SELECT DISTINCT h.clas_id, h.clas_descricao\n";
} else if ($getItem) {
$query .= "SELECT DISTINCT g.clit_id, g.clit_descricao\n";
} else {
$query .= " SELECT DISTINCT a.data_bilhete, a.uniqueid, CASE WHEN(b.evento <> '') THEN 'Fila' ELSE 'Ramal' END AS tipo,
CASE WHEN(b.evento in('COMPLETECALLER', 'COMPLETEAGENT','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL'))THEN 'entrada' ELSE 'saida' END AS direcao,
c.id AS iddac, b.fila, d.apelido, a.calldate, a.src,
a.dst AS destino,
a.userfield, e.protocolo, h.clas_id, h.clas_descricao, g.clit_id, g.clit_descricao,
CASE WHEN(b.evento IN('TRANSFERORIG', 'TRANSFER') )THEN strtoint(param4) ELSE strtoint(param2) END AS duration,
1 AS acesso_audio \n";
}
$query .= "FROM pbx_bilhetes a
LEFT JOIN pbx_eventos_dacs b ON b.uid2 = a.uniqueid AND b.evento IN('COMPLETAAGENT','COMPLETACALLER','TRANSFERORIG', 'COMPLETECALLER', 'COMPLETEAGENT', 'TRANSFER','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL')
LEFT JOIN pbx_dacs c ON c.nome = b.fila
LEFT JOIN pbx_usuarios d ON d.matricula = SUBSTRING(b.agente, 7,4)
LEFT JOIN pbx_protocolo_reg e ON e.uniqueid = a.uniqueid
LEFT JOIN pbx_classifica_reg f ON f.id_bilhetes = a.uniqueid
LEFT JOIN pbx_classifica_item g ON g.clas_id = f.clas_id and g.clit_id = f.clit_id
LEFT JOIN pbx_classifica_atendimento h ON h.clas_id = f.clas_id
WHERE a.billsec > 3 \n
AND exists(SELECT '' FROM pbx_fila_audios x, pbx_grupo_usuario y WHERE y.gp_id = x.gp_id AND y.user_id = '{$idUser}' and x.id = c.id)\n";
if ($isProto) {
$query .= "AND (e.protocolo = $proto or e.protoparceiro = $proto) ";
} else {
$query .= "AND a.data_bilhete >= COALESCE($dt, a.data_bilhete)
AND a.data_bilhete <= COALESCE($dtFim, a.data_bilhete) ";
if ($src != 'null') {
$query .= " AND a.src LIKE $src ";
}
if ($dst != 'null')
$query .= " and a.dst like $dst ";
// $query .= " AND (CASE WHEN(b.evento IN('COMPLETECALLER', 'COMPLETEAGENT','COMPLETEAGENTRAMAL','COMPLETECALLERRAMAL') AND d.apelido IS NOT NULL) THEN
// (SELECT MAX(destino) FROM pbx_bilhetes_complemento WHERE uniqueid2 = a.uniqueid AND direcao = 'fila-ramal')
// ELSE
// (SELECT destino FROM pbx_bilhetes_complemento WHERE uniqueid2 = a.uniqueid AND id = (SELECT MAX(id) FROM pbx_bilhetes_complemento WHERE uniqueid2 = a.uniqueid))
// END LIKE $dst)";
if ($dac) {
$query .= $dacs ? $dacs : $dac;
}
if ($agente && !$getAgt) {
$query .= " AND d.matricula = '$agente' ";
}
if (($class && !$getClass) || ($getItem && !$getClass)) {
$query .= " AND h.clas_id = '$class' ";
}
if ($classItem && !$getItem) {
$query .= " AND g.clit_id = '$classItem' ";
}
}
$query .= "AND COALESCE(a.userfield, '') <> '' AND a.lastapp <> 'Transferred Call' \n";
// if(GetLogin() == 'administrador') { echo $query; exit; }
}
if ((($tipo == 1) || ($tipo == 2)) && !$isProto && $addPdx) {
if ($tipo == 2) {
$query .= "UNION ALL \n";
}
$query .= " SELECT a.data_bilhete, a.uniqueid, 'PBX' AS tipo, tplg_descricao AS direcao,
0 as iddac, '' AS fila, '' AS apelido, a.calldate,
a.src, a.dst AS destino, a.userfield, 0 AS protocolo,
0::INTEGER AS clas_id, ''::VARCHAR(30) AS clas_descricao,
0::INTEGER AS clit_id, ''::VARCHAR(30) AS clit_descricao,
MAX(billsec) AS duration,
1 AS acesso_audio
FROM pbx_bilhetes a
INNER JOIN pbx_tipo_ligacao b ON b.tplg_codigo = a.tipo_chamada
WHERE NOT EXISTS(SELECT '' FROM pbx_eventos_dacs WHERE uid2 = a.uniqueid)
AND not exists(select '' from tmp_restricao_ramal where (nome = a.src or nome = a.dst))
AND a.data_bilhete >= COALESCE($dt, a.data_bilhete)
AND a.data_bilhete <= COALESCE($dtFim, a.data_bilhete)";
if ($src != 'null') {
$query .= " AND a.src LIKE $src ";
}
if ($dst != 'null') {
$query .= " AND a.dst LIKE $dst ";
}
$query .= "AND COALESCE(a.userfield, '') NOT IN('', 'chamada-a-cobrar', 'fora-do-horario') AND a.billsec > 3 AND a.disposition = 'ANSWERED'
AND a.lastapp <> 'Transferred Call'
GROUP BY a.data_bilhete, a.uniqueid, tplg_descricao, a.calldate, a.src, a.dst, a.userfield \n";
}
if ($getAgt || $getClass || $getItem) {
$query .= "ORDER BY 2 \n";
} else if ($tipo == 0) {
$query .= "ORDER BY a.calldate DESC \n";
} else if ($tipo == 1) {
$query .= "ORDER BY a.calldate DESC \n";
} else if ($tipo == 2) {
$query .= "ORDER BY 8 \n";
}
// if(IsAdmin()) echo $query;
// if(GetLogin() == 'amarildo.pereira') echo $query;
return $query;
}
function GetAgtAudio($db) {
$codSel = $_SESSION["listaAgente"];
$GLOBALS['getAgt'] = 1;
$sel = !$codSel ? 'selected="selected"' : '';
$select = "<select name=\"listaAgente\" id=\"listaAgente\" size=\"1\">";
$select .= "<option value=\"0\" $sel>-----------------</option>";
// Quando tipoConsulta == 1 não pesquisa na fila.
if ($_SESSION["tipoConsulta"] != 1) {
$query = GetQuery($db);
$result = @pg_query($db, $query);
//if(IsAdmin()){echo $query; echo "\n--------------------------------\n"; }
while ($dados = @pg_fetch_row($result)) {
$sel = ($codSel == $dados[0]) ? 'selected="selected"' : "";
$select .= "<option value=\"$dados[0]\" $sel>$dados[1]</option>";
}
}
$select .= "</select>";
$GLOBALS['getAgt'] = 0;
return $select;
}
function GetClassAudio($db) {
$codSel = $_SESSION["listaClass"];
$GLOBALS['getClass'] = 1;
$sel = !$codSel ? 'selected="selected"' : '';
$select = "<select name=\"listaClass\" id=\"listaClass\" size=\"1\">";
$select .= "<option value=\"0\" $sel>-----------------</option>";
// Quando tipoConsulta == 1 não pesquisa na fila.
if ($_SESSION["tipoConsulta"] != 1) {
$query = GetQuery($db);
$result = @pg_query($db, $query);
//if(IsAdmin()){echo $query; echo "\n--------------------------------\n"; }
while ($dados = @pg_fetch_row($result)) {
if ($dados[0]) {
$sel = ($codSel == $dados[0]) ? 'selected="selected"' : "";
$select .= "<option value=\"$dados[0]\" $sel>$dados[1]</option>";
}
}
}
$select .= "</select>";
$GLOBALS['getClass'] = 0;
return $select;
}
function GetClassItemAudio($db) {
$codSel = $_SESSION["listaItem"];
$GLOBALS['getItem'] = 1;
$sel = !$codSel ? 'selected="selected"' : '';
$select = "<select name=\"listaItem\" id=\"listaItem\" size=\"1\">";
$select .= "<option value=\"0\" $sel>-----------------</option>";
// Quando tipoConsulta == 1 não pesquisa na fila.
if ($_SESSION["tipoConsulta"] != 1) {
$query = GetQuery($db);
$result = @pg_query($db, $query);
//if(IsAdmin()){echo $query; echo "\n--------------------------------\n"; }
while ($dados = @pg_fetch_row($result)) {
$sel = ($codSel == $dados[0]) ? 'selected="selected"' : "";
$select .= "<option value=\"$dados[0]\" $sel>$dados[1]</option>";
}
}
$select .= "</select>";
$GLOBALS['getItem'] = 0;
return $select;
}
function GetAudioFoneAutomatico($file) {
if ($file) {
$dirMp3 = '/var/www/html/aplicativo/audio/';
$filepath = VerificaCharFinal($_SESSION[SS_PRM_PATH_AUDIO]) . $file;
$pathFileWav = sprintf("%s%s", $dirMp3, $file);
$patFileUlaw = str_ireplace('.WAV', '.ulaw', $pathFileWav);
/*
* Renomeia o file para mostrar corretamente.
*/
$file = str_ireplace('.WAV', '.ulaw', $file);
/*
* Cria o arquivo wav localmente.
*/
@file_put_contents($pathFileWav, @file_get_contents($filepath));
/*
* Convert para ulaw.
*/
$comando = "ffmpeg -i $arqOrigem -ar 8000 -ac 1 -ab 64 -f mulaw $arqDestino";
exec($comando);
/*
* Pega o tamanho do arquivo mp3 criado.
*/
$fsize = filesize($patFileUlaw);
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');
header('Content-Type: ' . GetMimeContentType($file));
if ($fsize)
header('Content-Length: ' . $fsize);
header('Content-Disposition: attachment; filename="' . $file . '"');
header('Connection: close');
readfile($patFileUlaw);
unlink($pathFileWav);
unlink($patFileUlaw);
exit;
}
}
?>
Loading…
Cancel
Save