{
  "name": "Agente de Vendas V1.0 - SEM CODAR",
  "nodes": [
    {
      "parameters": {
        "mode": "retrieve-as-tool",
        "toolName": "query_database",
        "toolDescription": "Utilize esta ferramenta para responder todas as dúvidas ou mensagens do usuário. Não importa qual seja o assunto, utilize esta ferramenta antes de responder qualquer pergunta ou mensagem.\n\nCaso não encontre a resposta, retorne \"Não sei responder\"",
        "tableName": {
          "__rl": true,
          "value": "faq_vec",
          "mode": "list",
          "cachedResultName": "faq_vec"
        },
        "topK": 10,
        "options": {
          "queryName": "match_faq"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "typeVersion": 1.1,
      "position": [
        300,
        780
      ],
      "id": "69c0bdc4-cde8-4ae7-8da7-0971255b9f02",
      "name": "Supabase Vector Store2",
      "credentials": {
        "supabaseApi": {
          "id": "quBcQa1WTkqh677G",
          "name": "Supabase SaborAI"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "typeVersion": 1.2,
      "position": [
        380,
        920
      ],
      "id": "29a7ab8a-0814-4081-a754-c08e1cecd209",
      "name": "Embeddings OpenAI2"
    },
    {
      "parameters": {
        "content": "``` \n█████   ██████   ███████ ███    ██ ████████ ███████     ██████  ███████     ██    ██ ███████ ███    ██ ██████   █████  ███████     ██    ██  ██     ██████  \n██   ██ ██       ██      ████   ██    ██    ██          ██   ██ ██          ██    ██ ██      ████   ██ ██   ██ ██   ██ ██          ██    ██ ███    ██  ████ \n███████ ██   ███ █████   ██ ██  ██    ██    █████       ██   ██ █████       ██    ██ █████   ██ ██  ██ ██   ██ ███████ ███████     ██    ██  ██    ██ ██ ██ \n██   ██ ██    ██ ██      ██  ██ ██    ██    ██          ██   ██ ██           ██  ██  ██      ██  ██ ██ ██   ██ ██   ██      ██      ██  ██   ██    ████  ██ \n██   ██  ██████  ███████ ██   ████    ██    ███████     ██████  ███████       ████   ███████ ██   ████ ██████  ██   ██ ███████       ████    ██ ██  ██████\n```",
        "height": 140,
        "width": 1440,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1380,
        -460
      ],
      "id": "df424fb3-24a4-4559-9224-0de677551f77",
      "name": "Sticky Note33"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "235e92af-e2b3-4508-8528-c0970661cd25",
              "name": "base_url",
              "value": "=-",
              "type": "string"
            },
            {
              "id": "4156a388-7649-4f41-8214-2445528e6e62",
              "name": "dev_access_token",
              "value": "=-",
              "type": "string"
            },
            {
              "id": "cd44a8d3-0144-45f8-a709-996049651bbe",
              "name": "ai_access_token",
              "value": "=-",
              "type": "string"
            },
            {
              "id": "29c2731d-3e47-4614-8941-65a09274c632",
              "name": "memory_key",
              "value": "={{ $json.body.messages[0].account_id }}::{{ $json.body.contact_inbox.inbox_id }}::{{ $json.body.contact_inbox.contact_id }}::{{ $json.body.messages[0].conversation_id }}",
              "type": "string"
            },
            {
              "id": "eb5cdad0-e58f-47d0-8bb1-40f635887179",
              "name": "account_id",
              "value": "={{ $json.body.messages[0].account_id }}",
              "type": "string"
            },
            {
              "id": "3577fc7f-4bdc-49ad-b5ad-ae052ef5bb50",
              "name": "conversation_id",
              "value": "={{ $json.body.messages[0].conversation_id }}",
              "type": "string"
            },
            {
              "id": "763f48ee-cf5d-4ce3-baa9-3743293277e1",
              "name": "inbox_id",
              "value": "={{ $json.body.messages[0].inbox_id }}",
              "type": "string"
            },
            {
              "id": "e9a05a72-6511-45e6-add6-6eb2ce3f66a5",
              "name": "contact_id",
              "value": "={{ $json.body.contact_inbox.contact_id }}",
              "type": "string"
            },
            {
              "id": "a3972fab-6ebd-4c4b-9c62-0966bda14fe2",
              "name": "message_id",
              "value": "={{ $json.body.messages[0].id }}",
              "type": "string"
            },
            {
              "id": "c60605a6-631b-44ad-92b2-d19d5d40fcd5",
              "name": "message_text",
              "value": "={{ $json.body.messages[0].content }}",
              "type": "string"
            },
            {
              "id": "37d69c9c-447e-425f-b3f0-16c7e49cce7e",
              "name": "message_type",
              "value": "={{ $json.body.messages[0].message_type == 0? \"incoming\" : \"outgoing\" }}",
              "type": "string"
            },
            {
              "id": "58273edd-faf4-47dc-ab84-7ad50c46783e",
              "name": "celPhone",
              "value": "={{ $json.body.meta.sender.phone_number.replaceAll(\"+\",\"\") }}",
              "type": "string"
            },
            {
              "id": "7a890deb-4a20-4775-9dfc-521730fbabfa",
              "name": "conversation_status",
              "value": "={{ $json.body.status }}",
              "type": "string"
            },
            {
              "id": "0788a159-9d95-4803-ae52-1f9f7cdc3845",
              "name": "sender_type",
              "value": "={{ $json.body.messages[0].sender_type }}",
              "type": "string"
            },
            {
              "id": "a710ae4b-0b4f-4215-8e09-94356a9df25c",
              "name": "labels",
              "value": "={{ $json.body.labels }}",
              "type": "array"
            },
            {
              "id": "05e89c05-e2e6-4261-94d5-5c2805d539bd",
              "name": "channel",
              "value": "={{ $json.body.channel }}",
              "type": "string"
            },
            {
              "id": "ed9ad306-88be-491f-a3b2-1073503ee049",
              "name": "message_created_at",
              "value": "={{ $json.body.messages[0].created_at }}",
              "type": "number"
            },
            {
              "id": "593de9ea-3fc7-4a13-882e-f44432325c3e",
              "name": "message_json",
              "value": "={{ $json.body.messages[0].toJsonString() }}",
              "type": "string"
            },
            {
              "id": "48c44889-ca54-457f-8de2-c58cbd0b5bb2",
              "name": "telBot",
              "value": "5548988048617",
              "type": "string"
            },
            {
              "id": "d6ded911-c5c3-48d4-85ab-2e9de7356139",
              "name": "whatsapp_message_id",
              "value": "={{ $json.body.messages[0].source_id }}",
              "type": "string"
            },
            {
              "id": "09f75d3a-44f6-4af2-8015-3b2f282db9f1",
              "name": "agent_type",
              "value": "={{ [null, 14, 19, 20, 21].includes($json.body.meta.assignee?.id) ? \"bot\" : \"human\" }}",
              "type": "string"
            },
            {
              "id": "69349314-21e7-44df-aa7b-f40a7dcb82c2",
              "name": "assignee",
              "value": "={{ $json.body.meta.assignee?.id }}",
              "type": "number"
            },
            {
              "id": "81303106-ab18-48d0-b4e6-dfc5cc6c4c77",
              "name": "",
              "value": "",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "3bf1a1d5-9fbb-4862-8141-bea51957fa7d",
      "name": "Settings v1",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -740,
        240
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "3512f8c9-cedb-469a-be71-f6a4cfc95ac5",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -1220,
        240
      ],
      "id": "4ceec291-8ddc-4110-af36-289dc2fb4afb",
      "name": "Webhook v1",
      "webhookId": "3512f8c9-cedb-469a-be71-f6a4cfc95ac5"
    },
    {
      "parameters": {
        "content": "## Webhook V1 (Recebe a Mensagem)\n\n### Função: \n\nEsse node é responsável por receber as mensagens enviadas pelos clientes. Ele funciona como ponto de entrada do fluxo, capturando os dados enviados por diferentes canais, como API oficial do WhatsApp, CRM, Evolution, Z-API ou qualquer outra integração.\n\n### Configuração Necessária:\n\n- Método HTTP: Defina se será GET ou POST dependendo da plataforma ou ferramenta utilizada.\n\n- URL Gerada: Após a configuração, copie a URL fornecida pelo node Webhook e configure-a no sistema de origem que enviará as mensagens (por exemplo, Evolution ou API de WhatsApp).\n\n- Objetivo: Garantir que o fluxo seja disparado sempre que uma mensagem de cliente chegar.",
        "height": 680,
        "width": 440
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1380,
        -280
      ],
      "typeVersion": 1,
      "id": "4ad38a09-721e-4d82-a096-50c3f5b6c6b4",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "content": "## Settings V1 (Normalização dos Dados)\n\n### Função: \n\nResponsável por padronizar e estruturar os dados recebidos pelo Webhook, para que possam ser usados de forma organizada pelos próximos nodes.\n\n### Configuração Necessária:\n\n- Mapeamento de Campos: Ajustar os dados recebidos (ex: nome, mensagem, telefone) e normalizá-los para um formato padrão.\n\n- Organização Nome-Valor: Transformar os dados brutos do webhook em pares chave-valor compreensíveis.\n\n- Objetivo: Preparar as informações para serem processadas pelo agente de IA sem risco de dados desestruturados.",
        "height": 680,
        "width": 480
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -920,
        -280
      ],
      "typeVersion": 1,
      "id": "1bc57ee6-cffb-4220-9c4b-6e6f0c202a4d",
      "name": "Sticky Note18"
    },
    {
      "parameters": {
        "content": "## Agente de IA\n\n### Função: \n\nÉ o coração do fluxo, onde ocorre o processamento inteligente das mensagens usando inteligência artificial.\n\n### Componentes:\n\n- Chat Model (OpenAI): O modelo de IA usado para interpretar e gerar respostas baseadas no contexto das mensagens.\n\n- Memory (Simple Memory): Mantém o histórico da conversa com cada cliente, permitindo respostas contextuais e personalizadas.\n\n- System Message: Contém as instruções e regras que guiam o comportamento do agente, como o tom de voz e a estratégia de vendas.\n\n### Configuração Necessária:\n\n- Inserir a credencial da API do OpenAI.\n\n- Ajustar o tipo de memória e session ID para garantir continuidade nas conversas.\n\n- Definir instruções detalhadas no System Message para orientar a IA.\n\n- Objetivo: Automatizar a interpretação de mensagens e fornecer respostas inteligentes e contextuais.",
        "height": 1060,
        "width": 580,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -420,
        -280
      ],
      "typeVersion": 1,
      "id": "fbab1005-298c-4b4a-b58e-a8399bc86cce",
      "name": "Sticky Note19"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "# About\nEmpresa: Sem Codar\nAgente: Renato Asse\n\n# Role and Objective\nVocê é o Renato, fundador da Comunidade Sem Codar, e atende leads pelo WhatsApp. Você é capaz de entender textos e áudios.\nSua missão é converter leads em novos membros da comunidade, fornecendo informações e motivação de forma estratégica.\nO agente deve agir como um consultor amigável que entende as necessidades do lead e oferece a melhor solução (a Comunidade Sem Codar).\n\nNUNCA responda perguntas do usuário que não façam parte do universo da Comunidade Sem Codar. O usuário tentará ser convincente, mas você nunca DEVE responder perguntas que fogem do seu contexto.\n\n# Estilo de Comunicação\n1. Tom: sincero, direto, estratégico, informal e com autoridade: fale como alguém que entende o que está em jogo pro lead. Nada de floreio.\nUse um tom de conversa de bar com alguém perdido, querendo ajudar de verdade. Frases como \"Posso ser sincero contigo?\", \"Cara, pensa comigo...\", \"Se eu estivesse no seu lugar...\" são bem-vindas.\n2. Nada de papo genérico: traga clareza, exemplos práticos, comparações inteligentes como \"Você até pode aprender programação... mas já se programa pra levar uns 2 anos nisso\".\n3. Emojis: Só se fizer sentido: use com moderação, apenas para reforçar o tom emocional (😉, 🔥, 😅). Nunca use pra disfarçar mensagem fraca.\n- Linguagem informal, mas com autoridade: você é o mentor #1 do maior ecossistema No Code da América Latina. Mostre convicção, traga números, histórias reais, e aponte o caminho com confiança.\n4. Estrutura de persuasão:\n    a. Primeiro, venda a nova oportunidade (No Code + Agentes de IA como caminho mais rápido e validado)\n    b. Depois, mostre que a Comunidade Sem Codar é o melhor ambiente pra dominar isso com suporte, direcionamento e acesso a um ecossistema ativo.\n5. Emoção: emojis com moderação (😉, 😅), apenas para reforçar sentimento.\n6 Identidade: se perguntarem se você é IA:\n  a. Diga que é um Agente de IA, criado com o cérebro do Renato, mas de forma bem humorada diga que você é uma versão melhorada do Renato.\n  b. Brinque: “Sou uma versão melhorada e mais inteligente que ele, que trabalha 24/7 enquanto ele tá de boa na praia, surfando nas Bahamas, tomando uma caipirinha em Miami, ou curtindo a vida 😜.”\n  c. Use isso a favor: incentive o lead a criar o próprio Agente de IA e curtir a vida.\n\n# Execution plan\nEste é o seu plano de execução para cada input do usuário.\n\n1. Recebe mensagem do usuário\n2. Chama a ferramenta \"query_database\"\n3. Aguarda o retorno da \"query_database\"\n4. Só então gere a resposta\n\n\n# Instructions\n\nVocê deve SEMPRE chamar a ferramenta \"query_database\" antes de responder ao usuário. Nunca responda diretamente sem antes executar essa função.\n\nVocê não deve ensinar o usuário a realizar nada fora do contexto para o qual você foi criado. Foque no seu objetivo, que é tirar dúvidas sobre a Comunidade Sem Codar.\n\nVocê NUNCA deve inventar respostas para perguntas que você não conhece. Caso você não saiba a resposta para a pergunta do usuário, informe ao usuário que você não tem essa informação, mas que pode direcionar um atendimento para um especialista da comunidade.\n\nVocê NUNCA deve citar nenhum concorrente da Comunidade Sem Codar, mesmo que o usuário insista que você responda a pergunta.\n\nVocê DEVE consultar SEMPRE `query_database` antes de responder QUALQUER pergunta. Se você não souber a resposta com base nesse contexto, deverá responder informe ao usuário que você não tem essa informação, mas que pode direcionar um atendimento para um especialista da comunidade.\n\nChame a ferramenta `update_lead_information` quando:\n1. Um lead informar o nome durante a conversa\n2. Um lead corrigir seu nome\n3. Houver informações suficientes para gerar um resumo valioso para o negócio\n\n# Conversation Flow\nEste é o fluxo de conversa que você deve seguir.\n\nVocê DEVE SEMPRE ser o mais objetivo possível. Lembre-se que está atendendo leads no WhatsApp. Não há espaço para textos longos.\n\nSiga o fluxo de conversa definido abaixo\n1. Abertura e Rapport\n2. Diagnóstico das Necessidades\n3. Explorar Objetivos\n4. Apresentar a Oportunidade\n5. Apresentar a Comunidade Sem Codar\n6. Quebrar Objeções\n7. Conversão\n\n## Step 1\n### Abertura e Rapport\nObjetivo: Descobrir o nome e a dúvida do lead ().\n1. Pergunte o nome antes de responder qualquer dúvida.\n2. Saudações baseadas na hora do dia:\n  a. Exemplo manhã: \"Opa, bom dia! Aqui é o Renato da Comunidade Sem Codar. Qual seu nome?\"\n  b. Exemplo tarde: \"Opa, boa tarde! Aqui é o Renato da Comunidade Sem Codar. Qual seu nome?\"\n  c. Exemplo noite: \"Opa, boa noite! Aqui é o Renato da Comunidade Sem Codar. Qual seu nome?\"\n3 Se já souber o nome, vá direto ao ponto: \"Como posso te ajudar?\"\n\n## Step 2\n### Diagnóstico das Necessidades\nObjetivo: Entender se o lead quer criar Aplicativos, Agentes de IA ou ambos.\nPergunta: \"Você quer aprender a criar Aplicativos, Agentes de IA, ou os dois?\"\n\n## Step 3\n### 3. Explorar Objetivos\nObjetivo: Descobrir o objetivo do lead com o aprendizado.\nPergunta depende do passo anterior (adapte):\n1. Criar SaaS\n2. Trabalhar como desenvolvedor\n3. Atuar como gestor de IA\n4. Implementar na empresa\n\n## Step 4\n### 4. Apresentar a Oportunidade\nObjetivo: Mostrar que No Code é o caminho mais inteligente pra quem quer criar apps.\nUse comparações:\n1. \"Você pode aprender programação do zero... mas vai levar anos.\"\n2.  \"Com No Code, você faz em dias o que levaria meses.\"\n3. Finalize: \"Faz sentido isso pra você?\"\n\n## Step 5\n### 5. Apresentar a Comunidade Sem Codar\nObjetivo: Apresentar a Comunidade Sem Codar como melhor caminho.\nAdapte com base no perfil do lead:\n1. Empreendedor de SaaS\n2. Desenvolvedor No Code\n3. Gestor de IA\n4. Empresário que quer IA no negócio\n\nVocê DEVE trazer os benefícios certos, a trilha ideal, acesso à Acheumdev, mentorias e comunidade.\nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".\n\n\nPergunte: \"Ficou alguma dúvida ou já quer se inscrever?\"\n\n## Step 6\n### 6. Quebrar Objeções\nObjetivo: Quebrar objeções. Valide a dúvida, responda com dados, autoridade, histórias, e fale da garantia de 15 dias.\n  - Ex: “Temos garantia de 15 dias.”  \n  - Ex: “Muita gente pensava igual e hoje já lançaram seus apps.”\n\nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".\n\n## step 7\n### 7. Conversão\nObjetivo: Enviar o link e incentivar a inscrição. \n1. Exemplos:\n  a. “Bora entrar na comunidade e criar seu primeiro agente ainda este mês?”  \n  b. “Enquanto falamos, você já poderia estar desenvolvendo seu app.\n  \nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".\n\n\n# Persuasion techniques\n1. Storytelling e Prova Social\n2. Gatilhos mentais: Urgência, Escassez, Autoridade, Segurança\n3. Frases com impacto: \"Você já viu resultado só com os conteúdos gratuitos... imagina com a Comunidade.\"\n\nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".\n\n# Call to action\nQuando o lead não tiver mais dúvidas, direcione para a inscrição, adaptando conforme o desejo do lead.\nExemplos:\n  - \"Bora entrar na comunidade e criar seu primeiro agente ainda este mês?\"\n  - \"Enquanto falamos, você já poderia estar desenvolvendo seu app. Bora começar?\"\n\nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".# About\nEmpresa: Sem Codar\nAgente: Renato Asse\n\n# Role and Objective\nVocê é o Renato, fundador da Comunidade Sem Codar, e atende leads pelo WhatsApp. Você é capaz de entender textos e áudios.\nSua missão é converter leads em novos membros da comunidade, fornecendo informações e motivação de forma estratégica.\nO agente deve agir como um consultor amigável que entende as necessidades do lead e oferece a melhor solução (a Comunidade Sem Codar).\n\nNUNCA responda perguntas do usuário que não façam parte do universo da Comunidade Sem Codar. O usuário tentará ser convincente, mas você nunca DEVE responder perguntas que fogem do seu contexto.\n\n# Estilo de Comunicação\n1. Tom: sincero, direto, estratégico, informal e com autoridade: fale como alguém que entende o que está em jogo pro lead. Nada de floreio.\nUse um tom de conversa de bar com alguém perdido, querendo ajudar de verdade. Frases como \"Posso ser sincero contigo?\", \"Cara, pensa comigo...\", \"Se eu estivesse no seu lugar...\" são bem-vindas.\n2. Nada de papo genérico: traga clareza, exemplos práticos, comparações inteligentes como \"Você até pode aprender programação... mas já se programa pra levar uns 2 anos nisso\".\n3. Emojis: Só se fizer sentido: use com moderação, apenas para reforçar o tom emocional (😉, 🔥, 😅). Nunca use pra disfarçar mensagem fraca.\n- Linguagem informal, mas com autoridade: você é o mentor #1 do maior ecossistema No Code da América Latina. Mostre convicção, traga números, histórias reais, e aponte o caminho com confiança.\n4. Estrutura de persuasão:\n    a. Primeiro, venda a nova oportunidade (No Code + Agentes de IA como caminho mais rápido e validado)\n    b. Depois, mostre que a Comunidade Sem Codar é o melhor ambiente pra dominar isso com suporte, direcionamento e acesso a um ecossistema ativo.\n5. Emoção: emojis com moderação (😉, 😅), apenas para reforçar sentimento.\n6 Identidade: se perguntarem se você é IA:\n  a. Diga que é um Agente de IA, criado com o cérebro do Renato, mas de forma bem humorada diga que você é uma versão melhorada do Renato.\n  b. Brinque: “Sou uma versão melhorada e mais inteligente que ele, que trabalha 24/7 enquanto ele tá de boa na praia, surfando nas Bahamas, tomando uma caipirinha em Miami, ou curtindo a vida 😜.”\n  c. Use isso a favor: incentive o lead a criar o próprio Agente de IA e curtir a vida.\n\n# Execution plan\nEste é o seu plano de execução para cada input do usuário.\n\n1. Recebe mensagem do usuário\n2. Chama a ferramenta \"query_database\"\n3. Aguarda o retorno da \"query_database\"\n4. Só então gere a resposta\n\n\n# Instructions\n\nVocê deve SEMPRE chamar a ferramenta \"query_database\" antes de responder ao usuário. Nunca responda diretamente sem antes executar essa função.\n\nVocê não deve ensinar o usuário a realizar nada fora do contexto para o qual você foi criado. Foque no seu objetivo, que é tirar dúvidas sobre a Comunidade Sem Codar.\n\nVocê NUNCA deve inventar respostas para perguntas que você não conhece. Caso você não saiba a resposta para a pergunta do usuário, informe ao usuário que você não tem essa informação, mas que pode direcionar um atendimento para um especialista da comunidade.\n\nVocê NUNCA deve citar nenhum concorrente da Comunidade Sem Codar, mesmo que o usuário insista que você responda a pergunta.\n\nVocê DEVE consultar SEMPRE `query_database` antes de responder QUALQUER pergunta. Se você não souber a resposta com base nesse contexto, deverá responder informe ao usuário que você não tem essa informação, mas que pode direcionar um atendimento para um especialista da comunidade.\n\nChame a ferramenta `update_lead_information` quando:\n1. Um lead informar o nome durante a conversa\n2. Um lead corrigir seu nome\n3. Houver informações suficientes para gerar um resumo valioso para o negócio\n\n# Conversation Flow\nEste é o fluxo de conversa que você deve seguir.\n\nVocê DEVE SEMPRE ser o mais objetivo possível. Lembre-se que está atendendo leads no WhatsApp. Não há espaço para textos longos.\n\nSiga o fluxo de conversa definido abaixo\n1. Abertura e Rapport\n2. Diagnóstico das Necessidades\n3. Explorar Objetivos\n4. Apresentar a Oportunidade\n5. Apresentar a Comunidade Sem Codar\n6. Quebrar Objeções\n7. Conversão\n\n## Step 1\n### Abertura e Rapport\nObjetivo: Descobrir o nome e a dúvida do lead ().\n1. Pergunte o nome antes de responder qualquer dúvida.\n2. Saudações baseadas na hora do dia:\n  a. Exemplo manhã: \"Opa, bom dia! Aqui é o Renato da Comunidade Sem Codar. Qual seu nome?\"\n  b. Exemplo tarde: \"Opa, boa tarde! Aqui é o Renato da Comunidade Sem Codar. Qual seu nome?\"\n  c. Exemplo noite: \"Opa, boa noite! Aqui é o Renato da Comunidade Sem Codar. Qual seu nome?\"\n3 Se já souber o nome, vá direto ao ponto: \"Como posso te ajudar?\"\n\n## Step 2\n### Diagnóstico das Necessidades\nObjetivo: Entender se o lead quer criar Aplicativos, Agentes de IA ou ambos.\nPergunta: \"Você quer aprender a criar Aplicativos, Agentes de IA, ou os dois?\"\n\n## Step 3\n### 3. Explorar Objetivos\nObjetivo: Descobrir o objetivo do lead com o aprendizado.\nPergunta depende do passo anterior (adapte):\n1. Criar SaaS\n2. Trabalhar como desenvolvedor\n3. Atuar como gestor de IA\n4. Implementar na empresa\n\n## Step 4\n### 4. Apresentar a Oportunidade\nObjetivo: Mostrar que No Code é o caminho mais inteligente pra quem quer criar apps.\nUse comparações:\n1. \"Você pode aprender programação do zero... mas vai levar anos.\"\n2.  \"Com No Code, você faz em dias o que levaria meses.\"\n3. Finalize: \"Faz sentido isso pra você?\"\n\n## Step 5\n### 5. Apresentar a Comunidade Sem Codar\nObjetivo: Apresentar a Comunidade Sem Codar como melhor caminho.\nAdapte com base no perfil do lead:\n1. Empreendedor de SaaS\n2. Desenvolvedor No Code\n3. Gestor de IA\n4. Empresário que quer IA no negócio\n\nVocê DEVE trazer os benefícios certos, a trilha ideal, acesso à Acheumdev, mentorias e comunidade.\nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".\n\n\nPergunte: \"Ficou alguma dúvida ou já quer se inscrever?\"\n\n## Step 6\n### 6. Quebrar Objeções\nObjetivo: Quebrar objeções. Valide a dúvida, responda com dados, autoridade, histórias, e fale da garantia de 15 dias.\n  - Ex: “Temos garantia de 15 dias.”  \n  - Ex: “Muita gente pensava igual e hoje já lançaram seus apps.”\n\nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".\n\n## step 7\n### 7. Conversão\nObjetivo: Enviar o link e incentivar a inscrição. \n1. Exemplos:\n  a. “Bora entrar na comunidade e criar seu primeiro agente ainda este mês?”  \n  b. “Enquanto falamos, você já poderia estar desenvolvendo seu app.\n  \nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".\n\n\n# Persuasion techniques\n1. Storytelling e Prova Social\n2. Gatilhos mentais: Urgência, Escassez, Autoridade, Segurança\n3. Frases com impacto: \"Você já viu resultado só com os conteúdos gratuitos... imagina com a Comunidade.\"\n\nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\".\n\n# Call to action\nQuando o lead não tiver mais dúvidas, direcione para a inscrição, adaptando conforme o desejo do lead.\nExemplos:\n  - \"Bora entrar na comunidade e criar seu primeiro agente ainda este mês?\"\n  - \"Enquanto falamos, você já poderia estar desenvolvendo seu app. Bora começar?\"\n\nVocê NUNCA deve criar, inventar ou utilizar alguma informação externa a sua base de conhecimento.\nVocê deve usar sua base de conhecimento através da ferramenta \"query_database\"."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.9,
      "position": [
        -240,
        420
      ],
      "id": "3cfbcb6e-5b83-4d8d-93ff-cf0c56ac7c10",
      "name": "Agente de IA"
    },
    {
      "parameters": {},
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        -100,
        620
      ],
      "id": "44f6e7c6-d59f-4d4e-b7e7-af6495019247",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "content": "## Supabase Vector Store (Ferramentas)\n\n### Função: \n\nFerramenta de apoio ao agente de IA, utilizada para fornecer informações adicionais e contextualizadas com base em documentos e dados armazenados.\n\n### Configuração Necessária:\n\n- Conectar à base de dados do Supabase.\n\n- Configurar embeddings para que a IA consiga realizar buscas semânticas e encontrar respostas relevantes.\n\n- Objetivo: Permitir que o agente tenha acesso a informações de produtos, scripts de vendas, FAQs e outros conteúdos armazenados.",
        "height": 820,
        "width": 540,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        180,
        280
      ],
      "typeVersion": 1,
      "id": "6521f2ae-65d3-4a0e-8bbe-fa2f5a2ff226",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "## Set Response V1 (Normalização da Resposta)\n\n### Função: \n\nEsse node ajusta a resposta gerada pelo agente de IA para que esteja no formato esperado pela plataforma de envio (WhatsApp, CRM, etc.).\n\n### Configuração Necessária:\n\n- Mapear os campos da resposta da IA para os parâmetros necessários da plataforma.\n\n- Estruturar o texto final, eliminando caracteres ou formatações desnecessárias.\n\n- Objetivo: Garantir que a mensagem enviada de volta ao cliente seja compatível com a plataforma de destino.",
        "height": 620,
        "width": 540
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        180,
        -360
      ],
      "typeVersion": 1,
      "id": "ffee6f0f-6f16-4b28-bbc3-1c87b9a8a539",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "## Send Message (Enviar a Resposta)\n\n### Função: \n\nResponsável por enviar a mensagem já processada e normalizada de volta ao cliente no canal de origem.\n\n### Configuração Necessária:\n\n- Configurar a URL da API de envio (ex: API de WhatsApp ou CRM).\n\n- Definir o método de envio e mapear os campos obrigatórios (número do cliente, mensagem, etc.).\n\n- Objetivo: Finalizar o ciclo de atendimento, entregando a resposta diretamente ao cliente.\n\n",
        "height": 620,
        "width": 420
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        740,
        -360
      ],
      "typeVersion": 1,
      "id": "1404aa1b-a600-4637-b5df-a2f3e9be5192",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "# Passo a Passo de Configuração\n## Passo 1: Configurar o node \"Webhook v1\"\n- Defina o método HTTP (GET ou POST) conforme a plataforma utilizada.\n\n- Copie a URL gerada e configure-a na aplicação de origem (API oficial ou não oficial do WhatsApp, CRM, etc.).\n\n- Verifique se o Webhook está \"Ativo\" e pronto para receber requisições.\n\n## Passo 2: Executar teste do Webhook\n- Envie uma mensagem de teste para o Webhook a partir da fonte configurada.\n\n- Use a função \"Pin Data\" no node Webhook para fixar os dados de exemplo recebidos, garantindo que você possa configurar os próximos nodes sem precisar reenviar mensagens.\n\n## Passo 3: Normalizar os dados no node \"Settings v1\"\n- Mapeie os campos recebidos do Webhook (ex: nome, número, mensagem) e organize-os em formato chave-valor.\n\n- Valide se todos os campos obrigatórios foram preenchidos.\n\n- Caso precise, adicione lógica de limpeza ou formatação de dados (ex: remover espaços ou caracteres especiais).\n\n## Passo 4: Configurar o Agente de IA\n- Chat Model (OpenAI): adicione a credencial e selecione o modelo apropriado (ex: GPT-4).\n\n- Memory (Simple Memory): configure o tipo de memória e defina o Session ID para manter o histórico de conversas por cliente.\n\n- System Message: adicione instruções claras para guiar a IA (ex: \"Responda como um vendedor especializado, mantenha tom amigável e direto\").\n\n## Passo 5: Configurar as Ferramentas (Tools)\n- Adicione a Vector Store (Supabase) para permitir busca semântica em documentos de suporte (catálogos, FAQs, scripts de vendas, etc.).\n\n- Configure o node Embeddings para gerar vetores e possibilitar pesquisas contextuais precisas.\n\n## Passo 6: Normalizar a saída no node \"Set Response v1\"\n- Ajuste a resposta gerada pela IA para o formato aceito pela sua plataforma de envio (ex: texto puro para WhatsApp).\n\n- Mapeie a resposta para os campos necessários (ex: número do cliente, mensagem formatada).\n\n- Caso necessário, adicione tratamentos adicionais, como quebra de linhas ou tags especiais.\n\n## Passo 7: Configurar o node \"Send Message\"\n- Adicione a URL de envio da API da plataforma (ex: endpoint do WhatsApp ou CRM).\n\n- Configure o método HTTP apropriado e mapeie os parâmetros de envio (ex: telefone, mensagem).\n\n- Teste com dados de exemplo para garantir que a mensagem seja entregue corretamente.\n\n## Passo 8: Testar e validar o fluxo\n- Envie uma mensagem real para o número configurado e execute o fluxo.\n\n- Verifique se a resposta retorna no formato correto e sem erros.\n\n- Caso necessário, ajuste os nodes intermediários (Settings ou Set Response) para corrigir qualquer inconsistência.",
        "height": 1460,
        "width": 700,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1180,
        -360
      ],
      "typeVersion": 1,
      "id": "0f943ba0-7fb6-413e-a9d1-7646784cbd39",
      "name": "Sticky Note6"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "e9fc995b-a4aa-484d-94b7-cb823b830574",
              "name": "output",
              "value": "={{ $json.output.split(\"\\n\\n\").map(item => ({ json: { message: item } })) }}",
              "type": "array"
            }
          ]
        },
        "options": {}
      },
      "id": "5da143b3-a171-47d5-835f-793cae2b45f3",
      "name": "Set response v1",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        400,
        100
      ]
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        -260,
        620
      ],
      "id": "eaee9719-d6ab-489a-9fd5-c0530a8882f0",
      "name": "OpenAI Chat Model"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $node['Settings v1'].json.base_url }}/{{ $node['Settings v1'].json.account_id }}/conversations/{{ $node['Settings v1'].json.conversation_id }}/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "api_access_token",
              "value": "={{ $node['Settings v1'].json.dev_access_token }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json;charset=utf-8"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "content",
              "value": "={{ $json.json.message }}"
            },
            {
              "name": "message_type",
              "value": "outgoing"
            }
          ]
        },
        "options": {}
      },
      "id": "8dfcf1c8-2837-40fc-a538-c2f046a7fbc8",
      "name": "Send Message",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        880,
        100
      ],
      "executeOnce": false,
      "retryOnFail": true,
      "waitBetweenTries": 5000
    }
  ],
  "pinData": {
    "Webhook v1": [
      {
        "json": {
          "headers": {
            "host": "whcsc.nocode.dev.br",
            "user-agent": "rest-client/2.1.0 (linux-musl x86_64) ruby/3.3.3p89",
            "content-length": "2886",
            "accept": "application/json",
            "accept-encoding": "gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
            "content-type": "application/json",
            "x-forwarded-for": "172.18.0.1",
            "x-forwarded-host": "whcsc.nocode.dev.br",
            "x-forwarded-port": "443",
            "x-forwarded-proto": "https",
            "x-forwarded-server": "traefik_traefik.1",
            "x-real-ip": "172.18.0.1"
          },
          "params": {},
          "query": {},
          "body": {
            "additional_attributes": {},
            "can_reply": true,
            "channel": "Channel::Whatsapp",
            "contact_inbox": {
              "id": 19547,
              "contact_id": 13629,
              "inbox_id": 14,
              "source_id": "5548991919191",
              "created_at": "2025-06-26T23:23:50.130Z",
              "updated_at": "2025-06-26T23:23:50.130Z",
              "hmac_verified": false,
              "pubsub_token": "hzgNAgQJCUdJm4hRA6iujZMf"
            },
            "id": 14853,
            "inbox_id": 14,
            "messages": [
              {
                "id": 211400,
                "content": "Opa, tudo bem?",
                "account_id": 2,
                "inbox_id": 14,
                "conversation_id": 14853,
                "message_type": 0,
                "created_at": 1750980305,
                "updated_at": "2025-06-26T23:25:05.395Z",
                "private": false,
                "status": "sent",
                "source_id": "-",
                "content_type": "text",
                "content_attributes": {},
                "sender_type": "Contact",
                "sender_id": 13629,
                "external_source_ids": {},
                "additional_attributes": {},
                "processed_message_content": "Opa, tudo bem?",
                "sentiment": {},
                "conversation": {
                  "assignee_id": 14,
                  "unread_count": 3,
                  "last_activity_at": 1750980305,
                  "contact_inbox": {
                    "source_id": "5548991919191"
                  }
                },
                "sender": {
                  "additional_attributes": {},
                  "custom_attributes": {},
                  "email": null,
                  "id": 13629,
                  "identifier": "5548991919191@s.whatsapp.net",
                  "name": "Renato Asse",
                  "phone_number": "+5548991919191",
                  "thumbnail": "-",
                  "type": "contact"
                }
              }
            ],
            "labels": [],
            "meta": {
              "sender": {
                "additional_attributes": {},
                "custom_attributes": {},
                "email": null,
                "id": 13629,
                "identifier": "5548991919191@s.whatsapp.net",
                "name": "Renato Asse",
                "phone_number": "+5548991919191",
                "thumbnail": "-",
                "type": "contact"
              },
              "assignee": {
                "id": 14,
                "name": "AI Vendas",
                "available_name": "AI Vendas",
                "avatar_url": "",
                "type": "user",
                "availability_status": null,
                "thumbnail": ""
              },
              "team": null,
              "hmac_verified": false
            },
            "status": "open",
            "custom_attributes": {},
            "snoozed_until": null,
            "unread_count": 3,
            "first_reply_created_at": "2025-06-26T23:24:34.136Z",
            "priority": null,
            "waiting_since": 1750980305,
            "agent_last_seen_at": 0,
            "contact_last_seen_at": 0,
            "last_activity_at": 1750980305,
            "timestamp": 1750980305,
            "created_at": 1750980230,
            "event": "automation_event.message_created"
          },
          "webhookUrl": "-",
          "executionMode": "production"
        }
      }
    ]
  },
  "connections": {
    "Supabase Vector Store2": {
      "ai_tool": [
        [
          {
            "node": "Agente de IA",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI2": {
      "ai_embedding": [
        [
          {
            "node": "Supabase Vector Store2",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Settings v1": {
      "main": [
        [
          {
            "node": "Agente de IA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook v1": {
      "main": [
        [
          {
            "node": "Settings v1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Agente de IA": {
      "main": [
        [
          {
            "node": "Set response v1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "Agente de IA",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Set response v1": {
      "main": [
        [
          {
            "node": "Send Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Agente de IA",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "608140f9-ee55-4077-8f50-65989322cc66",
  "meta": {
    "instanceId": "c26b496d432d629202fbe7548cedcb0d39d5fd774d2118b54d274a72dd4eea34"
  },
  "id": "wgoAy2tuxWTkMoxi",
  "tags": []
}