WhatsApp Business API Grátis: Guia 2026

WhatsApp Business API grátis: Evolution API, Baileys, WPPConnect. Setup completo, webhooks, envio massa, chatbot IA. 100% funcional sem custos (1.900 buscas/mês).

📚 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. Pré-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á! Está é uma mensagem teste."
  }'

Python:

import requests

BASE_URL = "https://seudominio.com"
API_KEY = "sua-api-key"
INSTANCE = "meuwhatsapp"

def enviar_texto(número, mensagem):
    response = requests.post(
        f"{BASE_URL}/message/sendText/{INSTANCE}",
        headers={"apikey": API_KEY, "Content-Type": "application/json"},
        json={
            "number": número,
            "text": mensagem
        }
    )
    return response.json()

# Usar
enviar_texto("5511999999999", "Olá! Teste Evolution API")

Imagem com Legenda

def enviar_imagem(número, url_imagem, legenda=""):
    response = requests.post(
        f"{BASE_URL}/message/sendMedia/{INSTANCE}",
        headers={"apikey": API_KEY, "Content-Type": "application/json"},
        json={
            "number": número,
            "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(número, 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": número,
            "audio": audio_b64,
            "encoding": True  # True = base64
        }
    )
    return response.json()

# Usar
enviar_audio("5511999999999", "audio.mp3")

Documento (PDF)

def enviar_documento(número, url_documento, nome_arquivo):
    response = requests.post(
        f"{BASE_URL}/message/sendMedia/{INSTANCE}",
        headers={"apikey": API_KEY, "Content-Type": "application/json"},
        json={
            "number": número,
            "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(número, texto, botoes):
    response = requests.post(
        f"{BASE_URL}/message/sendButtons/{INSTANCE}",
        headers={"apikey": API_KEY, "Content-Type": "application/json"},
        json={
            "number": número,
            "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(número, titulo, seções):
    response = requests.post(
        f"{BASE_URL}/message/sendList/{INSTANCE}",
        headers={"apikey": API_KEY, "Content-Type": "application/json"},
        json={
            "number": número,
            "title": titulo,
            "description": "Escolha uma opção abaixo:",
            "buttonText": "Ver opções",
            "sections": seções
        }
    )
    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
        número = 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 {número}: {texto}")

        # Processar comando
        if texto.lower() == 'oi':
            enviar_resposta(número, "Olá! Como posso ajudar?")
        elif texto.lower() == 'menu':
            enviar_menu(número)
        else:
            # Processar com IA
            resposta = processar_ia(texto)
            enviar_resposta(número, resposta)

    return {'status': 'ok'}, 200

def enviar_resposta(número, texto):
    requests.post(
        f"{EVOLUTION_URL}/message/sendText/{INSTANCE}",
        headers={"apikey": API_KEY, "Content-Type": "application/json"},
        json={"number": número, "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

        número = 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(número, texto)

        # Enviar resposta
        enviar_mensagem(número, resposta)

    return {'status': 'ok'}, 200

def processar_ia(número, mensagem):
    # Inicializar conversa
    if número not in conversas:
        conversas[número] = [
            {
                "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 Número
- Calcular frete: /frete CEP

Seja amigável, use emojis moderadamente.
                """
            }
        ]

    # Adicionar mensagem usuário
    conversas[número].append({"role": "user", "content": mensagem})

    # Chamar GPT-4
    response = openai_client.chat.completions.create(
        model="gpt-4-turbo",
        messages=conversas[número],
        max_tokens=300
    )

    resposta = response.choices[0].message.content

    # Salvar resposta
    conversas[número].append({"role": "assistant", "content": resposta})

    # Limitar histórico
    if len(conversas[número]) > 20:
        conversas[número] = conversas[número][:1] + conversas[número][-19:]

    return resposta

def enviar_mensagem(número, texto):
    requests.post(
        f"{EVOLUTION_URL}/message/sendText/{INSTANCE}",
        headers={"apikey": EVOLUTION_API_KEY, "Content-Type": "application/json"},
        json={
            "number": f"{número}@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.

Perguntas Frequentes

WhatsApp Business API é gratuita?+
A API oficial da Meta não é gratuita — cobra por mensagem. Mas existem alternativas open source como Evolution API que são 100% gratuitas e oferecem funcionalidades similares.
Qual a diferença entre WhatsApp Business e a API?+
O app WhatsApp Business é manual (você digita). A API permite automação: chatbots, envio em massa, integração com CRM e atendimento 24/7 sem intervenção humana.
Quantas mensagens posso enviar pela API?+
Com a Evolution API (gratuita), não há limite técnico. Mas o WhatsApp pode banir números que enviam muitas mensagens rapidamente. Recomenda-se máximo 50-100/dia no início.
Preciso de CNPJ para usar a API do WhatsApp?+
Para a API oficial da Meta, sim. Para alternativas como Evolution API, não precisa. Qualquer número WhatsApp pode ser conectado.
Felipe Zanoni

Fundador da Agência Café Online. Especialista em agentes de IA, automação de vendas e tráfego pago. Ajuda empresas a construir sistemas inteligentes de geração e conversão de leads com inteligência artificial.

Falar com Felipe