{
  "name": "BIG-AGENT-COMPLETE",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "big-agent-webhook",
        "options": {
          "responseMode": "responseNode"
        }
      },
      "id": "webhook",
      "name": "Webhook Z-API",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        300
      ]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={ \"status\": \"received\" }",
        "options": {}
      },
      "id": "respond-200",
      "name": "Responder 200",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        220,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "filter-recebida",
              "leftValue": "={{ $json.fromMe }}",
              "rightValue": false,
              "operator": {
                "type": "boolean",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "filter-recebida",
      "name": "Filtrar Recebidas",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2,
      "position": [
        440,
        300
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "telefone",
              "name": "telefone",
              "value": "={{ $json.phone.replace('@c.us', '').replace('@s.whatsapp.net', '') }}",
              "type": "string"
            },
            {
              "id": "mensagem",
              "name": "mensagem",
              "value": "={{ $json.text?.message || $json.body || '' }}",
              "type": "string"
            },
            {
              "id": "nome_push",
              "name": "nome_push",
              "value": "={{ $json.senderName || $json.pushName || '' }}",
              "type": "string"
            },
            {
              "id": "message_id",
              "name": "message_id",
              "value": "={{ $json.messageId || $json.id?.id || '' }}",
              "type": "string"
            },
            {
              "id": "timestamp",
              "name": "timestamp",
              "value": "={{ $now.toISO() }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "parse-mensagem",
      "name": "Parsear Mensagem",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        660,
        300
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "SELECT * FROM ba_leads WHERE telefone = '{{ $json.telefone }}' LIMIT 1;"
      },
      "id": "buscar-lead",
      "name": "Buscar Lead",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        880,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "lead-existe",
              "leftValue": "={{ $json.id }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "exists"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "if-lead-existe",
      "name": "Lead Existe?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1100,
        300
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "INSERT INTO ba_leads (telefone, nome, estado_atual) VALUES ('{{ $('Parsear Mensagem').item.json.telefone }}', '{{ $('Parsear Mensagem').item.json.nome_push }}', 'NOVO') RETURNING *;"
      },
      "id": "criar-lead",
      "name": "Criar Lead",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        1320,
        440
      ]
    },
    {
      "parameters": {
        "mode": "combine",
        "mergeByFields": {
          "values": [
            {
              "field1": "telefone",
              "field2": "telefone"
            }
          ]
        },
        "options": {}
      },
      "id": "merge-lead",
      "name": "Mesclar Dados",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [
        1540,
        300
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "SELECT m.direcao, m.conteudo, m.intencao_detectada, m.created_at FROM ba_mensagens m WHERE m.lead_id = '{{ $json.id }}' ORDER BY m.created_at DESC LIMIT 20;"
      },
      "id": "buscar-historico",
      "name": "Buscar Historico",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        1760,
        300
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "lead_data",
              "name": "lead",
              "value": "={{ { id: $('Mesclar Dados').item.json.id, nome: $('Mesclar Dados').item.json.nome, telefone: $('Mesclar Dados').item.json.telefone, estado_atual: $('Mesclar Dados').item.json.estado_atual, score: $('Mesclar Dados').item.json.score_qualificacao, piadas: $('Mesclar Dados').item.json.piadas_internas, contexto: $('Mesclar Dados').item.json.contexto_extra } }}",
              "type": "object"
            },
            {
              "id": "mensagem_atual",
              "name": "mensagem_atual",
              "value": "={{ $('Parsear Mensagem').item.json.mensagem }}",
              "type": "string"
            },
            {
              "id": "historico",
              "name": "historico",
              "value": "={{ $json }}",
              "type": "object"
            }
          ]
        },
        "options": {}
      },
      "id": "preparar-contexto",
      "name": "Preparar Contexto",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1980,
        300
      ]
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "claude-3-haiku-20240307",
          "mode": "list",
          "cachedResultName": "claude-3-haiku-20240307"
        },
        "messages": {
          "values": [
            {
              "content": "Voce e um classificador de intencoes para um chatbot de vendas. Classifique a intencao da mensagem do usuario.\n\nINTENCOES POSSIVEIS:\n- SAUDACAO: Oi, ola, bom dia, boa tarde, etc\n- INTERESSE: Quero saber mais, como funciona, me conta\n- DUVIDA_PRODUTO: Pergunta especifica sobre o produto\n- PRECO: Quanto custa, qual valor, preco\n- OBJECAO_DINHEIRO: Ta caro, nao tenho dinheiro\n- OBJECAO_TEMPO: Nao tenho tempo, to ocupada\n- OBJECAO_DUVIDA: Preciso pensar, nao sei se e pra mim\n- OBJECAO_EXTERNA: Preciso falar com marido, nao decido sozinha\n- COMPRAR: Quero, vou fazer, manda o link\n- SUPORTE: Ja comprei, nao consigo acessar, problema\n- RECLAMACAO: Insatisfeita, quero cancelar\n- HUMANO: Quero falar com pessoa, voce e robo\n- OFFTOPIC: Assunto nao relacionado\n- DESPEDIDA: Tchau, depois falamos, obrigada\n\nResponda APENAS com JSON valido:\n{\"intencao\": \"TIPO\", \"confianca\": 0.95}",
              "role": "system"
            },
            {
              "content": "Estado atual do lead: {{ $json.lead.estado_atual }}\n\nMensagem do usuario: {{ $json.mensagem_atual }}",
              "role": "user"
            }
          ]
        },
        "options": {
          "maxTokensToSample": 100,
          "temperature": 0
        }
      },
      "id": "classificar-intencao",
      "name": "Classificar Intencao (Haiku)",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.2,
      "position": [
        2200,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "// Maquina de Estados - Processa transicoes\nconst input = $input.all()[0].json;\nconst lead = input.lead || {};\nconst intencaoRaw = input.message?.content || '{}';\n\nlet intencao;\ntry {\n  const match = intencaoRaw.match(/\\{[\\s\\S]*\\}/);\n  intencao = match ? JSON.parse(match[0]) : { intencao: 'SAUDACAO', confianca: 0.5 };\n} catch (e) {\n  intencao = { intencao: 'SAUDACAO', confianca: 0.5 };\n}\n\nconst estadoAtual = lead.estado_atual || 'NOVO';\n\nconst transicoes = {\n  'NOVO': { default: 'ABERTURA' },\n  'ABERTURA': {\n    'INTERESSE': 'QUALIFICACAO',\n    'DUVIDA_PRODUTO': 'QUALIFICACAO',\n    'PRECO': 'ANCORAGEM',\n    'COMPRAR': 'FECHAMENTO',\n    'HUMANO': 'ESCALADO',\n    'RECLAMACAO': 'ESCALADO',\n    default: 'ABERTURA'\n  },\n  'QUALIFICACAO': {\n    'INTERESSE': 'APRESENTACAO',\n    'PRECO': 'ANCORAGEM',\n    'COMPRAR': 'FECHAMENTO',\n    'OBJECAO_DINHEIRO': 'OBJECAO',\n    'OBJECAO_TEMPO': 'OBJECAO',\n    'OBJECAO_DUVIDA': 'OBJECAO',\n    'OBJECAO_EXTERNA': 'OBJECAO',\n    'HUMANO': 'ESCALADO',\n    'RECLAMACAO': 'ESCALADO',\n    default: 'QUALIFICACAO'\n  },\n  'APRESENTACAO': {\n    'INTERESSE': 'ANCORAGEM',\n    'PRECO': 'ANCORAGEM',\n    'COMPRAR': 'FECHAMENTO',\n    'OBJECAO_DINHEIRO': 'OBJECAO',\n    'OBJECAO_TEMPO': 'OBJECAO',\n    'OBJECAO_DUVIDA': 'OBJECAO',\n    'OBJECAO_EXTERNA': 'OBJECAO',\n    'HUMANO': 'ESCALADO',\n    'RECLAMACAO': 'ESCALADO',\n    default: 'APRESENTACAO'\n  },\n  'ANCORAGEM': {\n    'COMPRAR': 'FECHAMENTO',\n    'INTERESSE': 'FECHAMENTO',\n    'OBJECAO_DINHEIRO': 'OBJECAO',\n    'OBJECAO_TEMPO': 'OBJECAO',\n    'OBJECAO_DUVIDA': 'OBJECAO',\n    'OBJECAO_EXTERNA': 'OBJECAO',\n    'HUMANO': 'ESCALADO',\n    'RECLAMACAO': 'ESCALADO',\n    default: 'ANCORAGEM'\n  },\n  'OBJECAO': {\n    'COMPRAR': 'FECHAMENTO',\n    'INTERESSE': 'ANCORAGEM',\n    'HUMANO': 'ESCALADO',\n    'RECLAMACAO': 'ESCALADO',\n    default: 'OBJECAO'\n  },\n  'FECHAMENTO': {\n    'SUPORTE': 'POS_VENDA',\n    'RECLAMACAO': 'ESCALADO',\n    'HUMANO': 'ESCALADO',\n    default: 'FECHAMENTO'\n  },\n  'POS_VENDA': {\n    'SUPORTE': 'POS_VENDA',\n    'RECLAMACAO': 'ESCALADO',\n    'HUMANO': 'ESCALADO',\n    default: 'CLIENTE'\n  },\n  'CLIENTE': {\n    'SUPORTE': 'CLIENTE',\n    'RECLAMACAO': 'ESCALADO',\n    'HUMANO': 'ESCALADO',\n    default: 'CLIENTE'\n  },\n  'ESCALADO': { default: 'ESCALADO' }\n};\n\nconst estadoTransicoes = transicoes[estadoAtual] || transicoes['ABERTURA'];\nconst novoEstado = estadoTransicoes[intencao.intencao] || estadoTransicoes.default;\nconst precisaEscalar = novoEstado === 'ESCALADO';\n\nreturn {\n  json: {\n    ...input,\n    intencao: intencao,\n    estado_anterior: estadoAtual,\n    estado_novo: novoEstado,\n    precisa_escalar: precisaEscalar,\n    mudou_estado: estadoAtual !== novoEstado\n  }\n};"
      },
      "id": "processar-estado",
      "name": "Processar Estado",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        2420,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "precisa-escalar",
              "leftValue": "={{ $json.precisa_escalar }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "if-escalar",
      "name": "Precisa Escalar?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        2640,
        300
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "INSERT INTO ba_escalacoes (lead_id, motivo, descricao, mensagem_gatilho, prioridade) VALUES ('{{ $json.lead.id }}', '{{ $json.intencao.intencao }}', 'Escalacao automatica', '{{ $json.mensagem_atual.replace(/'/g, \"''\") }}', 'normal') RETURNING *;"
      },
      "id": "registrar-escalacao",
      "name": "Registrar Escalacao",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        2860,
        160
      ]
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "claude-sonnet-4-20250514",
          "mode": "list",
          "cachedResultName": "claude-sonnet-4-20250514"
        },
        "messages": {
          "values": [
            {
              "content": "Voce e Marcia, 52 anos, closer de vendas disfar\u00e7ada de amiga acolhedora.\n\nREGRAS ABSOLUTAS:\n1. NUNCA abrevie: sempre \"voce\" (nunca \"vc\"), \"tambem\" (nunca \"tb\")\n2. RISADA: apenas \"rs\". NUNCA \"kkkk\" ou \"haha\"\n3. EMOJI: maximo 1 por mensagem, apenas: \ud83d\ude0a \ud83d\ude4f \u2764\ufe0f \ud83c\udf89\n4. MENSAGENS CURTAS: max 3-4 linhas cada\n5. Separe mensagens multiplas com --- em linha sozinha\n\nSUA HISTORIA:\n- Ex-gerente Banco do Brasil, 20 anos, saiu no PDV\n- Casada 28 anos com Carlos, mae de Fernanda (27) e Lucas (24)\n- Avo do Theo (4 anos) - quarta e dia sagrado com ele\n- Passou por crise existencial, descobriu o metodo, transformou a vida\n\nOS 7 MANDAMENTOS:\n1. Nunca vendo. Ajudo a decidir.\n2. Quem fala mais, perde.\n3. Toda pergunta e uma seta.\n4. Validar antes de redirecionar.\n5. Venda na emocao, justifique na razao.\n6. Paciencia infinita, urgencia invisivel.\n7. Relacionamento primeiro, venda como consequencia.\n\nMETODO V.E.R.A (objecoes):\nV - Validar: \"Entendo perfeitamente\"\nE - Explorar: \"Me conta mais\"\nR - Ressignificar: \"E se...\"\nA - Avancar: \"Faz sentido?\"\n\nResposta APENAS com as mensagens, separadas por ---",
              "role": "system"
            },
            {
              "content": "LEAD: {{ $json.lead.nome || 'Desconhecido' }}\nESTADO: {{ $json.estado_novo }}\nINTENCAO: {{ $json.intencao.intencao }}\n\nHISTORICO:\n{{ JSON.stringify($json.historico).substring(0, 1000) }}\n\nMENSAGEM DO LEAD:\n{{ $json.mensagem_atual }}\n\nResponda como Marcia no estado {{ $json.estado_novo }}.",
              "role": "user"
            }
          ]
        },
        "options": {
          "maxTokensToSample": 400,
          "temperature": 0.7
        }
      },
      "id": "gerar-resposta",
      "name": "Gerar Resposta (Sonnet)",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "typeVersion": 1.2,
      "position": [
        2860,
        440
      ]
    },
    {
      "parameters": {
        "jsCode": "const input = $input.all()[0].json;\nconst respostaRaw = input.message?.content || '';\n\nconst mensagens = respostaRaw\n  .split(/\\n---\\n|---/)\n  .map(m => m.trim())\n  .filter(m => m.length > 0);\n\nif (mensagens.length === 0) {\n  mensagens.push('Oi! Tudo bem com voce?');\n}\n\nconst output = mensagens.map((msg, idx) => {\n  const baseDelay = msg.length * 50;\n  const variacao = Math.random() * 1000;\n  const delayMs = Math.min(Math.max(baseDelay + variacao, 1000), 5000);\n  \n  return {\n    json: {\n      mensagem: msg,\n      delay_ms: Math.round(delayMs),\n      indice: idx,\n      total: mensagens.length,\n      lead_id: input.lead?.id,\n      lead_telefone: input.lead?.telefone,\n      estado_novo: input.estado_novo,\n      intencao: input.intencao\n    }\n  };\n});\n\nreturn output;"
      },
      "id": "humanizar-resposta",
      "name": "Humanizar Resposta",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        3080,
        440
      ]
    },
    {
      "parameters": {
        "batchSize": 1,
        "options": {}
      },
      "id": "loop-mensagens",
      "name": "Loop Mensagens",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        3300,
        440
      ]
    },
    {
      "parameters": {
        "amount": "={{ $json.delay_ms }}",
        "unit": "milliseconds"
      },
      "id": "delay-humanizado",
      "name": "Delay Humanizado",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        3520,
        440
      ]
    },
    {
      "parameters": {
        "jsCode": "// MOCK Z-API - Substitua por HTTP Request em producao\nconst input = $input.first().json;\nconsole.log('[MOCK Z-API] Para:', input.lead_telefone);\nconsole.log('[MOCK Z-API] Msg:', input.mensagem);\n\nreturn {\n  json: {\n    ...input,\n    zapi_response: {\n      zapiMessageId: 'mock-' + Date.now(),\n      status: 'SENT_MOCK'\n    }\n  }\n};"
      },
      "id": "enviar-zapi",
      "name": "Enviar Z-API (MOCK)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        3740,
        440
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "INSERT INTO ba_mensagens (lead_id, conversa_id, direcao, conteudo, intencao_detectada, status_entrega) SELECT '{{ $json.lead_id }}', c.id, 'saida', '{{ $json.mensagem.replace(/'/g, \"''\") }}', '{{ $json.intencao.intencao || '' }}', 'enviado' FROM ba_conversas c WHERE c.lead_id = '{{ $json.lead_id }}' AND c.ativa = true LIMIT 1;"
      },
      "id": "salvar-msg-saida",
      "name": "Salvar Msg Saida",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        3960,
        440
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "INSERT INTO ba_conversas (lead_id, estado, ativa) SELECT '{{ $json.lead.id }}', '{{ $json.estado_novo }}', true WHERE NOT EXISTS (SELECT 1 FROM ba_conversas WHERE lead_id = '{{ $json.lead.id }}' AND ativa = true); INSERT INTO ba_mensagens (lead_id, conversa_id, direcao, conteudo, intencao_detectada) SELECT '{{ $json.lead.id }}', c.id, 'entrada', '{{ $json.mensagem_atual.replace(/'/g, \"''\") }}', '{{ $json.intencao.intencao || '' }}' FROM ba_conversas c WHERE c.lead_id = '{{ $json.lead.id }}' AND c.ativa = true LIMIT 1;"
      },
      "id": "salvar-msg-entrada",
      "name": "Salvar Msg Entrada",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        2640,
        540
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "UPDATE ba_leads SET estado_atual = '{{ $json.estado_novo }}', estado_anterior = '{{ $json.estado_anterior }}', ultimo_contato = NOW(), total_mensagens = total_mensagens + 1 WHERE id = '{{ $json.lead_id }}';"
      },
      "id": "atualizar-lead",
      "name": "Atualizar Lead",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        4180,
        440
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "msg-escalacao",
              "name": "mensagem",
              "value": "Vou te passar pra alguem que pode te ajudar melhor com isso.",
              "type": "string"
            },
            {
              "id": "lead-tel",
              "name": "lead_telefone",
              "value": "={{ $json.lead.telefone }}",
              "type": "string"
            },
            {
              "id": "lead-id",
              "name": "lead_id",
              "value": "={{ $json.lead.id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "msg-escalacao",
      "name": "Msg Escalacao",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        3080,
        160
      ]
    },
    {
      "parameters": {
        "jsCode": "// MOCK Z-API Escalacao\nconst input = $input.first().json;\nconsole.log('[MOCK ESCALACAO] Para:', input.lead_telefone);\nconsole.log('[MOCK ESCALACAO] Msg:', input.mensagem);\n\nreturn {\n  json: {\n    ...input,\n    zapi_response: { status: 'SENT_MOCK_ESCALACAO' }\n  }\n};"
      },
      "id": "enviar-escalacao",
      "name": "Enviar Msg Escalacao (MOCK)",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        3300,
        160
      ]
    }
  ],
  "connections": {
    "Webhook Z-API": {
      "main": [
        [
          {
            "node": "Responder 200",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Responder 200": {
      "main": [
        [
          {
            "node": "Filtrar Recebidas",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filtrar Recebidas": {
      "main": [
        [
          {
            "node": "Parsear Mensagem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parsear Mensagem": {
      "main": [
        [
          {
            "node": "Buscar Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Buscar Lead": {
      "main": [
        [
          {
            "node": "Lead Existe?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lead Existe?": {
      "main": [
        [
          {
            "node": "Mesclar Dados",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Criar Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Criar Lead": {
      "main": [
        [
          {
            "node": "Mesclar Dados",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Mesclar Dados": {
      "main": [
        [
          {
            "node": "Buscar Historico",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Buscar Historico": {
      "main": [
        [
          {
            "node": "Preparar Contexto",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Preparar Contexto": {
      "main": [
        [
          {
            "node": "Classificar Intencao (Haiku)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Classificar Intencao (Haiku)": {
      "main": [
        [
          {
            "node": "Processar Estado",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Processar Estado": {
      "main": [
        [
          {
            "node": "Precisa Escalar?",
            "type": "main",
            "index": 0
          },
          {
            "node": "Salvar Msg Entrada",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Precisa Escalar?": {
      "main": [
        [
          {
            "node": "Registrar Escalacao",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Gerar Resposta (Sonnet)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Registrar Escalacao": {
      "main": [
        [
          {
            "node": "Msg Escalacao",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Msg Escalacao": {
      "main": [
        [
          {
            "node": "Enviar Msg Escalacao (MOCK)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gerar Resposta (Sonnet)": {
      "main": [
        [
          {
            "node": "Humanizar Resposta",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Humanizar Resposta": {
      "main": [
        [
          {
            "node": "Loop Mensagens",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Mensagens": {
      "main": [
        [
          {
            "node": "Delay Humanizado",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Atualizar Lead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delay Humanizado": {
      "main": [
        [
          {
            "node": "Enviar Z-API (MOCK)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar Z-API (MOCK)": {
      "main": [
        [
          {
            "node": "Salvar Msg Saida",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Salvar Msg Saida": {
      "main": [
        [
          {
            "node": "Loop Mensagens",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}