Bot de Despesas no WhatsApp
Este guia explica como construir um rastreador de despesas e coach financeiro baseado no WhatsApp usando Ozzie e Evolution API. Os usuários simplesmente enviam mensagens de texto ou fotos de recibos para um número do WhatsApp — o Ozzie analisa a entrada, registra a transação e responde com uma resposta personalizada no idioma do usuário.
Como funciona
Usuário envia mensagem WhatsApp
|
v
Instância Evolution API
|
| POST /api/webhooks/evolution
v
Seu Backend (handler do webhook)
|
|── Este usuário está registrado?
| Não → Enviar prompts de onboarding, coletar info, chamar POST /users
| Sim → Encaminhar para processamento de chat/transação do Ozzie
v
API Ozzie processa mensagem e gera resposta
|
v
Seu Backend envia resposta de volta via Evolution API
|
v
Usuário recebe resposta no WhatsApp
Pré-requisitos
- Instância Evolution API rodando e conectada a um número WhatsApp
- Credenciais da API Ozzie (
client_ideclient_secret) - Um servidor backend acessível pela internet com HTTPS (use ngrok para desenvolvimento local)
EVOLUTION_WEBHOOK_SECRETdefinido com o mesmo valor em seu ambiente e na configuração da instância Evolution API
Passos de configuração
1. Implantar seu servidor de webhook
// server.js
import express from 'express';
import { handleEvolutionWebhook } from './webhooks/evolution.js';
const app = express();
app.use(express.json({ limit: '10mb' }));
app.post('/api/webhooks/evolution', handleEvolutionWebhook);
app.listen(3000, () => console.log('Servidor webhook rodando na porta 3000'));
2. Configurar Evolution API
No dashboard da Evolution API, defina a URL do webhook para sua instância:
https://seu-servidor.com/api/webhooks/evolution
3. Definir variáveis de ambiente
OZZIE_CLIENT_ID=ozz_client_a1b2c3d4
OZZIE_CLIENT_SECRET=sk_live_xK9mP2qR7tL...
EVOLUTION_WEBHOOK_SECRET=a7f3c8e1b2d4e5f60718293a4b5c6d7e
EVOLUTION_API_URL=https://sua-instancia-evolution.com
EVOLUTION_INSTANCE=nome_da_sua_instancia
4. Implementar o handler do webhook
export async function handleEvolutionWebhook(req, res) {
const apiKey = req.headers['apikey'];
if (apiKey !== process.env.EVOLUTION_WEBHOOK_SECRET) {
return res.status(401).json({ error: 'Não autorizado' });
}
const { event, data } = req.body;
if (event !== 'messages.upsert' || data?.key?.fromMe) {
return res.sendStatus(200);
}
const phoneRaw = data.key.remoteJid.replace('@s.whatsapp.net', '');
const phone = `+${phoneRaw}`;
const user = await findUserByPhone(phone);
if (!user) {
await handleNewUser(phone, data);
return res.sendStatus(200);
}
if (data.messageType === 'conversation') {
await handleTextMessage(user, phone, data.message?.conversation);
} else if (data.messageType === 'imageMessage') {
await handleImageMessage(user, phone, data.message?.imageMessage);
}
res.sendStatus(200);
}
Tipos de entrada suportados
Mensagens de texto
| O que o usuário digita | Como o Ozzie trata |
|---|---|
gastei R$45 no supermercado | Registrado como transação em Alimentação |
paguei R$120 de conta de luz | Registrado como transação em Utilidades |
como estou indo esse mês? | Coach de IA responde com resumo de gastos |
qual é minha meta de poupança? | Coach de IA responde com progresso da meta |
Fotos de recibos
Os usuários podem fotografar um recibo e enviar diretamente pelo WhatsApp. O analisador de imagens do Ozzie extrai nome do estabelecimento, valor total, data e itens (quando legíveis).
Lembre os usuários durante o onboarding que eles podem enviar fotos de recibos para registrar despesas sem esforço. Este é um dos recursos mais populares.
Fluxo de conversa de exemplo
Usuário: Oi, quero controlar meus gastos
Bot: Oi! Eu sou o Ozzie, seu coach financeiro pessoal 👋 Posso ajudar você a controlar gastos e atingir sua meta de poupança — direto aqui no WhatsApp. Para começar, qual é o seu nome?
Usuário: Ana
Bot: Prazer, Ana! Qual é a sua renda mensal líquida (após impostos)?
Usuário: Uns R$3.500
Bot: Entendido! E qual é seu principal objetivo financeiro agora — poupar dinheiro ou pagar dívidas?
Usuário: Poupar. Quero construir uma reserva de emergência.
Bot: Ótima meta, Ana! Montei seu perfil e seu primeiro plano financeiro. Com base na sua renda e despesas, recomendo poupar R$262 por mês (cerca de 7,5% da sua renda). Nesse ritmo, você teria R$3.000 de reserva inicial em cerca de 11 meses. Vou te lembrar duas vezes por mês com uma pequena ação. Pronta para começar?
Tratamento de erros
| Cenário | O que enviar ao usuário |
|---|---|
| Número desconhecido | Iniciar fluxo de onboarding |
INTAKE_REQUIRED do Ozzie | Pedir renda/objetivo para completar o cadastro |
| Imagem ilegível | Pedir foto melhor ou entrada manual |
RATE_LIMIT_EXCEEDED | "Estou um pouco ocupado agora — tente novamente em um minuto" |
INTERNAL_ERROR | "Algo deu errado no meu lado. Me dê um momento e tente novamente." |
Nunca envie mensagens de erro brutas ou stack traces para usuários via WhatsApp. Sempre traduza erros da API em mensagens amigáveis e acionáveis no idioma do usuário.