Faz um tempo que eu queria criar um template sólido para bots de WhatsApp — algo que fosse além do "hello world" e servisse de base real para projetos de atendimento automatizado.
O resultado foi o template-bot-whatsapp: um boilerplate modular, com sistema de fluxos, menus interativos e pronto para integrar com IA.
Neste artigo vou te mostrar como ele funciona e como usar.
O que você vai conseguir fazer
- Criar menus interativos por número (
1,2,3...) - Manter sessões separadas por usuário
- Centralizar todos os textos do bot em um arquivo
- Integrar com OpenAI, Gemini ou Claude em poucos passos
Estrutura do projeto
template-bot-whatsapp/
├── src/
│ ├── flows/
│ │ ├── router.js # Toda mensagem passa por aqui
│ │ └── mainMenu.js # Fluxo do menu principal
│ ├── commands/
│ │ └── ping.js # Exemplo de comando por palavra-chave
│ ├── middlewares/
│ │ └── logger.js # Log no terminal
│ └── utils/
│ └── messages.js # Todos os textos em um só lugar
├── index.js
└── .env.example
Como rodar
git clone https://github.com/ericnacif/template-bot-whatsapp.git
cd template-bot-whatsapp
npm install
node index.js
Escaneie o QR Code que aparece no terminal com o WhatsApp. A sessão é salva localmente — você só faz isso uma vez.
Como funciona o sistema de fluxos
O bot usa sessões por usuário combinadas com roteamento por etapas. Cada pessoa tem seu próprio estado de conversa, totalmente independente.
Usuário: oi
Bot: Menu principal — opções 1, 2, 3
Usuário: 1
Bot: Submenu de informações
Usuário: 0
Bot: Volta ao menu principal
O roteador central (router.js) recebe todas as mensagens e decide para qual fluxo encaminhar:
// src/flows/router.js
async function router(message, sessions) {
const body = message.body.toLowerCase().trim();
const from = message.from;
if (['oi', 'olá', 'menu', 'start'].includes(body)) {
return mainMenu(message, sessions);
}
const session = sessions.get(from);
if (session) {
return mainMenu(message, sessions);
}
}
Textos centralizados
Todos os textos ficam em src/utils/messages.js. Assim você nunca precisa caçar strings espalhadas pelo código:
const MESSAGES = {
mainMenu: `👋 Olá! Como posso ajudar?
*1* - Produtos
*2* - Suporte
*3* - Encerrar`,
goodbye: `Até logo! Se precisar, é só chamar. 😊`,
};
Integrando com IA
A estrutura está pronta para isso. Instale o SDK e crie um novo fluxo:
npm install openai
// src/flows/iaFlow.js
const OpenAI = require('openai');
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function iaFlow(message) {
const completion = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [{ role: 'user', content: message.body }],
});
return message.reply(completion.choices[0].message.content);
}
module.exports = { iaFlow };
Depois registre no router.js como qualquer outro fluxo. Funciona da mesma forma com Gemini ou Claude.
Repositório
O template está disponível no GitHub com documentação completa:
👉 github.com/ericnacif/template-bot-whatsapp
Se te ajudou, deixa uma ⭐ — isso ajuda o projeto a chegar em mais devs!
Top comments (0)