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