{
  "name": "Sub_Efetiva_Agendamento",
  "nodes": [
    {
      "parameters": {
        "workflowInputs": {
          "values": [
            {
              "name": "idTipoPaciente",
              "type": "number"
            },
            {
              "name": "dataConsulta"
            },
            {
              "name": "idProfissional"
            },
            {
              "name": "tokenAcesso"
            },
            {
              "name": "nomeLead"
            },
            {
              "name": "sobrenomeLead"
            },
            {
              "name": "whatsAppLead"
            },
            {
              "name": "cpfLead"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        0,
        0
      ],
      "id": "bfd38671-7937-4c1d-bb20-9257b1f1d6b2",
      "name": "Gatilho Sub"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "d47657db-c440-4336-82cb-bf01f63c06f3",
              "name": "tipoPaciente",
              "value": "={{ $if($json.idTipoPaciente==1,\"particular\",\"convenio\") }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        260,
        0
      ],
      "id": "6f85fff3-7ccc-48f9-a5a6-0d017dbb831b",
      "name": "Variaveis"
    },
    {
      "parameters": {},
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "typeVersion": 1,
      "position": [
        940,
        240
      ],
      "id": "5b8a72cc-4365-450d-afa3-2890af0e7294",
      "name": "Think"
    },
    {
      "parameters": {
        "toolDescription": "Use essa tool para verificar os horários livres na agenda de um profissional.",
        "url": "=https://api.consultoriome.com/v1/api/appointment/available-times/{{ $('Gatilho Sub').item.json.idProfissional }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Gatilho Sub').item.json.tokenAcesso }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.2,
      "position": [
        460,
        240
      ],
      "id": "2d4524bb-2cf2-47ee-96c4-cc19ebdcebde",
      "name": "VerificaVaga"
    },
    {
      "parameters": {
        "toolDescription": "Chame essa tool para verificar as marcações da agenda para uma data como parametro de consulta.",
        "url": "=https://api.consultoriome.com/v1/api/messenger/appointments/{{ $fromAI(\"data\",\"data no formato YYYY-MM-DD (ex. 2025-05-30) para consulta\") }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Gatilho Sub').item.json.tokenAcesso }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.2,
      "position": [
        600,
        240
      ],
      "id": "43057e7c-4c93-4be9-b623-8ad2c7085758",
      "name": "VerificaMarcacao"
    },
    {
      "parameters": {
        "model": "openai/gpt-4.1",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "typeVersion": 1,
      "position": [
        320,
        240
      ],
      "id": "96a9b4a5-6142-40be-b482-0293234c5b14",
      "name": "Chat Model",
      "credentials": {
        "openRouterApi": {
          "id": "k89DhV1cw5xMf3B7",
          "name": "OpenRouter Conexao"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=# data_agendamento:\n{{ $('Gatilho Sub').item.json.dataConsulta }}\n# tipo_cliente\n{{ $json.tipoPaciente }}\n# whatsAppLead:\n{{ $('Gatilho Sub').item.json.whatsAppLead }}\n# nomeLead:\n{{ $('Gatilho Sub').item.json.nomeLead }}\n# sobrenomeLead:\n{{ $('Gatilho Sub').item.json.sobrenomeLead }}\n# cpfLead:\n{{ $('Gatilho Sub').item.json.cpfLead }}\n# ProId:\n{{ $('Gatilho Sub').item.json.idProfissional }}\n# data_atual\n{{ $now.toISO() }}",
        "options": {
          "systemMessage": "=# 🎯 GOAL (Objetivo da IA)\n\nVocê é um **agente agendador final** responsável por **verificar e efetivar** um agendamento de consulta usando as tools **VerificaVaga**, **VerificaMarcacao** e **EfetuaAgendamento**.\n\nVocê **não realiza atendimento humano**, apenas recebe os dados do lead e realiza o processo de **confirmação de disponibilidade e agendamento automático**.\n\n---\n\n## 🧠 Seu objetivo é:\n\n1. Utilizar a tool `Think` para organizar seu raciocínio em 4 etapas:\n\n---\n\n### 🧩 Etapas com `Think`\n\n#### 1️⃣ Coleta (`Think`)\n- Obtenha as seguintes variáveis do contexto:\n  - `data_agendamento`\n  - `tipo_cliente`\n  - `whatsAppLead`\n  - `nomeLead`\n  - `sobrenomeLead`\n  - `cpfLead`\n  - `descricaoProcedimento`\n- Obtenha a `data` base (sem horário) a partir de `data_agendamento` para consulta na agenda.\n- Acesse os horários disponíveis com a tool `VerificaVaga`.\n- Consulte os horários ocupados com a tool `VerificaMarcacao`.\n\n#### 2️⃣ Análise (`Think`)\n- Verifique se `data_agendamento` está presente entre os horários disponíveis da agenda.\n- Considere corretamente o timezone `America/Sao_Paulo` ao comparar datas e horários.\n- Valide se os seguintes dados obrigatórios estão presentes:\n  - `whatsAppLead`\n  - `nomeLead`\n  - `sobrenomeLead`\n  - `cpfLead`\n\n#### 3️⃣ Estratégia de Escolha (`Think`)\n- Se o horário estiver disponível:\n  - E todos os dados obrigatórios estiverem preenchidos → prossiga com o agendamento.\n  - Se faltar algum dos dados obrigatórios → retorne um aviso de falta de informações.\n- Se o horário estiver **ocupado**, retorne status `\"indisponivel\"`.\n\n#### 4️⃣ Ação e Retorno (`Think`)\n- Se disponível e com dados completos, chame a tool `EfetuaAgendamento`.\n- Se o horário estiver indisponível, retorne:\n  ```json\n  {\n    \"status\": \"indisponivel\"\n  }\n  ```\n- Se faltar qualquer um dos dados obrigatórios, retorne:\n  ```json\n  {\n    \"status\": \"erro\",\n    \"mensagem\": \"Faltam dados obrigatórios para efetuar o agendamento: nome, sobrenome, CPF ou telefone do lead.\"\n  }\n  ```\n\n---\n\n## 🛠️ Uso das Tools\n\n### 🔍 Tool `VerificaVaga`\n- Entrada: `data_agendamento`\n- Saída: horários livres para aquele dia e profissional.\n\n### 📌 Tool `VerificaMarcacao`\n- Entrada: `data` (no formato YYYY-MM-DD)\n- Saída: horários já ocupados na agenda.\n\n### ✅ Tool `EfetuaAgendamento`\n- Entrada:\n  - `DateTime`: `data_agendamento`\n  - `ProId`: ID do profissional (disponível no contexto)\n  - `Name`: `nomeLead + sobrenomeLead`\n  - `Phone1`: `whatsAppLead`\n  - `Document`: `cpfLead`\n  - `TimeSlotId`: slot correspondente da agenda para o horário\n\n---\n\n## 📤 FORMATO DE RETORNO\n\n### Se o agendamento for bem-sucedido:\n```json\n{\n  \"status\": \"confirmado\",\n  \"horario\": \"Quarta, 2 de Julho às 15:00\"\n}\n```\n\n### Se o horário estiver **indisponível**:\n```json\n{\n  \"status\": \"indisponivel\"\n}\n```\n\n### Se faltar informações obrigatórias:\n```json\n{\n  \"status\": \"erro\",\n  \"mensagem\": \"Faltam dados obrigatórios para efetuar o agendamento: nome, sobrenome, CPF ou telefone do lead.\"\n}\n```\n\n---\n\n## 🧩 Considerações Técnicas\n\n- Sempre use `VerificaVaga` antes de tentar qualquer agendamento.\n- Nunca agende diretamente sem verificar.\n- Não agendar horários passados (compare com `data_atual`).\n- Utilize o `TimeSlotId` correto retornado por `VerificaVaga`.\n- Os dados devem estar no timezone `America/Sao_Paulo`.\n\n---\n\n## 📌 Exemplo de Fluxo\n\n### Cenário:\n- `data_agendamento`: 2025-07-02T15:00:00\n- `nomeLead`: \"João\"\n- `sobrenomeLead`: \"Silva\"\n- `cpfLead`: \"123.456.789-00\"\n- `whatsAppLead`: \"84999887766\"\n- `VerificaVaga` retorna: 13:00, 14:30, **15:00**, 16:00\n- `VerificaMarcacao` retorna: 13:30, 16:30\n\n### Resposta esperada:\n```json\n{\n  \"status\": \"confirmado\",\n  \"horario\": \"Quarta, 2 de Julho às 15:00\"\n}\n```\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        480,
        0
      ],
      "id": "7852f04f-297f-481d-b5b9-671fbad68c95",
      "name": "Agente Agendador"
    },
    {
      "parameters": {
        "toolDescription": "Chame essa tool para efetivar um agendamento para um paciente para determinado profissional.",
        "method": "POST",
        "url": "https://api.consultoriome.com/v1/api/appointment/create-appointment",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Gatilho Sub').item.json.tokenAcesso }}"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "ProId",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters0_Value', `id do profissional`, 'string') }}"
            },
            {
              "name": "DateTime",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters1_Value', `data e hora da consulta;`, 'string') }}"
            },
            {
              "name": "Name",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters2_Value', `nome e sobrenome do lead.`, 'string') }}"
            },
            {
              "name": "Phone1",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters3_Value', `whatsapp do lead`, 'string') }}"
            },
            {
              "name": "Document",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters4_Value', `CPF do lead`, 'string') }}"
            },
            {
              "name": "TimeSlotId",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters5_Value', \"id do slot consultado na agenda por `verificavaga`\", 'string') }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.2,
      "position": [
        760,
        240
      ],
      "id": "c3f23e5a-506c-442d-a3be-a30f0c224b2b",
      "name": "EfetuaAgendamento"
    }
  ],
  "pinData": {},
  "connections": {
    "Variaveis": {
      "main": [
        [
          {
            "node": "Agente Agendador",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Think": {
      "ai_tool": [
        [
          {
            "node": "Agente Agendador",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "VerificaVaga": {
      "ai_tool": [
        [
          {
            "node": "Agente Agendador",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "VerificaMarcacao": {
      "ai_tool": [
        [
          {
            "node": "Agente Agendador",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Agente Agendador",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Gatilho Sub": {
      "main": [
        [
          {
            "node": "Variaveis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "EfetuaAgendamento": {
      "ai_tool": [
        [
          {
            "node": "Agente Agendador",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "79d319d5-dc9c-4994-9451-7a4825b674b4",
  "meta": {
    "instanceId": "321971d7314652e2a2521561aad23a0f02623451b95de980aa045429cfc2f9c0"
  },
  "id": "nmY3LvU3dbeDKrdz",
  "tags": []
}