forked from SimplesIP/pabx-app
douglas.strappasson
12 months ago
3 changed files with 124 additions and 53 deletions
@ -1,60 +1,130 @@
|
||||
<?php |
||||
|
||||
include "util/Crypt.php"; |
||||
$crypt = new Crypt('#S1mpl3S_C0nn3ct@R00t'); |
||||
include "util/Crypt.php"; |
||||
$crypt = new Crypt('#S1mpl3S_C0nn3ct@R00t'); |
||||
|
||||
$request = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS); |
||||
$chatApi = $_SESSION["prm_chat_api"]; |
||||
$request = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS); |
||||
$chatApi = 'http://' . $_SESSION["prm_chat_api"]; |
||||
$matricula = GetMatricula(); |
||||
|
||||
try { |
||||
$email = getEmailAgente($dbcon, $matricula); |
||||
if (!$email) { |
||||
throw new Exception("Email não informado no cadastro de usuário!"); |
||||
} |
||||
|
||||
if (!$_SESSION['SSTokenChat']) { |
||||
$_SESSION['SSTokenChat'] = login($chatApi, $email['email']); |
||||
} |
||||
|
||||
$options = queues($chatApi, $_SESSION['SSTokenChat']); |
||||
|
||||
if ($request['selectqueue'] && $request['btConectar']) { |
||||
if (loginQueue($chatApi, $request['selectqueue'])) { |
||||
$expireToken = strtotime('+1 days', time()); |
||||
$jsoninfo = '{"servidor": "%s", "websocket": "%s", "matricula": "%s", "fila": "%s", "api" : "%s" ,"expire": "%s"}'; |
||||
$jsoninfo = sprintf($jsoninfo, $_SESSION['prm_chat_api'], $_SESSION['prm_sk_host_chat'], GetMatricula(), $request['selectqueue'], $_SESSION['prm_chat_api_supervisor'], $expireToken); |
||||
$url = "http://sipcloud02.simplesip.com.br:8001/index.php?t=" . $crypt->encrypt($jsoninfo); |
||||
$numbers = number($chatApi, $_SESSION['SSTokenChat']); |
||||
$info = [ |
||||
"token" => $_SESSION['SSTokenChat'], |
||||
"id_number" => $numbers[0]['id'], |
||||
"id_empresa" => $numbers[0]['id_empresa'], |
||||
"servidor" => $_SESSION['prm_chat_api'], |
||||
"websocket" => $_SESSION['prm_sk_host_chat'], |
||||
"matricula" => $matricula, |
||||
"fila" => $request['selectqueue'], |
||||
"expire" => strtotime('+1 days', time()) |
||||
]; |
||||
|
||||
$token = $crypt->encrypt(json_encode($info, true)); |
||||
$url = $chatApi . ":8001/index.php?t=" . $token; |
||||
$jsStartup[] = sprintf('window.open("%s", "popupWindow", "width=1450, height=950, resizable=NO,scrollbars=YES");', $url); |
||||
} else { |
||||
$jsStartup[] = "alert('Não foi possível conenctar ao Simples Chat! Verifique as informações antes de conectar.');"; |
||||
} |
||||
} |
||||
} catch (Exception $ex) { |
||||
$jsStartup[] = sprintf("alert('%s')", $ex->getMessage()); |
||||
} |
||||
|
||||
$smarty->assign("options", getQueue($chatApi)); |
||||
$smarty->assign("jsonApp", json_encode( |
||||
$smarty->assign("options", $options); |
||||
$smarty->assign("jsonApp", json_encode( |
||||
[ |
||||
'matricula' => GetMatricula(), |
||||
'server_api' => $_SESSION['prm_chat_api'], |
||||
'server_ws' => $_SESSION['prm_sk_host_chat'], |
||||
'supervisor' => IsSupervisor($dbcon) |
||||
] |
||||
)); |
||||
)); |
||||
|
||||
GetTemplate($smarty, 'simpleschat/connect.tpl'); |
||||
|
||||
GetTemplate($smarty, 'simpleschat/connect.tpl'); |
||||
function number($chatApi, $token) |
||||
{ |
||||
$response = curl("{$chatApi}/api/v1/number", null, $token); |
||||
if (!$response['data']) { |
||||
throw new Exception('Não foi encontrar os números.'); |
||||
} |
||||
return $response['data']; |
||||
} |
||||
|
||||
function getQueue($chatApi) { |
||||
$response = json_decode(request("{$chatApi}/integracao/media/api/agente/listarFilas")); |
||||
function queues($chatApi, $token) |
||||
{ |
||||
$response = curl("{$chatApi}/api/v1/filas", null, $token); |
||||
$option = null; |
||||
foreach ($response->data as $v) { |
||||
$option .= "<option value='{$v->id}'>{$v->nome}</option>"; |
||||
|
||||
if (!$response['data']) { |
||||
throw new Exception('Não foi possível listar as filas.'); |
||||
} |
||||
|
||||
foreach ($response['data'] as $v) { |
||||
$option .= "<option value='{$v['id']}'>{$v['nome']}</option>"; |
||||
} |
||||
return $option; |
||||
} |
||||
|
||||
function login($chatApi, $email) |
||||
{ |
||||
$json = json_encode(['email' => $email, "matricula" => md5(GetMatricula())]); |
||||
$response = curl("{$chatApi}/access/login", $json); |
||||
|
||||
if ($response['status'] == 'success' || strpos($response['message'], 'autenticado') !== false) { |
||||
return $response['data']['token']; |
||||
} |
||||
throw new Exception('Não foi possível gerar o token.'); |
||||
} |
||||
|
||||
function loginQueue($chatApi, $dac) { |
||||
$json = ['id_fila' => $dac, "matricula" => GetMatricula()]; |
||||
$response = json_decode(request("{$chatApi}/integracao/media/api/agente/entrar", $json)); |
||||
if ($response->status == 'success' || strpos($response->message, 'autenticado') !== false) { |
||||
return true; |
||||
function curl($url, $params = null, $token = null) |
||||
{ |
||||
$curl = curl_init(); |
||||
curl_setopt($curl, CURLOPT_URL, $url); |
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); |
||||
|
||||
if ($params) { |
||||
curl_setopt($curl, CURLOPT_POST, true); |
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, $params); |
||||
} |
||||
return false; |
||||
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 30); |
||||
|
||||
$header[] = 'Content-Type:application/json'; |
||||
if ($token) { |
||||
$header[] = 'Authorization: Bearer ' . $token; |
||||
} |
||||
|
||||
function request($url, $post = []) { |
||||
$curl = "curl -s -k "; |
||||
if ($post) { |
||||
$curl .= sprintf(" -X POST -d '%s' ", json_encode($post)); |
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); |
||||
$content = curl_exec($curl); |
||||
if (curl_errno($curl)) { |
||||
curl_close($curl); |
||||
return false; |
||||
} |
||||
$curl .= $url; |
||||
$info = curl_getinfo($curl); |
||||
|
||||
$response = shell_exec($curl); |
||||
return $response; |
||||
if ($info['http_code'] == 403) { |
||||
unset($_SESSION['SSTokenChat']); |
||||
} |
||||
curl_close($curl); |
||||
|
||||
return json_decode($content, true); |
||||
} |
||||
|
||||
function getEmailAgente($dbcon, $matricula) |
||||
{ |
||||
$query = "SELECT email FROM pbx_usuarios WHERE matricula = '$matricula';"; |
||||
$result = pg_query($dbcon, $query); |
||||
return pg_fetch_assoc($result); |
||||
} |
||||
|
Loading…
Reference in new issue