📚 Série: WhatsApp Automation → API WhatsApp Node.js | CRM WhatsApp | Chatbot IA | Automação IA
O que é WhatsApp Business API Grátis?
WhatsApp Business API grátis usa bibliotecas open-source (Evolution API, Baileys, WPPConnect) conectando via WhatsApp Web (QR Code) para enviar/receber mensagens, criar chatbots, automações, CRM, envio massa sem custos Meta (vs oficial $0.005-0.09/msg). Soluções grátis processam webhooks real-time, suportam múltiplas instâncias, envio arquivos (PDF, imagem, áudio, vídeo até 64MB), buttons/lists interativos, grupos, status, operando 24/7 self-hosted (VPS $5/mês) ou cloud (Railway grátis). Ideal para empresas pequenas/médias, startups, MVPs validação sem compromisso financeiro Meta, processando 1k-100k mensagens/mês dependendo infraestrutura.
Diferença: API Oficial Meta (paga, compliance rigoroso) vs Open-source (grátis, QR Code, mesmas features básicas).
Top 3 Soluções WhatsApp API Grátis
1. Evolution API (Recomendado)
Por que melhor:
- REST API completa (Postman-like)
- Dashboard web admin
- TypeScript (código limpo)
- Webhooks robustos
- Múltiplas instâncias
- Comunidade ativa (6k+ stars GitHub)
Features:
- ✅ Enviar texto, mídia, localização, contato
- ✅ Buttons, lists, poll
- ✅ Grupos (criar, admin, mensagens)
- ✅ Status (stories)
- ✅ Webhooks (mensagens, status, grupos)
- ✅ TypeBot/Chatwoot integração
- ✅ RabbitMQ/SQS (filas)
Stack:
- Node.js + TypeScript
- Prisma ORM
- MongoDB/PostgreSQL
- Redis (cache)
2. Baileys
Características:
- Biblioteca base (JavaScript/TypeScript)
- Mais leve (sem dashboard)
- Multi-device nativo
- Conecta direto WhatsApp Web protocol
Ideal para: Desenvolvedores (integração custom)
3. WPPConnect
Características:
- Browser-based (Puppeteer)
- Interface web incluída
- Funciona similar Venom-bot
- Boa documentação PT-BR
Contra: Mais pesado (Chrome headless)
Instalar Evolution API: Passo a Passo
Opção 1: Docker (Recomendado)
1. Pre-requisitos:
# Instalar Docker
curl -fsSL https://get.docker.com | sh
# Instalar Docker Compose
sudo apt install docker-compose
2. docker-compose.yml:
version: '3.8'
services:
evolution-api:
image: atendai/evolution-api:latest
container_name: evolution-api
restart: always
ports:
- "8080:8080"
environment:
# Server
SERVER_URL: https://seudominio.com
PORT: 8080
# Database
DATABASE_ENABLED: true
DATABASE_PROVIDER: postgresql
DATABASE_CONNECTION_URI: postgresql://postgres:senha@postgres:5432/evolution
# Auth
AUTHENTICATION_API_KEY: sua-api-key-secreta-aqui
# Webhook global (opcional)
WEBHOOK_GLOBAL_URL: https://seudominio.com/webhook
WEBHOOK_GLOBAL_ENABLED: false
# Logs
LOG_LEVEL: info
depends_on:
- postgres
postgres:
image: postgres:15-alpine
container_name: postgres
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: senha
POSTGRES_DB: evolution
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
3. Subir:
docker-compose up -d
4. Acessar:
http://localhost:8080
API Key: sua-api-key-secreta-aqui (header "apikey")
Opção 2: Railway (Deploy 1-click grátis)
1. Deploy:
# Fork repositório
gh repo fork EvolutionAPI/evolution-api
# Deploy Railway
railway login
railway init
railway up
2. Variáveis ambiente:
SERVER_URL=https://sua-app.railway.app
AUTHENTICATION_API_KEY=chave-secreta
DATABASE_ENABLED=true
DATABASE_PROVIDER=postgresql
DATABASE_CONNECTION_URI=(Railway auto-gera)
3. Pronto! API disponível em https://sua-app.railway.app
Conectar WhatsApp: Criar Instância
Via API (cURL)
1. Criar instância:
curl -X POST https://seudominio.com/instance/create \
-H "apikey: sua-api-key-secreta-aqui" \
-H "Content-Type: application/json" \
-d '{
"instanceName": "meuwhatsapp",
"qrcode": true,
"integration": "WHATSAPP-BAILEYS"
}'
Resposta:
{
"instance": {
"instanceName": "meuwhatsapp",
"status": "created"
},
"qrcode": {
"base64": "data:image/png;base64,iVBOR..."
}
}
2. Escanear QR Code:
- Abrir WhatsApp app
- Menu (⋮) → Aparelhos conectados
- Conectar aparelho
- Escanear QR Code (válido 60seg)
3. Verificar conexão:
curl https://seudominio.com/instance/connectionState/meuwhatsapp \
-H "apikey: sua-api-key-secreta-aqui"
Resposta:
{
"instance": "meuwhatsapp",
"state": "open"
}
Enviar Mensagens: Exemplos
Texto Simples
curl -X POST https://seudominio.com/message/sendText/meuwhatsapp \
-H "apikey: sua-api-key" \
-H "Content-Type: application/json" \
-d '{
"number": "5511999999999",
"text": "Olá! Esta é uma mensagem teste."
}'
Python:
import requests
BASE_URL = "https://seudominio.com"
API_KEY = "sua-api-key"
INSTANCE = "meuwhatsapp"
def enviar_texto(numero, mensagem):
response = requests.post(
f"{BASE_URL}/message/sendText/{INSTANCE}",
headers={"apikey": API_KEY, "Content-Type": "application/json"},
json={
"number": numero,
"text": mensagem
}
)
return response.json()
# Usar
enviar_texto("5511999999999", "Olá! Teste Evolution API")
Imagem com Legenda
def enviar_imagem(numero, url_imagem, legenda=""):
response = requests.post(
f"{BASE_URL}/message/sendMedia/{INSTANCE}",
headers={"apikey": API_KEY, "Content-Type": "application/json"},
json={
"number": numero,
"mediatype": "image",
"media": url_imagem, # URL pública ou base64
"caption": legenda
}
)
return response.json()
# Exemplo
enviar_imagem(
"5511999999999",
"https://exemplo.com/imagem.jpg",
"Confira nossa promoção! 🎉"
)
Áudio (Nota de Voz)
import base64
def enviar_audio(numero, arquivo_audio):
# Ler arquivo
with open(arquivo_audio, "rb") as f:
audio_b64 = base64.b64encode(f.read()).decode()
response = requests.post(
f"{BASE_URL}/message/sendWhatsAppAudio/{INSTANCE}",
headers={"apikey": API_KEY, "Content-Type": "application/json"},
json={
"number": numero,
"audio": audio_b64,
"encoding": True # True = base64
}
)
return response.json()
# Usar
enviar_audio("5511999999999", "audio.mp3")
Documento (PDF)
def enviar_documento(numero, url_documento, nome_arquivo):
response = requests.post(
f"{BASE_URL}/message/sendMedia/{INSTANCE}",
headers={"apikey": API_KEY, "Content-Type": "application/json"},
json={
"number": numero,
"mediatype": "document",
"media": url_documento,
"fileName": nome_arquivo
}
)
return response.json()
# Exemplo
enviar_documento(
"5511999999999",
"https://exemplo.com/contrato.pdf",
"Contrato_Servicos.pdf"
)
Buttons (Botões)
def enviar_buttons(numero, texto, botoes):
response = requests.post(
f"{BASE_URL}/message/sendButtons/{INSTANCE}",
headers={"apikey": API_KEY, "Content-Type": "application/json"},
json={
"number": numero,
"title": texto,
"description": "Escolha uma opção:",
"buttons": botoes,
"footerText": "Agência Café Online"
}
)
return response.json()
# Usar
enviar_buttons(
"5511999999999",
"Olá! Como posso ajudar?",
[
{"buttonId": "1", "buttonText": {"displayText": "📦 Rastrear pedido"}},
{"buttonId": "2", "buttonText": {"displayText": "💬 Falar com atendente"}},
{"buttonId": "3", "buttonText": {"displayText": "❓ Dúvidas frequentes"}}
]
)
List (Lista Menu)
def enviar_lista(numero, titulo, secoes):
response = requests.post(
f"{BASE_URL}/message/sendList/{INSTANCE}",
headers={"apikey": API_KEY, "Content-Type": "application/json"},
json={
"number": numero,
"title": titulo,
"description": "Escolha uma opção abaixo:",
"buttonText": "Ver opções",
"sections": secoes
}
)
return response.json()
# Usar
enviar_lista(
"5511999999999",
"Menu Atendimento",
[
{
"title": "Vendas",
"rows": [
{"rowId": "1", "title": "Ver produtos", "description": "Catálogo completo"},
{"rowId": "2", "title": "Fazer pedido", "description": "Comprar agora"}
]
},
{
"title": "Suporte",
"rows": [
{"rowId": "3", "title": "Rastrear pedido", "description": "Status entrega"},
{"rowId": "4", "title": "Falar com humano", "description": "Atendente"}
]
}
]
)
Webhooks: Receber Mensagens
Configurar Webhook
curl -X POST https://seudominio.com/webhook/set/meuwhatsapp \
-H "apikey: sua-api-key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://meuservidor.com/webhook/whatsapp",
"webhook_by_events": false,
"events": [
"MESSAGES_UPSERT",
"MESSAGES_UPDATE",
"CONNECTION_UPDATE"
]
}'
Processar Webhook (Flask)
from flask import Flask, request
import requests
app = Flask(__name__)
EVOLUTION_URL = "https://seudominio.com"
API_KEY = "sua-api-key"
INSTANCE = "meuwhatsapp"
@app.route('/webhook/whatsapp', methods=['POST'])
def webhook():
data = request.json
# Evento nova mensagem
if data['event'] == 'messages.upsert':
msg = data['data']['message']
# Ignorar próprias mensagens
if msg['key'].get('fromMe'):
return {'status': 'ok'}, 200
# Dados mensagem
numero = msg['key']['remoteJid']
texto = msg.get('message', {}).get('conversation', '')
# Se não é texto (pode ser imagem, áudio, etc)
if not texto:
texto = extrair_texto_mensagem(msg)
print(f"Mensagem de {numero}: {texto}")
# Processar comando
if texto.lower() == 'oi':
enviar_resposta(numero, "Olá! Como posso ajudar?")
elif texto.lower() == 'menu':
enviar_menu(numero)
else:
# Processar com IA
resposta = processar_ia(texto)
enviar_resposta(numero, resposta)
return {'status': 'ok'}, 200
def enviar_resposta(numero, texto):
requests.post(
f"{EVOLUTION_URL}/message/sendText/{INSTANCE}",
headers={"apikey": API_KEY, "Content-Type": "application/json"},
json={"number": numero, "text": texto}
)
def extrair_texto_mensagem(msg):
message_content = msg.get('message', {})
if 'extendedTextMessage' in message_content:
return message_content['extendedTextMessage']['text']
elif 'imageMessage' in message_content:
return message_content['imageMessage'].get('caption', '')
elif 'videoMessage' in message_content:
return message_content['videoMessage'].get('caption', '')
return ''
if __name__ == '__main__':
app.run(port=5000)
Chatbot IA Completo
Bot WhatsApp + GPT-4 + Evolution API:
from flask import Flask, request
import requests
from openai import OpenAI
app = Flask(__name__)
# Configs
EVOLUTION_URL = "https://evolution.seudominio.com"
EVOLUTION_API_KEY = "sua-key"
INSTANCE = "meuwhatsapp"
OPENAI_KEY = "sk-..."
openai_client = OpenAI(api_key=OPENAI_KEY)
# Memória conversas
conversas = {}
@app.route('/webhook/whatsapp', methods=['POST'])
def webhook():
data = request.json
if data['event'] == 'messages.upsert':
msg = data['data']['message']
if msg['key'].get('fromMe'):
return {'status': 'ok'}, 200
numero = msg['key']['remoteJid'].replace('@s.whatsapp.net', '')
texto = msg.get('message', {}).get('conversation', '')
if not texto:
return {'status': 'ignored'}, 200
# Processar com IA
resposta = processar_ia(numero, texto)
# Enviar resposta
enviar_mensagem(numero, resposta)
return {'status': 'ok'}, 200
def processar_ia(numero, mensagem):
# Inicializar conversa
if numero not in conversas:
conversas[numero] = [
{
"role": "system",
"content": """
Você é assistente virtual da Loja XYZ.
Base conhecimento:
- Horário: Seg-Sex 9h-18h
- Frete grátis: Acima R$ 100
- Prazo entrega: 3-7 dias úteis
- Troca: 30 dias
Ações disponíveis:
- Consultar pedido: /pedido NUMERO
- Calcular frete: /frete CEP
Seja amigável, use emojis moderadamente.
"""
}
]
# Adicionar mensagem usuário
conversas[numero].append({"role": "user", "content": mensagem})
# Chamar GPT-4
response = openai_client.chat.completions.create(
model="gpt-4-turbo",
messages=conversas[numero],
max_tokens=300
)
resposta = response.choices[0].message.content
# Salvar resposta
conversas[numero].append({"role": "assistant", "content": resposta})
# Limitar histórico
if len(conversas[numero]) > 20:
conversas[numero] = conversas[numero][:1] + conversas[numero][-19:]
return resposta
def enviar_mensagem(numero, texto):
requests.post(
f"{EVOLUTION_URL}/message/sendText/{INSTANCE}",
headers={"apikey": EVOLUTION_API_KEY, "Content-Type": "application/json"},
json={
"number": f"{numero}@s.whatsapp.net",
"text": texto
}
)
if __name__ == '__main__':
app.run(port=5000)
Casos Reais
Caso 1: E-commerce - 2.400 atendimentos/mês
Problema:
- Atendimento manual (3 pessoas 9h-18h)
- 80% dúvidas repetitivas
- Tempo resposta: 45min
Solução:
- Evolution API + GPT-4
- RAG base conhecimento (150 perguntas)
- Functions (consultar pedido, calcular frete)
Resultados:
- ✅ 87% atendimentos resolvidos IA
- ✅ Tempo resposta: 30seg
- ✅ Satisfação: 4.6/5
- ✅ Economia: R$ 8k/mês (2 atendentes)
Custo:
- VPS: R$ 50/mês
- OpenAI API: R$ 200/mês
- Total: R$ 250/mês (vs R$ 8k antes)
Caso 2: Agendamentos Clínica
Bot: Agendamento automático consultas
Fluxo:
Cliente: "Quero agendar consulta"
Bot: "Qual especialidade? Dermatologia, Ortopedia, Clínico Geral"
Cliente: "Dermatologia"
Bot: [Busca agenda Google Calendar]
Bot: "Horários disponíveis:
1️⃣ Terça 14h - Dra. Maria
2️⃣ Quarta 10h - Dr. João
3️⃣ Quinta 16h - Dra. Ana"
Cliente: "1"
Bot: [Cria evento Calendar + envia confirmação]
Bot: "✅ Agendado! Terça 14h com Dra. Maria. Lembrete 24h antes."
Resultado:
- 78% agendamentos via bot
- No-shows: 23% → 9% (lembretes)
Próximos passos
- API WhatsApp Node.js - Desenvolvimento Node.js
- CRM WhatsApp - CRM integrado
- Chatbot IA - IA conversacional
- Automação IA - Workflows automáticos
- Chatbot Vendas - Vendas WhatsApp
- IA Atendimento - Atendimento completo
Precisa implementar WhatsApp API grátis? A Agência Café Online já implementou para 60+ empresas (ROI médio 800%). Consultoria grátis.
Sobre o autor: Felipe Zanoni implementa WhatsApp Business API grátis processando 500k+ mensagens/mês com Evolution API, chatbots IA e automações completas para empresas de todos os tamanhos.
💬 Precisa de Ajuda para Implementar?
A Agência Café Online já ajudou dezenas de empresas a implementarem soluções de automação e IA, com resultados reais e mensuráveis.
Fale comigo:
- 📱 WhatsApp: Clique aqui para conversar
- 📸 Instagram: @fe_leads
- 🌐 Site: agenciacafeonline.com.br
💡 Consultoria inicial gratuita para avaliar seu caso e propor uma solução personalizada.