mirror of
https://github.com/cheveguerra/whaticket-community.git
synced 2026-04-20 04:39:20 +00:00
feat: added debounce delay to auto reply
reply only last message received within 3 seconds
This commit is contained in:
41
backend/src/helpers/Debounce.ts
Normal file
41
backend/src/helpers/Debounce.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
interface Timeout {
|
||||||
|
id: number;
|
||||||
|
timeout: NodeJS.Timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
const timeouts: Timeout[] = [];
|
||||||
|
|
||||||
|
const findAndClearTimeout = (ticketId: number) => {
|
||||||
|
if (timeouts.length > 0) {
|
||||||
|
const timeoutIndex = timeouts.findIndex(timeout => timeout.id === ticketId);
|
||||||
|
|
||||||
|
if (timeoutIndex !== -1) {
|
||||||
|
clearTimeout(timeouts[timeoutIndex].timeout);
|
||||||
|
timeouts.splice(timeoutIndex, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const debounce = (
|
||||||
|
func: { (): Promise<void>; (...args: never[]): void },
|
||||||
|
wait: number,
|
||||||
|
ticketId: number
|
||||||
|
) => {
|
||||||
|
return function executedFunction(...args: never[]): void {
|
||||||
|
const later = () => {
|
||||||
|
findAndClearTimeout(ticketId);
|
||||||
|
func(...args);
|
||||||
|
};
|
||||||
|
|
||||||
|
findAndClearTimeout(ticketId);
|
||||||
|
|
||||||
|
const newTimeout = {
|
||||||
|
id: ticketId,
|
||||||
|
timeout: setTimeout(later, wait)
|
||||||
|
};
|
||||||
|
|
||||||
|
timeouts.push(newTimeout);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export { debounce };
|
||||||
@@ -20,6 +20,7 @@ import { logger } from "../../utils/logger";
|
|||||||
import CreateOrUpdateContactService from "../ContactServices/CreateOrUpdateContactService";
|
import CreateOrUpdateContactService from "../ContactServices/CreateOrUpdateContactService";
|
||||||
import FindOrCreateTicketService from "../TicketServices/FindOrCreateTicketService";
|
import FindOrCreateTicketService from "../TicketServices/FindOrCreateTicketService";
|
||||||
import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService";
|
import ShowWhatsAppService from "../WhatsappService/ShowWhatsAppService";
|
||||||
|
import { debounce } from "../../helpers/Debounce";
|
||||||
|
|
||||||
interface Session extends Client {
|
interface Session extends Client {
|
||||||
id?: number;
|
id?: number;
|
||||||
@@ -165,9 +166,19 @@ const verifyQueue = async (
|
|||||||
|
|
||||||
const body = `\u200e ${greetingMessage}\n${options}`;
|
const body = `\u200e ${greetingMessage}\n${options}`;
|
||||||
|
|
||||||
const sentMessage = await wbot.sendMessage(`${contact.number}@c.us`, body);
|
const debouncedSentMessage = debounce(
|
||||||
|
async () => {
|
||||||
|
const sentMessage = await wbot.sendMessage(
|
||||||
|
`${contact.number}@c.us`,
|
||||||
|
body
|
||||||
|
);
|
||||||
|
verifyMessage(sentMessage, ticket, contact);
|
||||||
|
},
|
||||||
|
3000,
|
||||||
|
ticket.id
|
||||||
|
);
|
||||||
|
|
||||||
await verifyMessage(sentMessage, ticket, contact);
|
debouncedSentMessage();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user