feat: Delete client session keys from Redis after 3 minutes of inactivity
parent
02ded6e4ee
commit
9e84e4cf08
|
@ -0,0 +1,44 @@
|
||||||
|
NODE_ENV=
|
||||||
|
BACKEND_URL=http://localhost
|
||||||
|
FRONTEND_URL=http://localhost:3000
|
||||||
|
PROXY_PORT=8080
|
||||||
|
PORT=8080
|
||||||
|
|
||||||
|
DB_DIALECT=mysql
|
||||||
|
DB_HOST=localhost
|
||||||
|
DB_USER=whaticket
|
||||||
|
DB_PASS=strongpassword
|
||||||
|
DB_NAME=whaticket
|
||||||
|
|
||||||
|
# WHATSAPP OFFICIAL
|
||||||
|
VERIFY_TOKEN=HAPPY
|
||||||
|
TOKEN=EAAEPZBB2YqgwBOZBEAvPxYaO2nbPvuzU3ZBaZA6YF6tyWtjKom2yLxPxOm421njhbb1ZC2rOkyQyZCWpZBk9jXZCAaMLNY6SkNOrwPoRNaqO9Fbj31mZC8mxra08jIhBiziX7IZBFDWYbkcfw5cfLdTSys9ilfRlKsIZClOUlTiHnhSDkMvXY6rMFrvWswR2YVvJVH1qPvM7hGuuUqM
|
||||||
|
VERSION=v17.0
|
||||||
|
URL_WHATSAPP_MEDIA=https://ccsm-api.omnihit.app.br/whatsapp/official/media
|
||||||
|
URL_WHATSAPP_API=https://graph.facebook.com
|
||||||
|
|
||||||
|
JWT_SECRET=3123123213123
|
||||||
|
JWT_REFRESH_SECRET=75756756756
|
||||||
|
|
||||||
|
SENTRY_DSN=
|
||||||
|
|
||||||
|
CACHE=
|
||||||
|
|
||||||
|
WHATS_NUMBER_VALIDATOR_URL=http://localhost:8021
|
||||||
|
|
||||||
|
TOKEN_REMOTE_TICKET_CREATION=emvd7UfskjstMC99mFqs2tEiNmn05PgsUVK06TZP9LfkyjxDrsKCxlVV5ApYM7hP
|
||||||
|
TOKEN_IAM_HORACIUS_EL=emvd7UfskjstMC99mFqs2tEiNmn05PgsUVK06TZP9LfkyjxDrsKCxlVV5ApYM7hP
|
||||||
|
|
||||||
|
# omnihit da hit test bot
|
||||||
|
# APP_NAME=recrutamento_el
|
||||||
|
APP_NAME=test
|
||||||
|
|
||||||
|
BACKEND_URL_RAW=http://localhost
|
||||||
|
|
||||||
|
PUBLICKEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwOvEh4Qc0yeJidiX3YpDdOB/XuDeyNRaypmSyW5FjjIxBFaMiUmNSZ2X2m2LqyyrHJxQgRqwjifHUQ+ivmNBm4YFNSr05iFB/kgi/1Jmbst6h1MnmuD1YFSRnEsmdUXzhhgcj5btyjRfw6L2rGwOnqzMzS54seE1aAy+rtN82DW8wfbYU/IO83MAJiocthCBOev5MDUq6hdkGPPZ/kdFOLcQe+wt/suhmF4KRfq77X4GgLM5nAOMj7N7cJ6b97nB47krfPOMJissNzPDZ879BKeQX4t8TwJGUFNOvLd3UW3xVBTBz8pSS36VlCXjbYm44za8eTuBLDYYbGkUNEFYxwIDAQAB
|
||||||
|
|
||||||
|
REDIS_URI=redis://127.0.0.1:6379
|
||||||
|
|
||||||
|
URL_DASHBOARD_SESSIONS=http://localhost:6002
|
||||||
|
TOKEN_DASHBOARD_SESSIONS=8168dd72adb7bab7e8f54f9d022468ab
|
||||||
|
|
|
@ -50,6 +50,7 @@
|
||||||
"socket.io-client": "^4.5.4",
|
"socket.io-client": "^4.5.4",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
"whatsapp-web.js": "github:pedroslopez/whatsapp-web.js",
|
"whatsapp-web.js": "github:pedroslopez/whatsapp-web.js",
|
||||||
|
"xml2js": "^0.6.2",
|
||||||
"yup": "^0.32.8"
|
"yup": "^0.32.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -92,11 +92,21 @@ export const store = async (req: Request, res: Response): Promise<Response> => {
|
||||||
return res.status(200).json(queue);
|
return res.status(200).json(queue);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const form = async (req: Request, res: Response): Promise<Response> => {
|
||||||
|
const { form, name } = req.body;
|
||||||
|
|
||||||
|
if (!form || !name) throw new AppError("BAD REQUEST", 400);
|
||||||
|
|
||||||
|
await set(name, form);
|
||||||
|
|
||||||
|
return res.status(200).json({ [name]: form });
|
||||||
|
};
|
||||||
|
|
||||||
export const customization = async (
|
export const customization = async (
|
||||||
req: Request,
|
req: Request,
|
||||||
res: Response
|
res: Response
|
||||||
): Promise<Response> => {
|
): Promise<Response> => {
|
||||||
const { ura } = req.body;
|
const { ura, number } = req.body;
|
||||||
|
|
||||||
if (!ura) throw new AppError("BAD REQUEST", 400);
|
if (!ura) throw new AppError("BAD REQUEST", 400);
|
||||||
|
|
||||||
|
@ -184,10 +194,10 @@ export const customization = async (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await set("ura", ura);
|
await set(`ura_${number}`, ura);
|
||||||
|
|
||||||
const _ura = await get({ key: "ura", parse: true });
|
const _ura = await get({ key: `ura_${number}`, parse: true });
|
||||||
console.log("_URA: ", _ura);
|
console.log(`ura_${number}`, _ura);
|
||||||
|
|
||||||
return res.status(200).json({ new_queues });
|
return res.status(200).json({ new_queues });
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,54 +1,60 @@
|
||||||
import ListTicketTimeLife from "../services/TicketServices/ListTicketTimeLife";
|
import ListTicketTimeLife from "../services/TicketServices/ListTicketTimeLife";
|
||||||
import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
|
import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
|
||||||
|
import { delForm } from "../services/WbotServices/wbotMessageListener";
|
||||||
import BotIsOnQueue from "./BotIsOnQueue";
|
import BotIsOnQueue from "./BotIsOnQueue";
|
||||||
|
import { del } from "./RedisClient";
|
||||||
|
|
||||||
const fsPromises = require("fs/promises");
|
const fsPromises = require("fs/promises");
|
||||||
const fs = require('fs')
|
const fs = require("fs");
|
||||||
|
|
||||||
let timer: any
|
let timer: any;
|
||||||
|
|
||||||
const CloseBotTickets = async () => {
|
const CloseBotTickets = async () => {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const botInfo = await BotIsOnQueue("botqueue");
|
||||||
|
|
||||||
const botInfo = await BotIsOnQueue('botqueue')
|
if (!botInfo.userIdBot) return;
|
||||||
|
|
||||||
if (!botInfo.userIdBot) return
|
let tickets: any = await ListTicketTimeLife({
|
||||||
|
timeseconds: 60,
|
||||||
|
status: "open",
|
||||||
|
userId: botInfo.userIdBot
|
||||||
|
});
|
||||||
|
|
||||||
let tickets: any = await ListTicketTimeLife({ timeseconds: 60, status: 'open', userId: botInfo.userIdBot })
|
console.log("tickets: ", tickets);
|
||||||
|
|
||||||
console.log('tickets: ', tickets)
|
|
||||||
|
|
||||||
for (let i = 0; i < tickets.length; i++) {
|
for (let i = 0; i < tickets.length; i++) {
|
||||||
|
|
||||||
await UpdateTicketService({
|
await UpdateTicketService({
|
||||||
ticketData: { 'status': 'closed', 'userId': botInfo.userIdBot, 'statusChatEnd': 'FINALIZADO' },
|
ticketData: {
|
||||||
|
status: "closed",
|
||||||
|
userId: botInfo.userIdBot,
|
||||||
|
statusChatEnd: "FINALIZADO"
|
||||||
|
},
|
||||||
ticketId: tickets[i].ticket_id
|
ticketId: tickets[i].ticket_id
|
||||||
});
|
});
|
||||||
|
|
||||||
|
tickets[i].id = tickets[i].ticket_id;
|
||||||
|
delForm(tickets[i]);
|
||||||
|
del(`form:${tickets[i].id}:request`);
|
||||||
|
del(`form:${tickets[i].id}:confirmation`);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('There was an error on try close the bot tickets: ', error)
|
console.log("There was an error on try close the bot tickets: ", error);
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const schedule = async () => {
|
const schedule = async () => {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
clearInterval(timer);
|
clearInterval(timer);
|
||||||
|
|
||||||
await CloseBotTickets()
|
await CloseBotTickets();
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('error on schedule: ', error)
|
console.log("error on schedule: ", error);
|
||||||
}
|
} finally {
|
||||||
finally {
|
timer = setInterval(schedule, 180000);
|
||||||
timer = setInterval(schedule, 60000);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
timer = setInterval(schedule, 60000);
|
timer = setInterval(schedule, 180000);
|
||||||
|
|
||||||
export default schedule;
|
export default schedule;
|
|
@ -44,7 +44,7 @@ export async function get({ key, value, parse }: getData) {
|
||||||
for (const key of keys) {
|
for (const key of keys) {
|
||||||
const val = await redis.get(key);
|
const val = await redis.get(key);
|
||||||
if (parse) res.push(JSON.parse(val));
|
if (parse) res.push(JSON.parse(val));
|
||||||
res.push(val);
|
else res.push(val);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ queueRoutes.post("/queue", isAuth, QueueController.store);
|
||||||
|
|
||||||
queueRoutes.post("/queue/customization", QueueController.customization);
|
queueRoutes.post("/queue/customization", QueueController.customization);
|
||||||
|
|
||||||
|
queueRoutes.post("/queue/form", QueueController.form);
|
||||||
|
|
||||||
queueRoutes.get("/queue/remote/list", isAuth, QueueController.listQueues);
|
queueRoutes.get("/queue/remote/list", isAuth, QueueController.listQueues);
|
||||||
|
|
||||||
queueRoutes.get("/queue/:queueId", isAuth, QueueController.show);
|
queueRoutes.get("/queue/:queueId", isAuth, QueueController.show);
|
||||||
|
|
|
@ -19,7 +19,7 @@ import {
|
||||||
|
|
||||||
import ListWhatsAppsNumber from "../WhatsappService/ListWhatsAppsNumber";
|
import ListWhatsAppsNumber from "../WhatsappService/ListWhatsAppsNumber";
|
||||||
import { getWbot } from "../../libs/wbot";
|
import { getWbot } from "../../libs/wbot";
|
||||||
import { json } from "sequelize/types";
|
import { QueryTypes, json } from "sequelize/types";
|
||||||
|
|
||||||
import { restartWhatsSession } from "../../helpers/RestartWhatsSession";
|
import { restartWhatsSession } from "../../helpers/RestartWhatsSession";
|
||||||
// import { insertOrUpeateWhatsCache, searchWhatsappCache } from "../../helpers/WhatsCache";
|
// import { insertOrUpeateWhatsCache, searchWhatsappCache } from "../../helpers/WhatsCache";
|
||||||
|
@ -58,12 +58,6 @@ const SendWhatsAppMessage = async ({
|
||||||
|
|
||||||
let quotedMsgSerializedId: string | undefined;
|
let quotedMsgSerializedId: string | undefined;
|
||||||
|
|
||||||
if (quotedMsg) {
|
|
||||||
await GetWbotMessage(ticket, quotedMsg.id);
|
|
||||||
|
|
||||||
quotedMsgSerializedId = SerializeWbotMsgId(ticket, quotedMsg);
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log("quotedMsgSerializedId: ", quotedMsgSerializedId);
|
console.log("quotedMsgSerializedId: ", quotedMsgSerializedId);
|
||||||
|
|
||||||
let whatsapps: any;
|
let whatsapps: any;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue