@ -4,21 +4,43 @@
$crypt = new Crypt('#S1mpl3S_C0nn3ct@R00t');
$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 (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("options", $options );
$smarty->assign("jsonApp", json_encode(
[
'matricula' => GetMatricula(),
@ -30,31 +52,79 @@
GetTemplate($smarty, 'simpleschat/connect.tpl');
function getQueue($chatApi) {
$response = json_decode(request("{$chatApi}/integracao/media/api/agente/listarFilas"));
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 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 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 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;
}
$info = curl_getinfo($curl);
if ($info['http_code'] == 403) {
unset($_SESSION['SSTokenChat']);
}
curl_close($curl);
function request($url, $post = []) {
$curl = "curl -s -k ";
if ($post) {
$curl .= sprintf(" -X POST -d '%s' ", json_encode($post));
return json_decode($content, true);
}
$curl .= $url;
$response = shell_exec($curl);
return $response;
function getEmailAgente($dbcon, $matricula)
{
$query = "SELECT email FROM pbx_usuarios WHERE matricula = '$matricula';";
$result = pg_query($dbcon, $query);
return pg_fetch_assoc($result);
}