Pular para conteúdo

Arquitetura — IA Chatwoot Bepex


1. IA ROUTER V2 (iT5a8VV2vPF6ZpYL)

Roteador central. Recebe TODOS os webhooks do Chatwoot e direciona para o workflow de IA correto.

Fluxo:

Webhook POST /v2/router
  → TIPO EVENTO (switch: message_created / conversation_status_changed / etc.)
    → status conversa aberta? (if: status == "open")
      → TIPO MSG (switch: incoming / outgoing)
        → INBOX (switch por inbox_id)
          → IAS (switch por custom_attribute "ia_responsavel_conversa")
            → PADRAO / BE (outputs)
              → losand|chapasExpandidas|chapasPerfuradas (switch final por inbox)
                → HTTP Request para webhook do workflow alvo

Nós principais (20 total): - Webhook — POST /v2/router, recebe payload completo do Chatwoot - TIPO EVENTO — Switch por event: filtra message_created e conversation_status_changed - status conversa aberta? — IF: só processa se conversation.status == "open" - TIPO MSG — Switch: separa incoming (do cliente) de outgoing (do atendente) - INBOX — Switch por inbox.id: roteia para a cadeia de IA correta - IAS — Switch por conversation.custom_attributes.ia_responsavel_conversa - losand|chapasExpandidas|chapasPerfuradas — Switch final: ![41,59,60].includes(Number(inbox_id)) decide se vai pro losand ou pro fallback

Destinos atuais: | Inboxes | Destino | Webhook URL | |---|---|---| | 41, 59, 60 | IA losand | https://n8n-hook.bepex.com.br/webhook/${WEBHOOK_IA_LOSAND_UUID} | | Outras (fallback) | BOT 1.5 DIFY DEV | https://n8n-hook.bepex.com.br/webhook/${WEBHOOK_DIFY_LEGADO_UUID} | | 62, 63, 64 | IA Prospecção | https://n8n-hook.bepex.com.br/webhook/${WEBHOOK_IA_PROSPECCAO_UUID} |


2. IA losand (DiOL7QWomFFc9LY8)

Chatbot multi-site com 3 AI Agents distintos, handoff para atendente humano, e integração WooCommerce.

Fluxo principal (87 nodes):

BOT (Webhook) 
  → FORMAT-MAIN (formata payload, URL: chat.bepex.com.br)
    → LOG (loga no console)
      → INPUTS IA (prepara inputs)
        → INBOX PERMITIDOS (verifica inbox 41/59/60)
          → Switch (SEM ETIQUETA? + labels check)
            → ADD LABEL bot-losand
              → msg sem content? / data-create / debounce check
                → IDENTIFICAR SITE (switch por inbox_id)
                  → AI Agent Losand (inbox 41)
                  → AI Agent Chapas Expandidas (inbox 59) 
                  → AI Agent Chapas Perfuradas (inbox 60)
                    → VERIFICAR HANDOFF
                      → [se handoff] Resumir Conversa → CRIAR CONVERSA BPEX (inbox 56)
                      → [se não] Call split msg Chatwoot

Padrões de design: - Debounce: sub-workflow VahE4IePbduQNU9t previne respostas duplicadas de webhooks rápidos - Label como lock: bot adiciona label bot-losand na conversa para "reivindicá-la"; ignora conversas já etiquetadas - Split de mensagem: sub-workflow Drj76ljZtSPIXj2x fatia respostas longas em múltiplas mensagens no Chatwoot - Handoff: AI Agent pode decidir transferir para humano; nesse caso, conversa é resumida e uma nova conversa é criada na inbox 56 (BPEX) - 3 prompts distintos: cada AI Agent tem prompt específico para seu site/produto - Memória Postgres: tabela n8n_chat_histories, session key = conversation_id


3. IA Prospecção (4wLT4ni6udXSnVS9)

Versão simplificada do IA losand para atendimento de representantes em prospecção. Um único AI Agent, sem handoff.

Fluxo principal (20 nodes):

BOT (Webhook)
  → FORMAT-MAIN (formata payload, URL: chat.bepex.com.br)
    → LOG
      → INPUTS IA
        → INBOX PERMITIDOS (verifica inbox 62/63/64)
          → Switch (SEM ETIQUETA? + labels check)
            → ADD LABEL bot-prospeccao
              → msg sem content? / data-create / debounce check
                → AI Agent Prospecção (prompt comercial único)
                  → Call split msg Chatwoot

Diferenças do IA losand: - 1 AI Agent em vez de 3 (prompt comercial único para todas as inboxes) - Sem handoff (sem VERIFICAR HANDOFF, sem Resumir Conversa, sem CRIAR CONVERSA BPEX) - Sem WooCommerce tools - Sem path DIFY legado - Label: bot-prospeccao (Chatwoot ID 64, cor #6366F1) em vez de bot-losand - Memória Postgres: tabela n8n_chat_histories_prospeccao (separada) - Mesmos sub-workflows: debounce + split msg

Prompt do AI Agent: Assistente comercial da Bepex focado em prospecção de representantes. Regras: max 3 parágrafos, nunca dar % exato de comissão, sempre empurrar para agendamento via Calendly (https://calendly.com/rafael-bepex/30min). Conhecimento: 30+ anos de mercado, projetos R$50k-R$800k, modelo de representação (sem vínculo, sem exclusividade), comissão sobre RB, programa de parceria com arquitetos.

Webhook path: ${WEBHOOK_IA_PROSPECCAO_UUID} (único, corrigido em 2026-05-14)


Padrões Compartilhados

Debounce (sub-workflow VahE4IePbduQNU9t)

Previne que múltiplos webhooks rápidos do Chatwoot (ex: mensagem + status change) gerem respostas duplicadas. Usa timestamp + conversation_id para descartar eventos redundantes.

Split Msg Chatwoot (sub-workflow Drj76ljZtSPIXj2x)

Fatia respostas longas da IA em múltiplas mensagens no Chatwoot. Respeita limite de caracteres da API e adiciona delays entre mensagens para parecer digitação humana.

Label como Lock

Cada workflow de IA tem sua label exclusiva. Ao receber uma mensagem: 1. Verifica se a conversa já tem a label do bot 2. Se não tem → adiciona label e processa 3. Se já tem → pula (evita reprocessamento)

Error Workflow (GEyXmIklTx6i3QBC)

Workflow de erro compartilhado. Captura exceções e notifica (provavelmente via log ou mensagem).

Convert Types Where Required (OBRIGATÓRIO em Switch nodes)

O Chatwoot envia inbox_id como string ("62"). Switch nodes que comparam com number (62) precisam ter a opção "Convert Types Where Required" habilitada, caso contrário a comparação falha silenciosamente. Isso causou o bug do ROUTER em 2026-05-23 — mensagens das inboxes 62/63/64 não eram roteadas. Ver historico.md para detalhes.

Ativação por tag em conversas outbound

O sistema distingue quem inicia a conversa: - Inbound (contato inicia) → IA ativa automaticamente - Outbound (Bepex inicia) → precisa da tag "IA atendendo" para a IA responder

Isso é crítico para o IA Prospecção, onde 100% das conversas são outbound (Bepex envia a primeira mensagem ao prospect). Sem a tag, a IA ignora as respostas dos prospects. Ver historico.md Bug 3.