AI Automation · Trilha de projeto

AI Automation: automatize processos reais com IA

Automatize processos reais com IA, sem ser cientista de dados. Cada módulo combina teoria aplicada, fluxos de n8n comentados e exercícios em negócios reais. Ao concluí-los, todos os entregáveis se integram em um sistema de automação end-to-end pronto para entregar a um cliente.

módulos
10
entregáveis
10
projeto final
1
duração estimada
~8 sem

Projeto final · FlowBot: agente de automação para PME

Sistema completo de automação para um negócio real. End-to-end: bot de WhatsApp, RAG sobre o catálogo, pipeline de vendas automatizado, geração de conteúdo, suporte com escalonamento e dashboard de métricas.

Arquitetura

CamadaComponentes
EntradaWhatsApp API · Webhook HTTP · Email / Form
Orquestraçãon8n Workflows · AI Agent Node · Router Logic
InteligênciaClaude / GPT API · RAG (pgvector) · Tool Calling
MemóriaSupabase DB · Redis Session · Vector Store
Canais de saídaWhatsApp/Telegram · Email/CRM · Redes sociais
Observabilidaden8n Logs · Error alerts · Cost tracker

O que cada módulo contribui

  1. M1 → StackSetup
  2. M2 → LLMWrapper
  3. M3 → AgentFlow
  4. M4 → RAGPipeline
  5. M5 → WhatsAppBot
  6. M6 → SalesPipeline
  7. M7 → ContentEngine
  8. M8 → SupportAgent
  9. M9 → ResilienceLayer
  10. M10 → ProductionDeploy

Cronograma sugerido

SemanasFaseMódulos
Semanas 1–2FundamentosStack + LLMs
Semanas 3–4ArquiteturaAgentes + RAG
Semana 5CanaisWhatsApp + bots
Semanas 6–7Casos reaisVendas + Conteúdo + Suporte
Semana 8ProduçãoResiliência + Deploy
Compartilhar WhatsAppLinkedInX

Módulo 1 · Fase 1 · Fundamentos: stack e LLMs como ferramentas

A stack do automatizador

n8n, Make, APIs, webhooks — quando usar o quê

Por que n8n e não só Python?

80% das automações de negócio não precisam de código. O n8n permite construir fluxos complexos com lógica visual, conectar mais de 400 serviços com um clique e fazer deploy self-hosted sem depender de um vendor. O desenvolvedor de automações não substitui o engenheiro — ele tem um mercado próprio: as PMEs que precisam de resultados hoje, não daqui a seis meses.

Analogia

O n8n é como Lego Technic: as peças são os nós (HTTP, Supabase, OpenAI, Slack), e você decide como montá-las. O código entra só onde o Lego não alcança — e com o n8n, esse limite é mais distante do que parece.

A decisão de arquitetura mais importante: n8n vs Make vs Zapier

  • n8n (self-hosted): controle total, sem limite de operações, código JavaScript nos nós, ideal para dados sensíveis ou fluxos complexos. Requer uma VPS (~$5/mês).
  • Make (antigo Integromat): visual avançado, melhor para fluxos de dados não lineares, preço por operação. Bom para clientes que não querem self-host.
  • Zapier: o mais simples, o mais caro por operação. Só para integrações simples de 2–3 passos, em que a velocidade de setup importa mais que o custo.
Erro frequente

Usar Zapier para fluxos com mais de 5 passos ou volume acima de 1000 tarefas/mês. O custo dispara e o debug fica impossível. Migre para o n8n antes que o cliente veja a fatura.

Anatomia de um fluxo n8n em produção

ComponenteDescriçãoQuando usar
TriggerWebhook, Cron ou evento de app externoSempre — todo fluxo começa aqui
HTTP RequestChamada a qualquer API RESTQuando não existe nó nativo
AI AgentLLM com tools e memória nativa no n8nRaciocínio e decisões dinâmicas
Code (JS)JavaScript para transformação de dadosLógica que os nós não cobrem
If / SwitchRoteamento condicional do fluxoMúltiplos caminhos por tipo de input
Error TriggerCaptura erros do fluxo inteiroSempre em fluxos de produção

Fluxo n8n: stack-setup.json (n8n workflow)

{
  "name": "M1 · StackSetup — Webhook → AI → Supabase",
  // Patrón base que todos los flujos del proyecto usarán

  "nodes": [
    {
      "type": "n8n-nodes-base.webhook",
      "name": "Webhook Entry",
      // Recibe POST desde WhatsApp, formularios, o cualquier fuente
      "parameters": {
        "httpMethod": "POST",
        "path": "flowbot-entry",
        "responseMode": "responseNode"
      }
    },
    {
      "type": "n8n-nodes-base.code",
      "name": "Validate & Normalize",
      // Siempre valida el input antes de pasar al LLM
      "parameters": {
        "jsCode": "
const { body } = $input.first().json;

// Regla de oro: nunca confíes en el input sin validar
if (!body?.message || typeof body.message !== 'string') {
  throw new Error('INPUT_INVALID: campo message requerido');
}

return [{
  json: {
    message: body.message.trim().slice(0, 2000),
    user_id: body.user_id || 'anonymous',
    channel: body.channel || 'webhook',
    timestamp: new Date().toISOString(),
    trace_id: crypto.randomUUID()
  }
}];"
      }
    },
    {
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "name": "Claude (STANDARD)",
      "parameters": {
        "model": "claude-3-5-sonnet-20241022",
        "options": { "temperature": 0.3 }
      }
    },
    {
      "type": "n8n-nodes-base.supabase",
      "name": "Log to Supabase",
      // Todo flujo de prod logea inputs y outputs
      "parameters": {
        "operation": "insert",
        "tableId": "automation_logs"
      }
    }
  ]
}

Para se aprofundar: n8n docs · Supabase quickstart · Anthropic pricing

Exercício 1

Suba sua stack local em 30 minutos

Antes de automatizar qualquer coisa, você precisa do ambiente funcionando. Sem isso, nenhum dos módulos seguintes faz sentido.

  1. Instale o n8n localmente com Docker: docker run -it --rm --name n8n -p 5678:5678 n8nio/n8n
  2. Crie uma conta no Supabase e gere uma tabela automation_logs com os campos: id, trace_id, message, response, channel, created_at
  3. Obtenha sua API key da Anthropic (ou OpenAI) e configure-a como credential no n8n
  4. Crie o fluxo do código base: Webhook → Code (validação) → AI → Supabase → Respond
  5. Envie um POST com curl e verifique se o log fica no Supabase com o trace_id correto
Exercício 2

Compare o custo de 1000 requests

Antes de escolher um modelo, calcule quanto ele vai custar em produção.

  1. Escreva um prompt de ~300 palavras (system + user) representativo do seu caso de uso
  2. Use o tokenizer da Anthropic para contar os tokens de input e o output estimado
  3. Calcule o custo de 1000 requests com Haiku vs Sonnet vs GPT-4o-mini
  4. Quanto você economiza usando Haiku para classificações simples? Documente o número
  5. Decida qual modelo cada nó do projeto vai usar e justifique em um ADR de 1 página

Entregável do módulo

Vai para o projeto final: O docker-compose.yml e o fluxo base são a camada de infraestrutura do FlowBot. Todos os módulos seguintes adicionam nós a esse fluxo base — nunca criam um novo do zero.

Módulo 2 · Fase 1 · Fundamentos: stack e LLMs como ferramentas

LLMs como ferramentas de negócio

Prompts que funcionam em produção, sem surpresas

O prompt é o contrato com o modelo

Em automações de negócio, o output do LLM não é lido por um humano — ele é processado pelo próximo nó do fluxo. Isso muda completamente a forma de escrever um prompt. Você não busca "uma boa resposta", busca um JSON parseável, um booleano ou uma categoria de um enum. Ambiguidade no prompt é bug de produção.

Regra de ouro para automações

O LLM em um fluxo do n8n é como uma função: entrada previsível → output previsível. Se o seu prompt pode produzir dois formatos diferentes, você tem um bug. Sempre especifique o formato exato do output e valide-o antes de passá-lo ao próximo nó.

Estrutura de prompt para automações (4 seções)

  • PAPEL + TAREFA: quem o modelo é e exatamente o que ele deve fazer. Sem ambiguidade.
  • CONTEXTO DINÂMICO: variáveis que mudam a cada request (dados do usuário, histórico, catálogo). Injetadas em tempo de execução.
  • RESTRIÇÕES: o que ele NÃO pode fazer. Tão importante quanto o que ele pode.
  • OUTPUT FORMAT: o formato exato da resposta. Para fluxos: sempre JSON válido com schema explícito.

Output estruturado — a técnica mais importante para o n8n

TécnicaQuando usarRisco
JSON diretoClassificação, extração de dados, roteamentoO modelo pode adicionar texto antes do JSON
XML tags (<output>)Quando você precisa separar o raciocínio da respostaÉ preciso fazer parse do XML
Structured Outputs APIClaude/OpenAI suportam JSON schema nativoSó funciona com certos modelos
Few-shot + formatoQuando o formato é complexo e o modelo erraAdiciona tokens e custo

Fluxo n8n: llm-wrapper.json (n8n workflow)

// Nodo Code en n8n: LLM wrapper con output estructurado garantizado

const systemPrompt = `
ROL: Eres un clasificador de intenciones para un bot de soporte de PyME.
TAREA: Analiza el mensaje del usuario y devuelve una clasificación.

CATEGORÍAS DISPONIBLES:
- "product_inquiry": pregunta sobre producto, precio, disponibilidad
- "order_status": consulta sobre estado de pedido
- "complaint": queja o problema con producto/servicio
- "general": saludo, despedida, o conversación fuera de scope

RESTRICCIONES:
- Devuelve SOLO el JSON especificado. Sin texto adicional.
- No inventes categorías fuera de las 4 definidas.
- confidence debe ser un número entre 0.0 y 1.0.

OUTPUT FORMAT (devuelve EXACTAMENTE este JSON):
{
  "intent": "product_inquiry|order_status|complaint|general",
  "confidence": 0.0-1.0,
  "key_entities": ["entidad1", "entidad2"],
  "requires_human": true|false
}
`;

// Llamada con retry automático y validación de output
async function classifyWithRetry(message, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await $node["Claude API"].call({
      messages: [{ role: "user", content: message }],
      system: systemPrompt,
      max_tokens: 150  // output pequeño = más rápido y barato
    });

    try {
      // Limpia posibles decoradores del modelo antes de parsear
      const clean = response.text
        .replace(/```json\n?/g, '')
        .replace(/```/g, '')
        .trim();

      const parsed = JSON.parse(clean);

      // Valida que el schema sea correcto antes de continuar
      const validIntents = ['product_inquiry','order_status','complaint','general'];
      if (!validIntents.includes(parsed.intent)) throw new Error('INVALID_INTENT');
      if (typeof parsed.confidence !== 'number') throw new Error('INVALID_CONFIDENCE');

      return parsed;

    } catch (e) {
      if (attempt === maxRetries - 1) {
        // Último intento: devuelve fallback seguro en vez de romper el flujo
        return { intent: 'general', confidence: 0.5, key_entities: [], requires_human: true };
      }
    }
  }
}

return [{ json: await classifyWithRetry($json.message) }];

Para se aprofundar: Anthropic tool use · JSON schema validation · n8n Code node

Exercício 1

Construa um classificador de intenções

O classificador é o nó mais crítico de qualquer bot. Se ele falha aqui, o fluxo inteiro toma o caminho errado.

  1. Crie o prompt de classificação com 5 categorias para o seu caso de uso (ex.: vendas, suporte, preços, localização, outro)
  2. Teste com 20 mensagens variadas — em quantas ele acerta o intent?
  3. Identifique os 3 casos em que ele falha. É problema do prompt ou do modelo?
  4. Adicione exemplos few-shot para os casos que falham. Melhora?
  5. Implemente o wrapper com retry e fallback. Verifique que ele nunca quebra o fluxo, mesmo quando o JSON é inválido.
Exercício 2

Extração de dados estruturados de linguagem natural

Converter texto livre em dados estruturados é o caso de uso mais valioso do LLM em automações.

  1. Pegue 10 emails de pedidos reais (ou simulados) de um cliente hipotético
  2. Escreva um prompt que extraia: nome, produto, quantidade, data necessária, urgência (alta/média/baixa)
  3. Verifique se o JSON de output é parseável nos 10 casos
  4. Adicione o nó "Validate & Store" no n8n, que salva o objeto extraído no Supabase
  5. O que acontece se o email misturar espanhol e inglês? Continua funcionando?

Entregável do módulo

Vai para o projeto final: O LLMWrapper é o primeiro nó inteligente do FlowBot. No M3 ele será estendido para suportar Tool Calling. No M8, o classificador vai determinar para qual agente cada conversa é roteada.

Módulo 3 · Fase 2 · Arquitetura: agentes, RAG e canais

Agentes no n8n

AI Agent node, tool calling, memória e loops controlados

O que é o nó AI Agent do n8n?

O nó AI Agent do n8n implementa nativamente o padrão ReAct (Reason + Act) sem precisar de código Python. O agente pode usar ferramentas (outros nós do n8n), manter memória entre turnos e decidir quando já tem informação suficiente para responder. A diferença em relação a um simples nó LLM é que o agente pode dar vários passos antes de responder.

Analogia

Um nó LLM simples é como pedir uma resposta a alguém que não pode pesquisar nada. O AI Agent é como dar a essa pessoa acesso ao Google, a uma calculadora e ao seu banco de dados — ela pode pesquisar antes de responder. A mágica está em que ela decide sozinha quando pesquisar e quando já sabe o suficiente.

Tools disponíveis no n8n para o AI Agent

  • HTTP Request Tool: qualquer API externa. O agente decide quando chamá-la e com quais parâmetros.
  • Supabase Tool: busca e escrita no banco de dados. O agente pode consultar informações do cliente sem que você faça isso explicitamente.
  • Vector Store Tool: busca semântica em documentos. Base do padrão RAG.
  • Code Tool: JavaScript executável. Para cálculos ou transformações que o LLM faria mal.
  • Think Tool: permite que o agente raciocine em voz alta antes de agir. Melhora a qualidade em casos complexos.

O risco mais crítico: loops infinitos

Sem a configuração correta, um agente pode chamar a mesma ferramenta em ciclo se o output não satisfizer seus critérios internos. O n8n não impede isso por padrão.

Antipadrão

Configurar o AI Agent sem limite de iterações (maxIterations) em produção. Um loop de 50 iterações com Claude Sonnet custa ~$1.50 por conversa. Com 1000 usuários, são $1500 em um dia. Sempre defina maxIterations entre 5 e 10.

Fluxo n8n: agent-flow.json (configuración AI Agent node)

// Configuración del nodo AI Agent en n8n (parámetros clave)

{
  "type": "@n8n/n8n-nodes-langchain.agent",
  "parameters": {
    "agentType": "toolsAgent",  // ReAct nativo
    "maxIterations": 6,          // CRÍTICO: previene loops infinitos
    "returnIntermediateSteps": false,  // true solo para debugging

    "systemMessage": "
Eres FlowBot, asistente de soporte de {{company_name}}.

CAPACIDADES:
✓ Consultar estado de pedidos (usa search_orders)
✓ Buscar información de productos (usa search_catalog)
✓ Crear tickets de soporte (usa create_ticket)
✗ NO puedes: modificar pedidos, aplicar descuentos, acceder a datos de pago

REGLAS DE COMPORTAMIENTO:
- Responde siempre en el idioma en que te hablan
- Si la confianza es menor a 0.7, pide clarificación antes de actuar
- Si el problema requiere acción humana, escala sin intentar resolver tú

ESCALACIÓN INMEDIATA cuando:
- El cliente está molesto después de 2 intentos de resolución
- La consulta es sobre devolución de dinero
- El cliente pregunta explícitamente por un humano

OUTPUT: Siempre respuestas cortas (máx 3 oraciones para chat)
",

    "tools": [
      {
        "name": "search_orders",
        "description": "Busca pedidos del cliente. Usa order_id o email del cliente.",
        "node": "Supabase - Orders"
      },
      {
        "name": "search_catalog",
        "description": "Busca información de productos en el catálogo. Usa el nombre o descripción del producto.",
        "node": "Vector Store - Catalog"
      },
      {
        "name": "create_ticket",
        "description": "Crea un ticket de soporte. Úsalo cuando no puedas resolver el problema directamente.",
        "node": "HTTP - CRM Create Ticket"
      }
    ]
  }
}

Para se aprofundar: n8n AI Agent docs · ReAct paper · Tool calling Anthropic

Exercício 1

Implemente o loop ReAct visual no n8n

Antes de usar o nó AI Agent, entenda o padrão construindo-o manualmente para ver cada passo.

  1. Crie um fluxo manual: Webhook → Code (parse intent) → If (precisa de tool?) → HTTP Tool → Code (format response)
  2. Teste com: "quanto custa o produto X?" — o fluxo deve buscar no catálogo
  3. Teste com: "olá, boa tarde" — o fluxo deve responder direto, sem buscar
  4. Agora substitua toda essa lógica pelo nó AI Agent. Ficou mais simples? Que controle você perdeu?
  5. Force o loop: faça a ferramenta sempre retornar erro. O maxIterations é acionado?
Exercício 2

Meça o impacto do maxIterations no custo

Entender empiricamente quanto custa cada iteração adicional.

  1. Configure o agente com maxIterations=10 e registre o custo de 20 conversas variadas
  2. Quantas conversas usaram mais de 5 iterações? Quanto custaram em média?
  3. Ajuste maxIterations=5. Quais conversas agora não são resolvidas corretamente?
  4. Documente o equilíbrio ideal para o seu caso de uso específico
  5. Implemente um fallback: se o maxIterations for atingido, escale para um humano automaticamente

Entregável do módulo

Vai para o projeto final: O AgentFlow é o núcleo do FlowBot. No M4 ele será conectado ao RAGPipeline como tool. No M5 vai receber mensagens do WhatsApp. No M8 será especializado por tipo de conversa.

Módulo 4 · Fase 2 · Arquitetura: agentes, RAG e canais

RAG sem código — o conhecimento do negócio

Supabase pgvector, embeddings e retrieval real no n8n

RAG em termos de negócio

RAG (Retrieval-Augmented Generation) é a técnica que permite ao bot responder perguntas usando o conhecimento específico do seu cliente — catálogo, FAQs, políticas — sem precisar de fine-tuning. O fluxo é simples: o usuário faz uma pergunta → o sistema busca os documentos mais relevantes → o LLM responde usando esses documentos como contexto.

Em palavras simples

Imagine que você entrega ao LLM uma caixa de anotações com as informações do negócio. Antes de responder, o LLM procura na caixa quais anotações são relevantes para a pergunta, lê essas anotações e responde com base nelas. Você controla o que entra na caixa — isso é RAG.

Os 4 passos do pipeline RAG no n8n

  • Ingestão (offline): documento → split em chunks (400-600 tokens) → embedding (OpenAI ou Anthropic) → salvar no Supabase pgvector com metadata.
  • Retrieval (online): query do usuário → embedding → busca por similaridade de cosseno → top-5 chunks mais relevantes.
  • Augmentation: chunks recuperados → injetar como contexto no prompt do agente com a instrução "Use só esta informação para responder".
  • Citation check: a resposta do LLM está respaldada pelos chunks? Se não houver chunks relevantes, o agente deve admitir isso em vez de alucinar.
O erro mais comum em RAG

Chunks pequenos demais (<200 tokens) ou grandes demais (>1200 tokens). Os pequenos perdem contexto. Os grandes introduzem ruído que confunde o LLM. O sweet spot para catálogos de produtos e FAQs é 400–600 tokens com 10% de overlap.

Fluxo n8n: rag-pipeline.sql + n8n workflow

-- 1. Tabla de documentos con vector en Supabase
CREATE TABLE knowledge_base (
  id          uuid DEFAULT gen_random_uuid() PRIMARY KEY,
  content     text              NOT NULL,
  embedding   vector(1536),       -- OpenAI ada-002 / text-3-small
  source      text,             -- "catalog", "faq", "policy"
  metadata    jsonb,            -- producto_id, categoria, etc.
  created_at  timestamptz DEFAULT now()
);

-- 2. Función de búsqueda semántica (llama desde n8n HTTP Request)
CREATE OR REPLACE FUNCTION search_knowledge(
  query_embedding vector(1536),
  match_threshold float DEFAULT 0.78,
  match_count     int   DEFAULT 5
)
RETURNS TABLE(content text, similarity float, source text)
LANGUAGE sql STABLE AS $$
  SELECT content, 1 - (embedding <=> query_embedding) AS similarity, source
  FROM knowledge_base
  WHERE 1 - (embedding <=> query_embedding) > match_threshold
  ORDER BY similarity DESC
  LIMIT match_count;
$$;

-- 3. En n8n: nodo Code para preparar el contexto RAG
const chunks = $json.chunks;  // resultado de search_knowledge

if (chunks.length === 0) {
  return [{ json: { context: "", has_context: false } }];
}

const context = chunks
  .map((c, i) => `[Fuente ${i+1}]: ${c.content}`)
  .join('\n\n');

return [{ json: {
  context,
  has_context: true,
  sources: chunks.map(c => c.source)
}}];

Para se aprofundar: pgvector docs · n8n Vector Store node · OpenAI embeddings

Exercício 1

Indexe o catálogo de um cliente real

A qualidade do RAG depende 80% de como você indexa os documentos, não do LLM.

  1. Pegue 20-30 produtos de um catálogo real (ou invente um) — nome, descrição, preço, categoria
  2. Desenhe a estratégia de chunking: um chunk por produto? Por categoria? Justifique
  3. Crie o fluxo de ingestão no n8n: CSV/Sheet → Code (format) → OpenAI Embeddings → Supabase upsert
  4. Execute 10 perguntas sobre o catálogo. O retrieval retorna os produtos corretos?
  5. Ajuste o match_threshold até que perguntas irrelevantes retornem 0 chunks
Exercício 2

Conecte o RAG ao AI Agent como tool

O verdadeiro poder do RAG aparece quando o agente decide quando buscar — e não quando você força a busca em cada request.

  1. Configure o nó "Vector Store Tool" no AI Agent apontando para a sua tabela knowledge_base
  2. Teste: "Qual é o preço do produto X?" — o agente chama a tool ou responde de memória?
  3. Teste: "oi, tudo bem?" — o agente evita chamar a tool sem necessidade?
  4. Adicione a instrução "Se você não encontrar a informação no catálogo, admita" ao system prompt
  5. Verifique: pergunte sobre algo que NÃO está no catálogo. O agente alucina ou admite que não sabe?

Entregável do módulo

Vai para o projeto final: O RAGPipeline transforma o catálogo do cliente em memória consultável. No M6 (vendas), o agente vai usá-lo para recomendar produtos. No M8 (suporte), para responder sobre políticas e FAQ.

Módulo 5 · Fase 3 · Produção: canais, casos de negócio e resiliência

WhatsApp e canais de mensageria

Evolution API, Chatwoot, Telegram — bots que fazem coisas reais

WhatsApp como canal principal na América Latina

Na América Latina, o WhatsApp é o canal de comunicação padrão das PMEs. Mais de 90% dos clientes preferem resolver problemas pelo WhatsApp a usar email ou formulário web. Um bot de WhatsApp que funciona bem gera ROI imediato e visível: o dono do negócio percebe isso na redução das mensagens que precisa responder manualmente.

Evolution API vs WhatsApp Business API oficial

A Evolution API usa a sessão do WhatsApp Web (não oficial, gratuita, mais fácil de implementar). A API oficial da Meta exige verificação do negócio e tem custo por mensagem. Para testar e para clientes pequenos: Evolution. Para escala e conformidade regulatória: API oficial.

Os 3 estados de uma conversa no WhatsApp

  • Automatizada: o bot cuida de tudo. Vale para 70% das consultas repetitivas (preço, horários, status do pedido).
  • Assistida (HITL): o bot propõe, o humano aprova antes de enviar. Para orçamentos ou alterações de pedido.
  • Escalonada: o bot detecta que não consegue resolver e transfere para um humano no Chatwoot. Para reclamações ou casos complexos.
Erro que irrita o cliente

Escalar para um humano sem passar contexto. O cliente não quer repetir o problema. O fluxo de escalonamento deve incluir: histórico completo da conversa, classificação do problema e o que o bot já tentou. O Chatwoot recebe tudo isso via n8n antes de notificar o atendente humano.

Fluxo n8n: whatsapp-flow.json (Evolution API → n8n → Chatwoot)

// Flujo: mensaje WhatsApp → bot → respuesta automática o escalación

// PASO 1: Webhook de Evolution API (entrada)
// POST /webhook → { data: { key: { remoteJid }, message: { conversation } } }

const phone = $json.data.key.remoteJid.replace('@s.whatsapp.net', '');
const message = $json.data.message?.conversation
              || $json.data.message?.extendedTextMessage?.text
              || '';

// PASO 2: Recuperar o crear sesión del usuario
const session = await $node["Supabase - Get Session"].run({
  phone,
  create_if_missing: true
});

// PASO 3: Pasar al AI Agent con contexto completo
return [{ json: {
  phone,
  message,
  session_id: session.id,
  history: session.messages.slice(-10),  // últimos 10 mensajes
  channel: 'whatsapp'
}}];

// ─────────────────────────────────────────
// PASO 5: Enviar respuesta via Evolution API

const agentResponse = $json.output;
const shouldEscalate = $json.escalate === true;

if (shouldEscalate) {
  // Crear conversación en Chatwoot con contexto completo
  await $node["HTTP - Chatwoot Create Conv"].run({
    phone,
    initial_message: `[BOT escaló] Razón: ${$json.escalation_reason}\n\nHistorial:\n${session.history_text}`
  });
  // Notificar al cliente
  return [{ json: { text: "Te conecto con un asesor ahora mismo, espera un momento" }}];
}

return [{ json: { text: agentResponse }}];

Para se aprofundar: Evolution API docs · Chatwoot API · n8n WhatsApp node

Exercício 1

Suba um bot de WhatsApp em 60 minutos

O objetivo é ter um bot funcional end-to-end, mesmo que simples. O primeiro bot que funciona em produção é o mais importante.

  1. Instale a Evolution API na sua VPS com Docker. Escaneie o QR para conectar o WhatsApp.
  2. Configure o webhook da Evolution apontando para o seu n8n
  3. Crie o fluxo básico: Webhook → Code (parse WA message) → AI Agent → HTTP (send response via Evolution)
  4. Mande uma mensagem de WhatsApp para você mesmo. O bot responde?
  5. Adicione o nó do Supabase para salvar o histórico da conversa
Exercício 2

Implemente o escalonamento para o Chatwoot com contexto

Escalonamento sem contexto frustra o atendente humano tanto quanto o cliente. Este exercício garante que a transferência seja fluida.

  1. Conecte o Chatwoot ao n8n via API (você precisa da API key e do inbox_id)
  2. Implemente o gatilho de escalonamento: confiança < 0.6 OR "quero falar com uma pessoa" OR 3ª tentativa sem sucesso
  3. Ao escalar, crie a conversa no Chatwoot com o histórico formatado
  4. Envie ao cliente a mensagem de transferência + tempo estimado de espera
  5. Verifique: o atendente humano no Chatwoot vê o histórico completo sem precisar perguntar nada ao cliente

Entregável do módulo

Vai para o projeto final: O WhatsAppBot é a camada de entrada do FlowBot. No M6 entra o fluxo de qualificação de leads. No M8, o agente de suporte responde por este mesmo canal.

Módulo 6 · Fase 3 · Produção: canais, casos de negócio e resiliência

Pipeline de vendas automatizado

Lead enrichment, outreach, CRM sync e follow-up automático

O pipeline de vendas automatizado

Um lead entra pelo WhatsApp ou por um formulário → o sistema qualifica automaticamente (BANT: Budget, Authority, Need, Timeline) → enriquece o perfil com informações públicas → agenda o follow-up → atualiza o CRM. O vendedor só mexe nos leads qualificados.

  • Qualificação com LLM: o agente extrai o BANT do texto da conversa. Score de 0 a 10. Se <5, nurturing automático. Se ≥5, atribui a um vendedor.
  • Lead enrichment: com o email ou telefone, busca informações públicas (LinkedIn, Google) usando nós HTTP Request.
  • CRM sync: o n8n tem nós nativos para HubSpot, Pipedrive, Salesforce e Twenty CRM (self-hosted). Um lead qualificado é criado automaticamente com todas as suas propriedades.
  • Follow-up scheduler: se não houver resposta em 24h, o n8n envia uma mensagem de acompanhamento. Ele para automaticamente quando o lead responde.
GDPR e LGPD — o que você não pode ignorar

No Brasil (LGPD) e na Europa (GDPR), automatizar mensagens de outreach sem consentimento explícito é ilegal. Sempre inclua opt-in na primeira mensagem e salve o timestamp do consentimento no Supabase. O fluxo deve ter um nó "check_consent" antes de qualquer mensagem automática.

Entregável do módulo

Vai para o projeto final: O SalesPipeline é alimentado pelo WhatsAppBot do M5. Quando o classificador detecta intenção de compra, ele aciona este fluxo. O score do lead determina se ele vai para automação ou para um vendedor humano.

Módulo 7 · Fase 3 · Produção: canais, casos de negócio e resiliência

Motor de conteúdo automatizado

Pipelines de geração, aprovação humana e publicação multicanal

Conteúdo gerado com aprovação humana — o padrão correto

Publicar conteúdo gerado por IA diretamente, sem revisão humana, é o antipadrão mais comum e mais caro. O padrão correto é: geração automática → revisão humana em 1 clique → publicação agendada. O n8n implementa isso nativamente com o nó "Wait for Webhook", que pausa o fluxo até receber a aprovação.

  • Geração: a partir de um brief, keywords ou dados do produto → o LLM gera variantes de post para Instagram, LinkedIn, WhatsApp.
  • Revisão (HITL): o n8n envia as variantes por email ou Slack com botões Aprovar/Rejeitar/Editar. O fluxo espera (máx. 24h).
  • Publicação agendada: ao aprovar, o n8n usa as APIs nativas de cada rede social (ou Buffer/Later como proxy) para publicar no horário ideal.
  • Reaproveitamento: posts com bom engajamento são salvos como few-shot examples para melhorar a geração futura.

Entregável do módulo

Vai para o projeto final: O ContentEngine é disparado por cron (ex.: segunda 9h, quarta 9h, sexta 9h) ou manualmente. O RAGPipeline do M4 dá a ele contexto sobre os produtos do cliente para gerar conteúdo relevante.

Módulo 8 · Fase 3 · Produção: canais, casos de negócio e resiliência

Agente de suporte especializado

Classificação, resposta, escalonamento e tickets — um fluxo real

Suporte automatizado que não frustra o cliente

O bot de suporte precisa cumprir uma regra simples: se consegue resolver o problema na primeira tentativa, resolve. Se não consegue, escala rápido e com contexto. 70% das consultas de suporte em uma PME são repetitivas (status do pedido, horários, preços). Automatizá-las libera a equipe para os casos que realmente precisam de atenção humana.

  • Classificação de urgência: o agente detecta se a consulta é crítica (produto com defeito, pagamento não processado) e escala imediatamente, sem tentar resolver.
  • Resolução com RAG: para perguntas sobre produtos, políticas ou FAQ, o agente usa a knowledge base do M4 antes de responder.
  • Criação automática de tickets: qualquer consulta que o bot não consiga resolver gera um ticket no CRM com categoria, prioridade e resumo do problema.
  • CSAT automático: 30 minutos depois de encerrar uma conversa, o bot envia uma pergunta de satisfação (1-5). Os resultados são salvos para análise.

Entregável do módulo

Vai para o projeto final: O SupportAgent integra o RAGPipeline do M4 e o WhatsAppBot do M5. É o sistema mais completo do projeto — une todos os módulos anteriores em um fluxo de atendimento real.

Módulo 9 · Fase 4 · Resiliência e deploy: que não quebre sozinho e que o cliente consiga operar

Resiliência — quando as coisas falham

Logs, alertas, retry, circuit breaker e error handling de verdade

O sistema nunca deve quebrar em silêncio

Em produção, os fluxos falham. A API do WhatsApp cai, o Supabase dá timeout, o LLM retorna rate limit. O trabalho do automatizador não é evitar todas as falhas (impossível) — é garantir que, quando elas acontecem, o sistema responda com elegância e alerte a pessoa certa.

Princípio de design

Todo fluxo de produção tem exatamente 3 camadas: (1) Happy path — funciona bem 95% do tempo. (2) Retry — tenta de novo automaticamente diante de falhas transitórias. (3) Fallback — se tudo falhar, o sistema responde algo útil e alerta o operador. Sem a camada 3, não está pronto para produção.

As 4 técnicas de resiliência para automatizadores

  • Error Trigger node: captura qualquer erro no fluxo, salva o contexto completo no Supabase e envia um alerta por WhatsApp/Telegram ao operador.
  • Retry com backoff: o nó HTTP Request do n8n tem retry nativo. Configure 3 tentativas com backoff exponencial (1s, 2s, 4s) para APIs instáveis.
  • Fallback estático: se o LLM falhar depois de 3 tentativas, o fluxo envia uma mensagem pré-escrita ao usuário e cria um ticket automaticamente.
  • Circuit breaker manual: se uma ferramenta externa falhar mais de N vezes em 1 hora, desative esse nó automaticamente e notifique o operador antes que ele continue causando erros.

Fluxo n8n: resilience-layer.json (Error Trigger + fallback)

// Error Trigger — nodo especial que captura fallos de cualquier flujo
// Se configura como "Error Workflow" en los settings del flujo principal

{
  "type": "n8n-nodes-base.errorTrigger",
  "name": "FlowBot Error Catcher"
}

// Al activarse, recibe: execution, workflowData, error
// Nodo Code a continuación:

const { execution, error } = $json;

// 1. Log completo en Supabase para debugging
const errorLog = {
  execution_id: execution.id,
  workflow_name: execution.workflowData.name,
  error_message: error.message,
  error_node: error.node,
  input_data: JSON.stringify(execution.data.resultData?.lastNodeExecuted),
  timestamp: new Date().toISOString()
};
// → Supabase insert en tabla error_logs

// 2. Alerta inmediata por WhatsApp al operador
const alertMessage = `FlowBot Error
Flujo: ${execution.workflowData.name}
Error: ${error.message}
Nodo: ${error.node}
ID: ${execution.id}`;
// → HTTP Request POST a Evolution API

// 3. Si el error fue en conversación de usuario, enviar fallback
const userPhone = execution.data?.startData?.destinationNode?.phone;
if (userPhone) {
  // → Respuesta al usuario: "Lo siento, estamos teniendo problemas técnicos..."
  // → Crear ticket automático en CRM para dar seguimiento
}

return [{ json: { logged: true, alerted: true } }];

Para se aprofundar: n8n Error workflows · Supabase functions

Exercício 1

Force uma falha e verifique a cadeia de resposta

A única forma de saber se o seu sistema de resiliência funciona é quebrar o fluxo de propósito.

  1. No fluxo do AgentFlow do M3, adicione um nó Code que lança um erro com 30% de probabilidade
  2. Envie 10 mensagens de teste. Quantas falham? O Error Trigger é acionado?
  3. Verifique se o log de erro fica no Supabase com o contexto completo
  4. Verifique se o alerta de WhatsApp chega ao operador com o detalhe do erro
  5. Verifique se o usuário recebe a mensagem de fallback (e não um erro 500 vazio)
Exercício 2

Implemente o dashboard de erros no Supabase

Um sistema de monitoramento simples que o cliente possa ver sem precisar de acesso ao n8n.

  1. Crie uma view no Supabase: erros das últimas 24h por fluxo
  2. Crie uma função Postgres que retorna o health score: (requests_exitosos / total) * 100
  3. Construa um fluxo n8n com cron diário que envia o relatório de saúde por WhatsApp ao cliente
  4. Adicione um alerta automático: se error_rate > 5% em 1h, alerta imediato
  5. Documente quais erros são "normais" (rate limits transitórios) vs. críticos (API fora do ar)

Entregável do módulo

Vai para o projeto final: O ResilienceLayer se conecta a todos os fluxos anteriores como "Error Workflow". É a camada de segurança do sistema completo. Sem ela, uma falha silenciosa pode deixar 100 clientes sem resposta durante horas.

Módulo 10 · Fase 4 · Resiliência e deploy: que não quebre sozinho e que o cliente consiga operar

Deploy e monetização

Self-host em VPS, entregar para clientes e cobrar pela automação

Do fluxo local ao sistema em produção para um cliente

Deploy não é só subir o código. É configurar o ambiente do cliente, documentar o sistema para que ele consiga operá-lo sem você e definir o modelo de preços para que a automação seja rentável no longo prazo.

  • Infraestrutura mínima: VPS de $10/mês (Hetzner, Hostinger, DigitalOcean) + Docker Compose com n8n, Redis e Evolution API. O Supabase pode ficar no tier gratuito para começar.
  • Variáveis de ambiente por cliente: nunca coloque API keys hardcoded nos fluxos. Use o sistema de credenciais do n8n, separado por workspace por cliente.
  • Documentação do sistema: cada fluxo deve ter uma nota interna no n8n explicando o que faz, o que pode falhar e como reiniciá-lo. O cliente ou você vão ler isso em um incidente às 2h da manhã.
  • Modelo de preços: setup fee único ($500-$3000) + manutenção mensal ($100-$300/mês) + custo do LLM repassado com margem (cobrar 2x o custo real dos tokens).
O antipadrão mais caro da consultoria de automação

Entregar o sistema sem documentação e sem manutenção mensal. Em 3 meses, o cliente liga porque "parou de funcionar" — e como não há documentação nem contrato de suporte, você tem que consertar de graça. A manutenção mensal é onde está a rentabilidade real do negócio.

Para se aprofundar: n8n self-host docs · Docker Compose reference · Hetzner VPS pricing

Entregável do módulo

Vai para o projeto final: Este módulo não adiciona lógica nova — integra todos os entregáveis anteriores em um pacote pronto para entrega. O projeto final começa aqui: pegar o FlowBot completo, fazer o deploy em uma VPS real e documentá-lo para que o cliente o opere.

Projeto final

Projeto final: FlowBot, sistema multifluxo end-to-end

FlowBot: sistema de automação para PME. Um sistema multifluxo end-to-end: todos os entregáveis dos 10 módulos integrados em um sistema de automação real (bot de WhatsApp, vendas, conteúdo, suporte, resiliência e deploy), pronto para entregar a um cliente real.

Automação

  • Classificação de mensagens por intenção
  • RAG sobre o catálogo e o FAQ do negócio
  • Qualificação automática de leads (BANT)
  • Geração de conteúdo com aprovação
  • Follow-up automático de vendas

Canais e integrações

  • WhatsApp via Evolution API
  • Escalonamento para o Chatwoot com histórico
  • CRM sync (HubSpot / Twenty / Pipedrive)
  • Publicação multicanal de conteúdo
  • Alertas ao operador via WhatsApp

Resiliência e operação

  • Error handling global com fallback
  • Logs estruturados no Supabase
  • Health monitoring com alertas
  • Retry com backoff em todas as APIs
  • Documentação operacional para o cliente

Critérios de aprovação

Critério

Seu progresso fica salvo neste navegador.