{
  "name": "Agente WhatsApp (Z-API) - Recepção Virtual para Clínicas [Plug and Play]",
  "nodes": [
    {
      "id": "1e6fd86a-91d8-4b09-b730-a19e163310f1",
      "name": "Receber Mensagem (Z-API)",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [0, 0],
      "parameters": {
        "httpMethod": "POST",
        "path": "zapi-recepcao-clinica",
        "responseMode": "onReceived",
        "options": {}
      }
    },
    {
      "id": "48ccfd03-ad0b-4d1a-9d12-910563ee73e9",
      "name": "Configuração da Clínica",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [224, 0],
      "parameters": {
        "mode": "manual",
        "includeOtherFields": true,
        "assignments": {
          "assignments": [
            { "id": "cfg1", "name": "nomeClinica", "value": "PREENCHER: Nome da clínica (ex: Clínica Vitalis)", "type": "string" },
            { "id": "cfg2", "name": "horarioAtendimento", "value": "PREENCHER: Horário de atendimento (ex: Seg a Sex 8h-19h, Sáb 8h-13h)", "type": "string" },
            { "id": "cfg3", "name": "endereco", "value": "PREENCHER: Endereço completo da clínica", "type": "string" },
            { "id": "cfg4", "name": "convenios", "value": "PREENCHER: Convênios aceitos (separados por vírgula)", "type": "string" },
            { "id": "cfg5", "name": "comoAgendar", "value": "PREENCHER: Instruções de como marcar consulta", "type": "string" },
            { "id": "cfg6", "name": "zapiInstanceId", "value": "PREENCHER: ID da instância Z-API (painel Z-API)", "type": "string" },
            { "id": "cfg7", "name": "zapiToken", "value": "PREENCHER: Token da instância Z-API (painel Z-API)", "type": "string" }
          ]
        },
        "options": {}
      }
    },
    {
      "id": "5bb834e3-9d4e-45ca-87d6-f02f2b8075b4",
      "name": "Normalizar Mensagem",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [448, 0],
      "parameters": {
        "mode": "manual",
        "includeOtherFields": false,
        "assignments": {
          "assignments": [
            { "id": "z1", "name": "phone", "value": "={{ $json.body?.phone ?? \"\" }}", "type": "string" },
            { "id": "z2", "name": "senderName", "value": "={{ $json.body?.senderName ?? \"Paciente\" }}", "type": "string" },
            { "id": "z3", "name": "messageText", "value": "={{ $json.body?.text?.message ?? \"\" }}", "type": "string" },
            { "id": "z4", "name": "fromMe", "value": "={{ $json.body?.fromMe ?? false }}", "type": "boolean" },
            { "id": "z5", "name": "isGroup", "value": "={{ $json.body?.isGroup ?? false }}", "type": "boolean" }
          ]
        },
        "options": {}
      }
    },
    {
      "id": "a700030e-bd76-47d9-a0ba-9904177f9a73",
      "name": "Mensagem Válida?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [672, 0],
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "loose" },
          "conditions": [
            { "id": "v1", "leftValue": "={{ $json.fromMe }}", "operator": { "type": "boolean", "operation": "false" }, "rightValue": true },
            { "id": "v2", "leftValue": "={{ $json.isGroup }}", "operator": { "type": "boolean", "operation": "false" }, "rightValue": true },
            { "id": "v3", "leftValue": "={{ $json.messageText }}", "operator": { "type": "string", "operation": "notEmpty" }, "rightValue": "" }
          ],
          "combinator": "and"
        },
        "options": {}
      }
    },
    {
      "id": "0e2ef850-5815-4db5-ae4f-607d6690ee1c",
      "name": "Agente Recepção Virtual",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [1152, 0],
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.messageText }}",
        "options": {
          "systemMessage": "=Você é o assistente virtual de recepção da {{ $(\"Configuração da Clínica\").item.json.nomeClinica }}.\n\nHorário de atendimento: {{ $(\"Configuração da Clínica\").item.json.horarioAtendimento }}\nEndereço: {{ $(\"Configuração da Clínica\").item.json.endereco }}\nConvênios aceitos: {{ $(\"Configuração da Clínica\").item.json.convenios }}\nComo agendar consulta: {{ $(\"Configuração da Clínica\").item.json.comoAgendar }}\n\nFORMATO DA RESPOSTA (regra mais importante, siga sempre):\nEscreva exatamente como uma pessoa real digitando no WhatsApp: frases curtas e corridas, em texto simples.\nNunca use markdown. Isso inclui: asteriscos (* ou **) para negrito, hifens (-) ou asteriscos no início de linha para listas, numeração de lista, títulos com #, ou qualquer outro símbolo de formatação.\nSe precisar apresentar mais de uma informação (por exemplo horários ou convênios), escreva tudo em uma frase corrida, separando os itens por vírgula e \"e\", nunca em tópicos ou linhas separadas.\nUse no máximo um emoji por resposta, e só quando fizer sentido naturalmente.\n\nSEU PAPEL:\n- Responder dúvidas básicas de pacientes: horário, endereço, convênios aceitos, como marcar consulta\n- Ser breve, educado e objetivo, no máximo 2 a 3 frases por resposta\n- Nunca dar diagnósticos, opiniões médicas ou orientações clínicas. Se perguntarem algo desse tipo, diga que apenas um profissional da clínica pode responder e que você vai encaminhar\n- Se não souber responder algo, diga que vai encaminhar a pergunta para a equipe da clínica\n\nResponda sempre em português do Brasil, em tom acolhedor e profissional, e sempre em texto simples, sem markdown.",
          "maxIterations": 8
        }
      }
    },
    {
      "id": "4ece8068-2d26-49f7-a02e-fb5000b9ddcf",
      "name": "Sua Chave de IA (OpenAI)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [896, 200],
      "parameters": {
        "model": { "__rl": true, "mode": "list", "value": "gpt-5-mini", "cachedResultName": "gpt-5-mini" },
        "options": { "temperature": 0.3 }
      },
      "credentials": {
        "openAiApi": { "name": "Chave OpenAI da Clinica - PREENCHER" }
      }
    },
    {
      "id": "9cadcb17-8a4e-4fd2-9cab-1a2ab15ccf46",
      "name": "Memória - Recepção Clínica",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.4,
      "position": [1024, 200],
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $(\"Receber Mensagem (Z-API)\").item.json.body?.phone ?? \"anon\" }}",
        "contextWindowLength": 15
      }
    },
    {
      "id": "ab6a2382-2cf9-43ae-92bd-af32f6dd6ba9",
      "name": "Enviar Resposta (Z-API)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [1376, 0],
      "parameters": {
        "method": "POST",
        "url": "=https://api.z-api.io/instances/{{ $(\"Configuração da Clínica\").item.json.zapiInstanceId }}/token/{{ $(\"Configuração da Clínica\").item.json.zapiToken }}/send-text",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "contentType": "json",
        "specifyBody": "keypair",
        "bodyParameters": {
          "parameters": [
            { "name": "phone", "value": "={{ $(\"Normalizar Mensagem\").item.json.phone }}" },
            { "name": "message", "value": "={{ $json.output }}" }
          ]
        },
        "options": {}
      },
      "credentials": {
        "httpHeaderAuth": { "name": "Z-API Client-Token da Clinica - PREENCHER" }
      }
    },
    {
      "id": "f178822d-59c5-4084-8ccc-2c6c0ab21b60",
      "name": "Sticky Note a3169fbb",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [-50, -50],
      "parameters": {
        "content": "## ATENÇÃO — cada clínica usa sua PRÓPRIA chave\nEste workflow deve rodar na SUA conta de automação, não na da Sales Compass. Você usa as SUAS próprias credenciais de IA (OpenAI) e WhatsApp (Z-API).\n\n## Como configurar\nSiga o manual em PDF que acompanha este arquivo. Resumo rápido:\n1. Crie uma conta gratuita em n8n.io (ou self-host) e importe este arquivo (Import from File / Import from URL).\n2. Crie uma conta em platform.openai.com, gere uma API key e cadastre como credencial OpenAI no node \"Sua Chave de IA (OpenAI)\".\n3. Crie uma conta em z-api.io, crie uma instância e conecte seu WhatsApp escaneando o QR Code.\n4. Copie o Instance ID e o Token da instância no painel Z-API.\n5. Copie o Client-Token da conta (Conta > Segurança) e cadastre como credencial Header Auth no node \"Enviar Resposta (Z-API)\" (Header Name = Client-Token).\n6. Abra o node \"Configuração da Clínica\" e preencha nome, horário, endereço, convênios, como agendar, Instance ID e Token.\n7. Ative o workflow, copie a Production URL do webhook e cole no painel Z-API em Webhooks > Ao receber.\n8. Envie uma mensagem de teste pelo seu WhatsApp.",
        "color": 5,
        "width": 1196,
        "height": 380
      }
    }
  ],
  "connections": {
    "Receber Mensagem (Z-API)": { "main": [[{ "node": "Configuração da Clínica", "type": "main", "index": 0 }]] },
    "Configuração da Clínica": { "main": [[{ "node": "Normalizar Mensagem", "type": "main", "index": 0 }]] },
    "Normalizar Mensagem": { "main": [[{ "node": "Mensagem Válida?", "type": "main", "index": 0 }]] },
    "Mensagem Válida?": { "main": [[{ "node": "Agente Recepção Virtual", "type": "main", "index": 0 }]] },
    "Agente Recepção Virtual": { "main": [[{ "node": "Enviar Resposta (Z-API)", "type": "main", "index": 0 }]] },
    "Sua Chave de IA (OpenAI)": { "ai_languageModel": [[{ "node": "Agente Recepção Virtual", "type": "ai_languageModel", "index": 0 }]] },
    "Memória - Recepção Clínica": { "ai_memory": [[{ "node": "Agente Recepção Virtual", "type": "ai_memory", "index": 0 }]] }
  },
  "pinData": {},
  "settings": { "executionOrder": "v1" }
}
