📚 Série: Automação WhatsApp → Chatbot WhatsApp | Automação WhatsApp | API WhatsApp
O que é WhatsApp bot?
WhatsApp bot é programa automatizado que envia/recebe mensagens WhatsApp via API, sem intervenção humana. Bots executam tarefas como: responder FAQs, enviar lembretes, qualificar leads, processar pedidos e integrar com sistemas (CRM, e-commerce). Empresas economizam 70% do tempo de atendimento e aumentam conversões em 40-60% com bots WhatsApp.
Tipos de WhatsApp bots
1. Bot de respostas automáticas
Função: Responde mensagens com regras fixas
Exemplo:
Cliente: "Horário"
Bot: "Funcionamos seg-sex 9h-18h"
Complexidade: ✅ Baixa Uso: FAQs, informações básicas
2. Bot com IA (Chatbot)
Função: Entende contexto e responde inteligentemente
Exemplo:
Cliente: "Quanto custa o produto X?"
Bot: [busca no banco] "O produto X custa R$ 49,90. Quer adicionar ao carrinho?"
Complexidade: ⚠️ Média Uso: Atendimento, vendas, suporte
3. Bot de notificações
Função: Envia mensagens proativas
Exemplo:
- Lembrete de consulta (24h antes)
- Status de pedido
- Boleto vencendo
Complexidade: ✅ Baixa Uso: Alertas, campanhas
4. Bot transacional
Função: Processa ações (pagamentos, pedidos)
Exemplo:
Cliente: "Pedir 2 pizzas calabresa"
Bot: [cria pedido] "Pedido #123 criado. Total: R$ 78. PIX ou cartão?"
Complexidade: ❌ Alta Uso: E-commerce, delivery
3 formas de criar WhatsApp bot
Opção 1: Evolution API + Python (Recomendado)
Vantagens:
- ✅ Grátis e open-source
- ✅ Controle total
- ✅ Ilimitado
Desvantagens:
- ❌ Precisa programar
- ❌ Precisa VPS
Stack:
- Evolution API (WhatsApp)
- Flask (webhook)
- OpenAI/Claude (IA opcional)
Tutorial completo: Chatbot WhatsApp
Opção 2: WhatsApp Business API Oficial
Vantagens:
- ✅ Oficial do Meta
- ✅ Confiável
- ✅ Recursos avançados
Desvantagens:
- ❌ Pago ($0.005-0.02/msg)
- ❌ Aprovação demorada (7-14 dias)
- ❌ Limites por tier
Documentação: WhatsApp Cloud API
Opção 3: Plataformas no-code
Opções:
- Manychat ($15-145/mês)
- MobileMonkey ($19-299/mês)
- Landbot ($40-400/mês)
Vantagens:
- ✅ Sem código
- ✅ Interface visual
Desvantagens:
- ❌ Custo mensal alto
- ❌ Vendor lock-in
Tutorial: Bot Python com Evolution API
Passo 1: Setup Evolution API
# Instalar Docker
curl -fsSL https://get.docker.com | sh
# Clonar Evolution API
git clone https://github.com/EvolutionAPI/evolution-api
cd evolution-api
# Configurar
cp .env.example .env
nano .env # Adicionar API_KEY
# Subir
docker-compose up -d
Docs: Evolution API Tutorial
Passo 2: Criar bot Python
# bot.py
from flask import Flask, request
import requests
import os
app = Flask(__name__)
EVOLUTION_URL = os.getenv('EVOLUTION_URL', 'http://localhost:8080')
API_KEY = os.getenv('API_KEY')
INSTANCE = os.getenv('INSTANCE', 'minha-instancia')
def enviar_mensagem(numero, texto):
"""Envia mensagem via Evolution API"""
url = f"{EVOLUTION_URL}/message/sendText/{INSTANCE}"
payload = {
"number": numero,
"text": texto
}
headers = {"apikey": API_KEY}
return requests.post(url, json=payload, headers=headers).json()
@app.route('/webhook', methods=['POST'])
def webhook():
"""Recebe mensagens do WhatsApp"""
data = request.json
# Extrair dados
numero = data["key"]["remoteJid"].split("@")[0]
mensagem = data["message"]["conversation"].lower()
# Lógica de respostas
if "horário" in mensagem or "horario" in mensagem:
resposta = "Funcionamos seg-sex 9h-18h, sáb 9h-13h"
elif "preço" in mensagem or "preco" in mensagem:
resposta = "Nossos preços variam de R$ 50 a R$ 500. Qual produto te interessa?"
elif "endereço" in mensagem or "endereco" in mensagem:
resposta = "Rua Exemplo, 123 - São Paulo/SP"
else:
resposta = "Olá! Como posso ajudar? Digite: horário, preço ou endereço"
# Enviar resposta
enviar_mensagem(numero, resposta)
return '', 200
if __name__ == '__main__':
app.run(port=5000)
Passo 3: Configurar webhook
# Configurar webhook na Evolution API
curl -X POST http://localhost:8080/webhook/set/minha-instancia \
-H "apikey: SUA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://seu-servidor.com/webhook",
"events": ["messages.upsert"]
}'
Passo 4: Deploy
Opção A: VPS
# Copiar bot para servidor
scp bot.py user@servidor:/home/user/
# SSH no servidor
ssh user@servidor
# Instalar dependências
pip install flask requests
# Rodar com PM2
pm2 start bot.py --name whatsapp-bot
pm2 save
Opção B: Render.com (grátis)
# render.yaml
services:
- type: web
name: whatsapp-bot
env: python
buildCommand: pip install flask requests
startCommand: python bot.py
Bot com IA (GPT-4)
from openai import OpenAI
client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))
@app.route('/webhook', methods=['POST'])
def webhook_ia():
data = request.json
numero = data["key"]["remoteJid"].split("@")[0]
mensagem = data["message"]["conversation"]
# Chamar GPT-4
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Você é assistente da Empresa X. Seja breve (max 2 linhas)."},
{"role": "user", "content": mensagem}
],
max_tokens=100
)
resposta = response.choices[0].message.content
# Enviar
enviar_mensagem(numero, resposta)
return '', 200
Custo: GPT-4o-mini = $0.15/1M tokens (R$ 0.75)
Tutorial: API OpenAI
Bot Node.js (alternativa)
// bot.js
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());
const EVOLUTION_URL = process.env.EVOLUTION_URL;
const API_KEY = process.env.API_KEY;
const INSTANCE = process.env.INSTANCE;
async function enviarMensagem(numero, texto) {
await axios.post(
`${EVOLUTION_URL}/message/sendText/${INSTANCE}`,
{ number: numero, text: texto },
{ headers: { apikey: API_KEY } }
);
}
app.post('/webhook', async (req, res) => {
const data = req.body;
const numero = data.key.remoteJid.split('@')[0];
const mensagem = data.message.conversation.toLowerCase();
let resposta;
if (mensagem.includes('horário')) {
resposta = 'Funcionamos seg-sex 9h-18h';
} else {
resposta = 'Como posso ajudar?';
}
await enviarMensagem(numero, resposta);
res.sendStatus(200);
});
app.listen(5000, () => console.log('Bot rodando na porta 5000'));
Recursos avançados
1. Enviar mídias
# Enviar imagem
def enviar_imagem(numero, url_imagem, legenda):
payload = {
"number": numero,
"mediaMessage": {
"mediatype": "image",
"media": url_imagem,
"caption": legenda
}
}
requests.post(
f"{EVOLUTION_URL}/message/sendMedia/{INSTANCE}",
json=payload,
headers={"apikey": API_KEY}
)
# Uso
enviar_imagem("5511999999999", "https://exemplo.com/foto.jpg", "Veja nossa promoção!")
2. Botões interativos
payload = {
"number": "5511999999999",
"buttonMessage": {
"text": "Escolha uma opção:",
"buttons": [
{"buttonId": "1", "buttonText": {"displayText": "✅ Sim"}},
{"buttonId": "2", "buttonText": {"displayText": "❌ Não"}}
]
}
}
3. Listas (menu)
payload = {
"number": "5511999999999",
"listMessage": {
"title": "Nossos produtos",
"buttonText": "Ver opções",
"sections": [
{
"title": "Categoria A",
"rows": [
{"title": "Produto 1", "description": "R$ 50"},
{"title": "Produto 2", "description": "R$ 80"}
]
}
]
}
}
Casos reais
Caso 1: Padaria automatizou pedidos
Empresa: Padaria artesanal (2 atendentes)
Antes:
- Atendentes passavam 5h/dia no WhatsApp
- Pedidos perdidos (esqueciam de responder)
Bot implementado:
- Cardápio automatizado (lista interativa)
- Pedidos registrados automaticamente
- Confirmação via WhatsApp
Resultados:
- ✅ Tempo atendimento: 5h → 1h/dia
- ✅ Pedidos aumentaram 35%
- ✅ 0% pedidos perdidos
- ✅ Custo bot: R$ 40/mês (VPS)
Caso 2: Clínica reduziu no-show 60%
Empresa: Clínica odontológica (3 dentistas)
Bot:
- Lembrete automático 24h antes
- Confirmação via botão (Sim/Não)
- Se não confirma → liga pra reagendar
Resultados:
- ✅ No-show: 25% → 10%
- ✅ 15% mais consultas/mês
- ✅ R$ 12k receita adicional/mês
Caso 3: E-commerce recuperou carrinhos
Bot:
- Detecta carrinho abandonado
- Após 1h: “Olá! Vi que você deixou produtos…”
- Após 24h: Cupom 10% desconto
Resultados:
- ✅ 18% carrinhos recuperados
- ✅ R$ 47k receita adicional/mês
- ✅ ROI: 12.300%
Tutorial: Automação WhatsApp
Boas práticas
✅ FAÇA:
- Sempre se identifique como bot
resposta = "🤖 Olá! Sou um assistente automático. Como posso ajudar?"
- Respeite horários
from datetime import datetime
hora_atual = datetime.now().hour
if 9 <= hora_atual <= 18:
enviar_mensagem(numero, resposta)
else:
# Não enviar notificações à noite
pass
- Ofereça opção de humano
if "atendente" in mensagem or "humano" in mensagem:
enviar_mensagem(numero, "Transferindo para atendente humano...")
# Notificar equipe
- Limite de mensagens
# Máximo 1 mensagem/dia por contato (LGPD)
❌ NÃO FAÇA:
- ❌ Enviar spam (múltiplas mensagens não solicitadas)
- ❌ Comprar listas de contatos
- ❌ Usar número pessoal (use WhatsApp Business)
- ❌ Responder infinitamente (limitar loops)
Integrações úteis
1. CRM (HubSpot, Pipedrive)
# Criar contato no HubSpot após mensagem
import requests
def criar_contato_hubspot(nome, numero):
requests.post(
"https://api.hubapi.com/crm/v3/objects/contacts",
json={
"properties": {
"firstname": nome,
"phone": numero,
"lifecyclestage": "lead"
}
},
headers={"Authorization": f"Bearer {HUBSPOT_TOKEN}"}
)
2. Pagamentos (Stripe, Mercado Pago)
# Gerar link de pagamento
def gerar_link_pagamento(valor, descricao):
response = requests.post(
"https://api.mercadopago.com/checkout/preferences",
json={
"items": [{"title": descricao, "unit_price": valor, "quantity": 1}]
},
headers={"Authorization": f"Bearer {MP_TOKEN}"}
)
return response.json()["init_point"]
# Enviar link
link = gerar_link_pagamento(50.00, "Produto X")
enviar_mensagem(numero, f"Pague aqui: {link}")
3. Google Calendar (agendamentos)
from google.oauth2 import service_account
from googleapiclient.discovery import build
# Criar evento
service = build('calendar', 'v3', credentials=creds)
event = {
'summary': 'Consulta - Cliente X',
'start': {'dateTime': '2025-01-30T10:00:00-03:00'},
'end': {'dateTime': '2025-01-30T11:00:00-03:00'},
}
service.events().insert(calendarId='primary', body=event).execute()
Documentação
Próximos passos
- Chatbot WhatsApp - Bot com IA
- Automação WhatsApp - Workflows
- Evolution API - Setup completo
- API OpenAI - Integrar IA
Sobre o autor: Felipe Zanoni é especialista em WhatsApp bots, com 300+ implementações para empresas brasileiras.