const qrcode = require('qrcode-terminal');
const { Client } = require('[Link]');
const client = new Client();
const DELAY_TIME = 5000;
const MESSAGE_COOLDOWN = 30000; // 30 seconds cooldown between welcome messages
const CHAT_STATES = {
INITIAL: 'INITIAL',
AWAITING_CPF: 'AWAITING_CPF',
AWAITING_OPTION: 'AWAITING_OPTION'
};
const userStates = new Map();
const messageQueue = new Map(); // Track messages in queue for each chat
const delay = ms => new Promise(res => setTimeout(res, ms));
async function sendMessageWithTyping(chat, message) {
try {
const chatId = [Link]._serialized;
// Check if there's already a message being sent to this chat
if ([Link](chatId)) {
return;
}
// Mark this chat as having a message in progress
[Link](chatId, true);
await [Link]();
await delay(DELAY_TIME);
await [Link]([Link]._serialized, message);
// Clear the message queue flag after sending
[Link](chatId);
} catch (error) {
[Link]('Erro ao enviar mensagem:', error);
// Make sure to clear the queue even if there's an error
[Link]([Link]._serialized);
}
}
async function sendWelcomeSequence(chat) {
await sendMessageWithTyping(chat, getWelcomeMessage());
await delay(1000); // Small delay between messages
await sendMessageWithTyping(chat, getCPFRequestMessage());
}
function getFirstName(contact) {
return [Link] ? [Link](" ")[0] : "Cliente";
}
function getWelcomeMessage() {
return "*Seja Bem Vindo(a) ao Canal de Atendimento da Desktop*";
}
function getCPFRequestMessage() {
return "Por favor, Digite o seu CPF:";
}
function getFaturaOptionsMessage() {
return "Como deseja receber sua fatura?\n\n1 - Pix (Aprovação imediata)\n2 -
Código do Boleto\n3 - Boleto em PDF";
}
function isValidCPFFormat(cpf) {
const numericCPF = [Link](/\D/g, '');
const formatRegex = /^\d{11}$|^\d{3}\.\d{3}\.\d{3}-\d{2}$/;
return [Link](cpf);
}
[Link]('qr', qr => {
[Link](qr, { small: true });
});
[Link]('ready', () => {
[Link]('Tudo certo! WhatsApp conectado.');
});
[Link]();
[Link]('message', async msg => {
try {
const chat = await [Link]();
const chatId = [Link]._serialized;
const contact = await [Link]();
const firstName = getFirstName(contact);
// First interaction or greeting message
if ( || [Link]().match(/^(menu|oi|olá|
ola|bom dia|boa tarde|boa noite|Solicitar|via)$/)) {
// Only send welcome sequence if no message is currently being sent
if () {
await sendWelcomeSequence(chat);
[Link](chatId, { state: CHAT_STATES.AWAITING_CPF });
}
return;
}
let currentState = [Link](chatId);
switch ([Link]) {
case CHAT_STATES.AWAITING_CPF:
if (isValidCPFFormat([Link])) {
currentState = {
state: CHAT_STATES.AWAITING_OPTION,
cpf: [Link]
};
[Link](chatId, currentState);
await sendMessageWithTyping(chat, getFaturaOptionsMessage());
} else {
await sendMessageWithTyping(chat, "Por favor, digite seu CPF em
um dos seguintes formatos:\n00000000000 ou 000.000.000-00");
}
break;
case CHAT_STATES.AWAITING_OPTION:
if ([Link] === "1" || [Link] === "2" || [Link] === "3") {
currentState = { state: CHAT_STATES.CPF, cpf:
[Link] };
[Link](chatId, currentState);
await sendMessageWithTyping(chat, "Ok! Aguarde enquanto puxo
sua fatura no banco de dados..");
} else {
await sendMessageWithTyping(chat, "Por favor, escolha uma opção
válida:\n\n1 - Pix (Aprovação imediata)\n2 - Código do Boleto\n3 - Boleto em PDF");
}
break;
}
} catch (error) {
[Link]('Erro no processamento da mensagem:', error);
// Make sure to clear the message queue if there's an error
[Link]([Link]._serialized);
}
});