const { Client, LocalAuth } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const OpenAI = require('openai');
// Inicializa o OpenAI com a API do Qwen
const openai = new OpenAI({
apiKey: 'sk-***************', // Certifique-se de que a variável de ambiente está configurada corretamente
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
// Objeto para armazenar o histórico de conversas
const conversationHistory = {};
// Função para processar mensagens usando a API do Qwen com histórico
async function processMessage(text, userId) {
try {
// Inicializa o histórico do usuário, se não existir
if (!conversationHistory[userId]) {
conversationHistory[userId] = [];
}
// Adiciona a mensagem do usuário ao histórico
conversationHistory[userId].push({ role: "user", content: text });
// Limita o histórico para as últimas 10 interações
if (conversationHistory[userId].length > 10) {
conversationHistory[userId].shift();
}
// Cria a requisção para o Qwen
const completion = await openai.chat.completions.create({
model: "qwen-plus",
messages: [
{ role: "system", content: "Você é um assistente útil." },
...conversationHistory[userId]
],
});
const reply = completion.choices[0].message.content.trim();
// Adiciona a resposta da IA ao histórico
conversationHistory[userId].push({ role: "assistant", content: reply });
console.log(`Resposta gerada para ${userId}: ${reply}`);
return reply;
} catch (error) {
console.error('Erro ao processar mensagem:', error.response ? error.response.data : error.message);
return 'Desculpe, não consegui processar sua mensagem.';
}
}
// Função para aguardar um tempo
const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));
// Inicializa o cliente do WhatsApp
const client = new Client({
authStrategy: new LocalAuth({ clientId: `qwen` }) // Salva a sessão localmente
});
// Gera o QR Code no terminal
client.on('qr', (qr) => {
qrcode.generate(qr, { small: true });
});
// Quando estiver pronto, exibe uma mensagem
client.on('ready', () => {
console.log('Client is ready!');
});
// Escuta mensagens recebidas
client.on('message', async (message) => {
console.log(`Mensagem recebida de ${message.from}: ${message.body}`);
// Envia digitando
const chat = await message.getChat();
await chat.sendStateTyping();
// Espera 5 segundos antes de processar
await wait(5000);
// Processa a mensagem com a API do Qwen usando o histórico
const response = await processMessage(message.body, message.from);
// Responde a mensagem no WhatsApp
message.reply(response);
});
// Inicializa o cliente
client.initialize();