A API oficial do WhatsApp da Meta cobra por cada conversa iniciada. Para quem está começando ou testando uma ideia, isso é um bloqueio real.

Existe uma solução open-source brasileira que muda o jogo: a Evolution API. Ela conecta ao WhatsApp Web via código, sem precisar da API oficial e sem custo por mensagem.

Neste tutorial você vai construir um bot completo com Python que recebe mensagens, processa com IA e responde automaticamente — com memória de conversa por número.

O que vamos usar

  • Python + Flask — servidor que recebe as mensagens
  • Evolution API — conexão gratuita com o WhatsApp
  • Google Gemini API — inteligência artificial com plano gratuito
  • ngrok — expõe seu servidor local para a internet

Instalação

pip install flask requests google-generativeai python-dotenv

Crie um arquivo .env na raiz do projeto:

GEMINI_API_KEY=sua_chave_aqui
EVOLUTION_API_URL=http://localhost:8080
EVOLUTION_API_KEY=sua_chave_evolution
EVOLUTION_INSTANCE=minha-instancia

Obtenha sua chave Gemini gratuita em aistudio.google.com

Subindo a Evolution API com Docker

docker run -d \
  --name evolution-api \
  -p 8080:8080 \
  -e AUTHENTICATION_API_KEY=minha-chave-secreta \
  atendai/evolution-api:latest

Acesse http://localhost:8080, crie uma instância e escaneie o QR Code com seu WhatsApp.

O código completo

from flask import Flask, request, jsonify
import google.generativeai as genai
import requests
import os
from dotenv import load_dotenv

load_dotenv()
app = Flask(__name__)

genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
model = genai.GenerativeModel("gemini-2.0-flash")

historico = {}

def enviar_mensagem_whatsapp(numero, texto):
    url = f"{os.getenv('EVOLUTION_API_URL')}/message/sendText/{os.getenv('EVOLUTION_INSTANCE')}"
    headers = {"apikey": os.getenv("EVOLUTION_API_KEY")}
    payload = {"number": numero, "text": texto}
    requests.post(url, json=payload, headers=headers)

def processar_com_ia(numero, mensagem):
    if numero not in historico:
        historico[numero] = model.start_chat(history=[])
    chat = historico[numero]
    resposta = chat.send_message(f"Responda em português, direto: {mensagem}")
    return resposta.text

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.json
    if not data or data.get("event") != "messages.upsert":
        return jsonify({"status": "ignored"})
    try:
        msg = data["data"]["messages"][0]
        if msg.get("key", {}).get("fromMe"):
            return jsonify({"status": "self"})
        numero = msg["key"]["remoteJid"].replace("@s.whatsapp.net", "")
        texto = msg.get("message", {}).get("conversation", "")
        if texto:
            resposta = processar_com_ia(numero, texto)
            enviar_mensagem_whatsapp(numero, resposta)
    except Exception as e:
        print(f"Erro: {e}")
    return jsonify({"status": "ok"})

if __name__ == "__main__":
    app.run(port=5000, debug=True)

Expondo o servidor com ngrok

ngrok http 5000

Copie a URL HTTPS gerada e configure como webhook na Evolution API apontando para https://sua-url.ngrok.io/webhook.

Como funciona

  1. Alguém manda mensagem no WhatsApp conectado ao bot
  2. A Evolution API dispara uma requisição para o seu webhook
  3. O Flask recebe, extrai número e texto
  4. O Gemini processa mantendo histórico daquele número
  5. O bot responde automaticamente

Aviso importante

A Evolution API usa o WhatsApp Web — não é a API oficial da Meta. Para uso pessoal e testes funciona bem. Para volume alto em produção, limite o número de mensagens diárias para evitar bloqueio da conta.

Próximos passos

Com essa base você pode evoluir o bot para responder sobre catálogo de produtos, atender clientes, integrar com Google Calendar ou qualificar leads automaticamente.


Quer ir além? No livro O Arquiteto de IA mostro como escalar esse sistema para produção corporativa com múltiplos canais simultâneos. Acesse aqui


Leia também: Como Rodar um LLM Grátis no Seu PC com Ollama e Python