forked from Claudio/integracao
Lucas Ayala
2 years ago
40 changed files with 6084 additions and 64 deletions
@ -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(); |
||||
} |
||||
} |
||||
|
@ -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 |
||||
} |
||||
} |
||||
|
@ -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; |
||||
} |
||||
} |
||||
|
||||
} |
@ -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; |
||||
} |
||||
} |
@ -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; |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
?> |
@ -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"] |
||||
] |
||||
]; |
||||
|
@ -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"); |
@ -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 |
||||
} |
||||
|
||||
?> |
@ -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 |
||||
} |
||||
|
||||
?> |
@ -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 |
||||
} |
||||
|
||||
?> |
@ -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> |
@ -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); |
||||
} |
||||
|
||||
?> |
@ -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= |
@ -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'); |
||||
} |
@ -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); |
||||
} |
||||
|
||||
?> |
@ -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'); |
@ -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; |
||||
} |
||||
} |
||||
|
||||
|
||||
?> |
@ -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); |
@ -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(); |
||||
} |
||||
} |
||||
|
@ -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 |
||||
} |
||||
} |
||||
|
@ -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; |
||||
} |
||||
} |
||||
|
||||
} |
@ -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; |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
@ -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; |
||||
} |
||||
} |
@ -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")); |
@ -0,0 +1,6 @@
|
||||
<?php |
||||
|
||||
$anuncioos = [ |
||||
|
||||
]; |
||||
|
@ -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'); |
@ -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(); |
@ -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(); |
||||
|
@ -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 $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…
Reference in new issue