WhatsApp Business API Grátis: Guia 2026

📚 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

  1. API WhatsApp Node.js - Desenvolvimento Node.js
  2. CRM WhatsApp - CRM integrado
  3. Chatbot IA - IA conversacional
  4. Automação IA - Workflows automáticos
  5. Chatbot Vendas - Vendas WhatsApp
  6. 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:

💡 Consultoria inicial gratuita para avaliar seu caso e propor uma solução personalizada.