{
  "name": "Appointment Booking Agent",
  "nodes": [
    {
      "parameters": {},
      "id": "5bc85d9c-2b76-491d-b051-4806bf9b8755",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        220,
        320
      ]
    },
    {
      "parameters": {
        "keepOnlySet": true,
        "values": {
          "string": [
            {
              "name": "agent_slug",
              "value": "appointment-booking-agent"
            },
            {
              "name": "agent_title",
              "value": "Appointment Booking Agent"
            },
            {
              "name": "agent_description",
              "value": "Erfasst Terminw\u00fcnsche, validiert Angaben und erstellt best\u00e4tigungsfertige Buchungsvorschl\u00e4ge."
            },
            {
              "name": "system_prompt",
              "value": "Du bist ein hochspezialisierter Business-Agent. Arbeite pr\u00e4zise, strukturiert, umsetzungsorientiert und ohne Halluzinationen. Nutze ausschlie\u00dflich die bereitgestellten Eingaben. Wenn Daten fehlen oder unsicher sind, markiere sie explizit als offen. Antworte standardm\u00e4\u00dfig auf Deutsch, au\u00dfer die Eingabe verlangt etwas anderes. Liefere Ergebnisse so, dass ein Team sie direkt weiterverwenden kann.\n\nRolle: Appointment Booking Agent. Aufgabe: Erfasst Terminw\u00fcnsche, validiert Angaben und erstellt best\u00e4tigungsfertige Buchungsvorschl\u00e4ge. Arbeite immer in diesem Output-Rahmen: Validierungscheck, 3 Terminvorschl\u00e4ge, R\u00fcckfrage bei Konflikten, Best\u00e4tigungstext, Interne Notiz."
            },
            {
              "name": "task",
              "value": "Pr\u00fcfe die Terminanfrage und erstelle drei passende Terminvorschl\u00e4ge inklusive Best\u00e4tigungstext."
            },
            {
              "name": "goal",
              "value": "Aus einer Anfrage eine saubere, buchungsreife Terminantwort machen."
            },
            {
              "name": "context",
              "value": "Beratungsunternehmen mit 30-Minuten Erstgespr\u00e4ch per Google Meet. Gesch\u00e4ftstage Montag bis Freitag 09:00-17:00 Europe/Vienna."
            },
            {
              "name": "input_data",
              "value": "{\n  \"customer_name\": \"Lukas Steiner\",\n  \"request_channel\": \"Webformular\",\n  \"timezone\": \"Europe/Vienna\",\n  \"preferred_days\": [\n    \"Dienstag\",\n    \"Mittwoch\"\n  ],\n  \"preferred_time_window\": \"09:00-12:00\",\n  \"meeting_type\": \"Erstberatung\",\n  \"duration_minutes\": 30,\n  \"email\": \"lukas.steiner@example.com\",\n  \"notes\": \"Interessiert an AI Automatisierung f\u00fcr Vertrieb und Support\"\n}"
            },
            {
              "name": "output_format",
              "value": "Markdown mit klaren \u00dcberschriften und Bulletpoints"
            },
            {
              "name": "output_schema",
              "value": "\n- Validierungscheck\n- 3 Terminvorschl\u00e4ge\n- R\u00fcckfrage bei Konflikten\n- Best\u00e4tigungstext\n- Interne Notiz"
            },
            {
              "name": "extra_rules",
              "value": "Beachte Zeitzone Europe/Vienna und antworte freundlich-professionell auf Deutsch."
            },
            {
              "name": "sample_customer_value",
              "value": "Dieser Agent verwandelt Anfragen in klare Terminvorschl\u00e4ge mit Best\u00e4tigungstext."
            }
          ]
        }
      },
      "id": "63e3ad40-8d4a-40ca-bf77-2ac9d74dc591",
      "name": "Set Agent Input",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        480,
        320
      ]
    },
    {
      "parameters": {
        "jsCode": "const user_message = `Aufgabe: ${$json.task}\n\nZiel: ${$json.goal}\n\nKontext: ${$json.context}\n\nEingabedaten (JSON oder Text):\n${$json.input_data}\n\nErwartete Ausgabebausteine:\n${$json.output_schema}\n\nZusatzregeln:\n${$json.extra_rules}`;\n\nreturn [{\n  json: {\n    ...$json,\n    user_message,\n    import_note: 'Nach dem Import nur OPENAI_API_KEY bzw. HTTP Credential und optional OPENAI_MODEL anpassen.'\n  }\n}];"
      },
      "id": "9441a64a-2420-4a95-bebb-4c68fbc9f466",
      "name": "Build Prompt",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        760,
        320
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/responses",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{$env.OPENAI_API_KEY}}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ model: $env.OPENAI_MODEL || 'gpt-4.1', instructions: $json.system_prompt, input: $json.user_message }) }}",
        "options": {}
      },
      "id": "6c3cbd8e-5998-4a5e-a078-04809cc391ca",
      "name": "Call OpenAI Responses API",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1040,
        320
      ]
    },
    {
      "parameters": {
        "jsCode": "const body = $json;\n                let text = '';\n                if (Array.isArray(body.output)) {\n                  for (const item of body.output) {\n                    if (Array.isArray(item.content)) {\n                      for (const c of item.content) {\n                        if (c.type === 'output_text' && c.text) text += c.text + '\n';\n                      }\n                    }\n                  }\n                }\n                return [{\n                  json: {\n                    agent: $('Set Agent Input').first().json.agent_title,\n                    result: text.trim(),\n                    raw_response: body\n                  }\n                }];"
      },
      "id": "2e2f0046-19cf-4345-ba4e-b080e654b148",
      "name": "Extract Result",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1300,
        320
      ]
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Set Agent Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Agent Input": {
      "main": [
        [
          {
            "node": "Build Prompt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Prompt": {
      "main": [
        [
          {
            "node": "Call OpenAI Responses API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call OpenAI Responses API": {
      "main": [
        [
          {
            "node": "Extract Result",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "active": false,
  "versionId": "d775c197-0b49-4382-ac8c-88c5310e07ad",
  "id": "2b1cd64a-315c-4335-9ba0-1a2bf1557978",
  "tags": [
    "ai",
    "template",
    "appointment-booking-agent"
  ]
}