Pular para o conteúdo principal

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_id e client_secret)
  • Um servidor backend acessível pela internet com HTTPS (use ngrok para desenvolvimento local)
  • EVOLUTION_WEBHOOK_SECRET definido 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 digitaComo o Ozzie trata
gastei R$45 no supermercadoRegistrado como transação em Alimentação
paguei R$120 de conta de luzRegistrado 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).

dica

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árioO que enviar ao usuário
Número desconhecidoIniciar fluxo de onboarding
INTAKE_REQUIRED do OzziePedir renda/objetivo para completar o cadastro
Imagem ilegívelPedir 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."
aviso

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.