PABX da Simples IP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

354 lines
13 KiB

<?php
############################################################################
##### ARQUIVO DE ACESSO AO BANCO DE DADOS DO KING DIALER #####
############################################################################
/**
* Cria uma conexao com a base de dados do king
* @throws Exception
*/
function connectMysql() {
$data = GetConfKing();
if ($data) {
if (!$link) {
throw new Exception('Não foi possível conectar ao banco de dados do King Dialer; Error: ' . mysqli_error($link));
}
mysqli_select_db($data['king_base'], $link);
if(mysqli_error($link)){
throw new Exception("Error:". mysqli_error($link));
}
}
}
/**
* Configuracao de acesso a base de dados do king
* @global type $dbcon
* @return array
*/
function GetConfKing() {
global $dbcon;
$query = "SELECT * FROM pbx_kingdialer_config WHERE id_king = 1";
$result = pg_query($dbcon, $query);
return pg_fetch_assoc($result);
}
/**
* Configuracoes da campanha para ser adicionadas no banco de dados.
* @global type $dbcon
* @return array
*/
function GetConfCampanha() {
global $dbcon;
$query = "SELECT * FROM pbx_kingdialer_campanha WHERE id_camp_king = 1";
$result = pg_query($dbcon, $query);
return pg_fetch_assoc($result);
}
/**
* Insere uma nova campanha no king para ser processada as chamadas
* @param string $campanha
* @return int
* @throws Exception
*/
function criarCampanhaKing($campanha) {
$data = GetConfCampanha();
$query = "INSERT INTO campanha (login, datetime_ini, datetime_fin, campanha, ramal, fluxo, "
. "numrediscagem, pausa, maxcall, ringtime, intervalo, amd, nds, priomovel, maxcallagent) "
. "VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');";
if ($data) {
$sql = sprintf($query, $data['king_camp_login'], date("Y-m-d {$data['king_camp_horaini']}:00"), date("Y-m-d {$data['king_camp_horafim']}:59"), $campanha,
$data['king_camp_ramal'], $data['king_camp_fluxo'], $data['king_camp_numrediscagem'], $data['king_camp_pausa'], $data['king_camp_maxcall'],
$data['king_camp_ringtime'], $data['king_camp_intervalo'], $data['king_camp_amd'], $data['king_camp_nds'],
$data['king_camp_priomovel'], $data['king_camp_maxcallagent']);
mysql_query($sql);
return mysql_insert_id();
} else {
throw new Exception("Nao foi possivel encontrar as configuracoes da campanha!");
}
if (mysql_error()) {
throw new Exception("Nao foi possivel incluir a campanha. Error: " . mysql_error());
}
}
/**
* Altera uma campanha do king para ser processada as chamadas
* @param string $campanha
* @return int
* @throws Exception
*/
function alteraCampanhaKing($id, $data) {
$query = "UPDATE campanha SET login = '%s', datetime_ini = '%s', datetime_fin = '%s', "
. "ramal = '%s', fluxo = '%s', numrediscagem = '%s', pausa = '%s', maxcall = '%s', "
. "ringtime = '%s', intervalo = '%s', amd = '%s', nds = '%s', priomovel = '%s', maxcallagent = '%s' "
. "WHERE id = {$id}";
if ($data) {
$sql = sprintf($query, $data['king_camp_login'], date("Y-m-d {$data['king_camp_horaini']}"), date("Y-m-d {$data['king_camp_horafim']}"),
$data['king_camp_ramal'], $data['king_camp_fluxo'], $data['king_camp_numrediscagem'], $data['king_camp_pausa'], $data['king_camp_maxcall'],
$data['king_camp_ringtime'], $data['king_camp_intervalo'], $data['king_camp_amd'], $data['king_camp_nds'],
$data['king_camp_priomovel'], $data['king_camp_maxcallagent']);
mysql_query($sql);
return mysql_insert_id();
} else {
throw new Exception("Nao foi possivel encontrar as configuracoes da campanha!");
}
if (mysql_error()) {
throw new Exception("Nao foi possivel incluir a campanha. Error: " . mysql_error());
}
}
############################################################################
#### FUNCOES DE VERIFICACAO CAMPANHA ####
############################################################################
/**
* Busca os contato bloqueados de acordo com o tipo.
*
* DIA = Busca no periodo de data atual.
* MES = Busca pelo numero do mes atual.
*
* @param string $dbcon
* @return array
*/
function contatosTelevendas($dbcon, $numero, $tipo) {
$query = "SELECT tlvb_id, src, tlvb_status, tlvb_data FROM pbx_televendas_bloqueio WHERE src = '{$numero}' ";
if (strtoupper($tipo) == 'MES') {
$query .= " AND tlvb_mes = " . date('m');
} else if (strtoupper($tipo) == 'DIA') {
$query .= " AND tlvb_data = '" . date('Y-m-d') . "'";
}
$query .= " GROUP BY tlvb_id, src, tlvb_status, tlvb_data";
$result = pg_query($dbcon, $query);
$resp = pg_fetch_all($result);
if (pg_last_error()) {
throw new Exception("Nao foi possivel realizar consulta em Televendas! Query: {$query} | Error: " . pg_last_error());
}
return $resp;
}
/**
* Busca os contato da lista enviada e compara com os bloqueio ocorridos.
*
* Possui error = true
* Possui bloqueio = true
*
* @param type $dbcon
* @param type $ldid
*/
function verificaContatoLista($dbcon, $ldid, $idcamp, $campanha) {
$numeroList = array();
$error = array();
$query = "SELECT DISTINCT numero, nome, codigo, data FROM tb_lista_discador WHERE ld_id = {$ldid}";
$result = pg_query($dbcon, $query);
$resp = pg_fetch_all($result);
if (pg_last_error()) {
throw new Exception("Nao foi possivel realizar consulta em Lista dicador!. Error: " . pg_last_error());
}
foreach ($resp as $value) {
$response = verificaContatoTelevendas($idcamp, $campanha, $value['numero'], $dbcon);
if ($response['error']) {
$error[] = $value['numero'];
}
if (!$response['bloqueio'] && !$response['error']) {
$numeroList[] = $value;
}
}
return array('error' => $error, 'contatos' => $numeroList);
}
/**
* Valida o contato passado se possui bloqueio no dia ou mes. Caso possua
* adiciona na tabela de bloqueios.
*
* Status 2 => Bloqueio Diario;
* Status 3 => Bloqueio Mesal;
* @param int $idcamp
* @param string $campanha
* @param string $numero
* @param string $dbcon
* @return array
*/
function verificaContatoTelevendas($idcamp, $campanha, $numero, $dbcon) {
$response = array('error' => false, 'bloqueio' => false);
/**
* BLOQUEIO MES 15 TENTATIVAS
*/
$contatoMes = count(contatosTelevendas($dbcon, $numero, 'MES'));
if ($contatoMes >= 14) {
$bloqueio = insereBloqueioCampanha($dbcon, $idcamp, $numero, 3, $campanha);
$response['bloqueio'] = true;
return $response;
}
/**
* BLOQUEIO DIA 2 TENTATIVAS
*/
$contatoDia = contatosTelevendas($dbcon, $numero, 'DIA');
if (count($contatoDia) > 1) {
$bloqueio = insereBloqueioCampanha($dbcon, $idcamp, $numero, 2, $campanha);
$response['bloqueio'] = true;
return $response;
}
insereContato($dbcon, $numero);
return $response;
}
/**
* Cria um novo contato na tabela televendas_bloqueio
*
* @param type $dbcon
* @param type $numero
* @return boolean
*/
function insereContato($dbcon, $numero) {
$query = "INSERT INTO pbx_televendas_bloqueio (src, tlvb_status) VALUES ('{$numero}', 1);";
pg_query($dbcon, $query);
if (pg_last_error()) {
return false;
}
return true;
}
/**
* TIPO DE BLOQUEIO
* 1 - CONTATO PENDENTE NO KING
* 2 - CONTATO DISCADO NO DIA
* 3 - 15 CONTATO FEITO NO MES
* 4 - CONTATO DUPLICADO OU INVALIDO NO ARQUIVO
*/
function insereBloqueioCampanha($dbcon, $idcamp, $numero, $tipo, $nomeCamp = null) {
$query = "INSERT INTO pbx_kingdialer_bloqueios (id_camp_bloq, nome_camp_bloq, numero_bloq, tipo_bloq) VALUES({$idcamp},'{$nomeCamp}','{$numero}',{$tipo});";
pg_query($dbcon, $query);
if (pg_last_error()) {
return false;
}
return true;
}
############################################################################
#### FUNCOES DE CONF. CAMPANHA ####
############################################################################
function criarContatosCampanha($id, $dados) {
$sql = "INSERT INTO campanha_contatos (id_camp, numero, nome, codigo, outro, tipo_telefone) VALUES('%s','%s','%s','%s','%s','%s'); \n";
$query = "";
foreach ($dados as $contact) {
$query = sprintf($sql, $id, $contact['numero'], $contact['nome'] ? $contact['nome'] : null, $contact['codigo'] ? $contact['codigo'] : null, $contact['data'] ? $contact['data'] : null, verificaTelefone($contact['numero']));
mysql_query($query);
if (mysql_error()) {
throw new Exception("Error:" . mysql_error() . " | Query: " . $query);
}
}
return true;
}
function deletaCampanha($id) {
$query1 = "DELETE FROM campanha WHERE id = {$id};";
mysql_query($query1);
$query2 = "DELETE FROM campanha_contatos WHERE id_camp = {$id};";
mysql_query($query2);
if (mysql_error()) {
throw new Exception("Error:" . mysql_error());
}
return true;
}
/**
* Busca campanha de acordo pelo ID.
* Se para passar $param atualiza os status de pausa de acordo com o ID.
* @param type $id
* @param type $status
* @return type
*/
function campanhasPausa($id, $status = null) {
if (is_int($status)) {
$query = "UPDATE campanha SET pausa = {$status} WHERE id = {$id};";
mysql_query($query);
return $status ? 'Off' : 'On';
}
$query = "SELECT * FROM campanha WHERE id = {$id};";
$result = mysql_query($query);
return mysql_fetch_assoc($result);
}
function chamadasCorrente() {
$query = 'SELECT data, ramal, agent, campanha, numero, nome, codigo, CONCAT (numdiscagem , " de " , numrediscagem) AS discagem FROM discador_spool';
mysql_query($query);
$result = mysql_query($query);
$data = array();
while ($dados = mysql_fetch_array($result)) {
$data[] = $dados;
}
return $data;
}
function GetLigacoesPorNumero($numero, $periodo) {
$query = "";
$dataDay = date('Y-m-d 00:00:00');
$dataIni = date('Y-m-01 00:00:00');
$dataFim = date('Y-m-t 23:59:59');
switch (strtoupper($periodo)) {
case 'PENDENTES' || 'P':
$query = "SELECT count(*) as ligacoes FROM campanha_contatos WHERE numero = '{$numero}' AND calldate = '0000-00-00 00:00:00';";
break;
case 'DIA' || 'D':
$query = "SELECT count(*) as ligacoes FROM campanha_contatos WHERE numero = '{$numero}' AND calldate >= '{$dataDay}';";
break;
case 'MES' || 'M':
$query = "SELECT count(*) as ligacoes FROM campanha_contatos WHERE numero = '{$numero}' AND calldate >= '{$dataIni}' AND calldate <= '{$dataFim}';";
break;
}
if ($query && $result = mysql_query($query)) {
return mysql_fetch_assoc($result)['ligacoes'];
}
return null;
}
function deleteListaDiscador($dbcon, $ldid) {
$query = "DELETE FROM tb_lista_discador WHERE ld_id = {$ldid}";
pg_query($dbcon, $query);
}
/**
* Verifica o tipo de telefone Movel ou Fixo
* @param type $telefone
* @return int
*/
function verificaTelefone($telefone) {
switch (strlen($telefone)) {
case 12:
return 0;
case 11:
return 1;
case 9:
return 0;
case 8:
return 1;
}
}