{
  "schema": "ldwf",
  "version": 1,
  "name": "E-Mail Drafter mit Kalender-Zugriff",
  "meta": {
    "exportedAt": "2025-11-16T16:58:24.611Z",
    "exporter": "client"
  },
  "graph": {
    "nodes": [
      {
        "type": "trigger",
        "data": {
          "comment": "📧 TRIGGER: Neue E-Mail empfangen\n\n🔧 SETUP:\n- Gmail-Verbindung ist bereits konfiguriert\n- Triggert bei JEDER neuen eingehenden E-Mail\n\n✨ PERSONALISIERUNGSOPTIONEN:\n1. Auf 'New email matching search' wechseln, um nur bestimmte E-Mails zu verarbeiten (z.B. mit Stichwörtern wie 'Termin', 'Meeting', 'Appointment')\n2. Filter nach Label/Ordner einrichten\n3. Auf Outlook Email umstellen, falls Sie Outlook verwenden\n\n💡 TIPP: Für produktiven Einsatz empfehle ich einen Such-Filter, damit nicht jede E-Mail den Workflow auslöst.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "newEmail",
          "kind": "integration",
          "integrationId": "0ccd0103-2862-46ac-86e1-ef1b40e679b4",
          "triggerId": "57e6bcdb-637f-414d-9af9-ba840d5f4244",
          "connectionId": null,
          "params": []
        },
        "id": "bec54d92-646f-4911-b322-148d82590677",
        "position": {
          "x": 20,
          "y": 4960
        }
      },
      {
        "type": "agent",
        "data": {
          "comment": "✍️ KI-AGENT: Professionellen E-Mail-Entwurf erstellen\n\n🔧 SETUP:\n- Wählt automatisch die 3 besten Zeitslots aus\n- Erstellt höflichen, professionellen Antwort-Text auf Deutsch\n- Generiert passenden Betreff (RE: ...)\n\n✨ PERSONALISIERUNGSOPTIONEN:\n1. Tonfall anpassen (formeller/lockerer)\n2. Anzahl Terminvorschläge ändern (aktuell: 3)\n3. Sprache wechseln (z.B. Englisch)\n4. Firmen-Signatur hinzufügen\n5. Template/Struktur vorgeben\n6. Zusätzliche Infos einfügen (z.B. Meeting-Link, Standort)\n7. Anrede-Stil definieren (Du/Sie)\n\n💡 TIPP: Der Agent passt den Ton automatisch an die ursprüngliche E-Mail an. Für konsistente Firmen-Kommunikation können Sie Ihre Corporate-Language-Guidelines im Prompt hinterlegen.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "generateEmailDraft",
          "assistantId": null,
          "mode": "create",
          "name": "E-Mail-Entwurf erstellen",
          "prompt": {
            "mode": "manual",
            "value": "Erstelle einen professionellen, höflichen E-Mail-Entwurf als Antwort auf die Terminanfrage.\n\nUrsprüngliche E-Mail-Informationen:\n- Betreff: {{analyzeMeetingRequest.output.structured.email_subject}}\n- Absender: {{analyzeMeetingRequest.output.structured.sender_email}}\n- Besondere Anforderungen: {{analyzeMeetingRequest.output.structured.special_requirements}}\n\nVerfügbare Zeitslots aus dem Kalender:\n{{findFreeSlots.output}}\n\nAufgabe:\n1. Wähle die 3 BESTEN Zeitslots aus den verfügbaren Optionen aus\n2. Erstelle einen professionellen E-Mail-Text, der:\n   - Freundlich und professionell ist\n   - Die 3 konkreten Terminvorschläge klar und übersichtlich darstellt (mit Datum, Uhrzeit)\n   - Eine höfliche Aufforderung zur Bestätigung enthält\n   - Auf besondere Anforderungen eingeht, falls vorhanden\n3. Erstelle einen passenden Betreff für die Antwort-E-Mail (z.B. \"RE: [Original-Betreff]\")\n\nDer E-Mail-Text sollte in gutem Deutsch verfasst sein und alle relevanten Details enthalten."
          },
          "attachmentIds": [],
          "output": "structured",
          "connectionOverrides": {},
          "outputSchema": [
            {
              "id": "5b3e8c64-7f18-4e0d-bd3f-c4e2a8d5f9a3",
              "name": "email_subject",
              "description": "Betreff der Antwort-E-Mail",
              "type": "string",
              "required": true
            },
            {
              "id": "a7d9e2f4-1c8b-4a6d-9e3f-b8c7d6e5f4a2",
              "name": "email_body",
              "description": "Vollständiger E-Mail-Text mit den 3 Terminvorschlägen",
              "type": "string",
              "required": true
            },
            {
              "id": "3f8e7d6c-5b4a-3c2d-1e0f-9a8b7c6d5e4f",
              "name": "meeting_slot_1",
              "description": "Erster Terminvorschlag",
              "type": "string",
              "required": true
            },
            {
              "id": "2e7d6c5b-4a3c-2d1e-0f9a-8b7c6d5e4f3a",
              "name": "meeting_slot_2",
              "description": "Zweiter Terminvorschlag",
              "type": "string",
              "required": true
            },
            {
              "id": "1d6c5b4a-3c2d-1e0f-9a8b-7c6d5e4f3a2b",
              "name": "meeting_slot_3",
              "description": "Dritter Terminvorschlag",
              "type": "string",
              "required": true
            }
          ],
          "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
          "tools": [],
          "maxSteps": 25
        },
        "id": "1cf7db40-3a1f-42c8-9a16-9a549ef7e56f",
        "position": {
          "x": 1680,
          "y": 4960
        }
      },
      {
        "type": "agent",
        "data": {
          "comment": "🤖 KI-AGENT: E-Mail analysieren & Terminanforderungen extrahieren\n\n🔧 SETUP:\n- Analysiert automatisch den E-Mail-Inhalt\n- Extrahiert: Dauer, Zeitpräferenzen, Dringlichkeit, Betreff, Absender\n- Verwendet strukturierte Ausgabe für zuverlässige Weiterverarbeitung\n\n✨ PERSONALISIERUNGSOPTIONEN:\n1. Prompt anpassen für Ihre spezifischen Anforderungen (z.B. Branche, Terminarten)\n2. Weitere Felder hinzufügen (z.B. Teilnehmerzahl, Standort, Online/Präsenz)\n3. Standardwerte ändern (aktuell: 60 Min. Termindauer)\n4. Dringlichkeits-Kategorien anpassen\n\n💡 TIPP: Der Agent erkennt auch implizite Informationen aus dem Kontext (z.B. 'nächste Woche' = mittlere Dringlichkeit).",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "analyzeMeetingRequest",
          "assistantId": null,
          "mode": "create",
          "name": "Terminanfrage analysieren",
          "prompt": {
            "mode": "manual",
            "value": "Analysiere die folgende E-Mail und extrahiere alle relevanten Informationen für eine Terminanfrage:\n\nE-Mail: {{newEmail.output}}\n\nExtrahiere:\n1. Die gewünschte Termindauer (in Minuten)\n2. Zeitpräferenzen des Absenders (bevorzugte Tage, Uhrzeiten, Zeiträume)\n3. Die Dringlichkeit der Anfrage (hoch, mittel, niedrig)\n4. Besondere Anforderungen oder Notizen\n5. Der Betreff der E-Mail\n6. Die E-Mail-Adresse des Absenders\n\nFalls Informationen nicht explizit angegeben sind, leite sie aus dem Kontext ab oder verwende sinnvolle Standardwerte (z.B. 60 Minuten für Termindauer)."
          },
          "attachmentIds": [],
          "output": "structured",
          "connectionOverrides": {},
          "outputSchema": [
            {
              "id": "9f2834d7-0df9-42b6-8a8b-e0661590065b",
              "name": "duration_minutes",
              "description": "Gewünschte Termindauer in Minuten",
              "type": "number",
              "required": true
            },
            {
              "id": "8318f9da-9f44-4225-aef4-c4c5465d6dc0",
              "name": "time_preferences",
              "description": "Zeitpräferenzen des Absenders",
              "type": "string",
              "required": true
            },
            {
              "id": "ed3460a8-30bb-458a-a3b9-0174f32a84b7",
              "name": "urgency",
              "description": "Dringlichkeit der Anfrage",
              "type": "select",
              "required": true,
              "options": [
                "hoch",
                "mittel",
                "niedrig"
              ]
            },
            {
              "id": "68bac208-a47e-477e-a897-47a3688b6336",
              "name": "special_requirements",
              "description": "Besondere Anforderungen oder Notizen",
              "type": "string",
              "required": false
            },
            {
              "id": "408b7591-e218-4ce7-938a-b90a1420c189",
              "name": "email_subject",
              "description": "Betreff der ursprünglichen E-Mail",
              "type": "string",
              "required": true
            },
            {
              "id": "b215cf05-976e-4ccc-8ea0-4e67f0838f42",
              "name": "sender_email",
              "description": "E-Mail-Adresse des Absenders",
              "type": "string",
              "required": true
            }
          ],
          "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
          "tools": [],
          "maxSteps": 25
        },
        "id": "b346aff8-80e9-406c-b86b-06ab39595fc7",
        "position": {
          "x": 560,
          "y": 4960
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📅 KALENDER-ACTION: Freie Zeitslots finden\n\n🔧 SETUP (ERFORDERLICH):\n⚠️ WÄHLEN SIE IHRE OUTLOOK CALENDAR-VERBINDUNG AUS!\n- Klicken Sie auf den Node und wählen Sie Ihre Kalender-Verbindung\n- Timezone ist auf 'Europe/Berlin' gesetzt - anpassen falls nötig\n\n✨ PERSONALISIERUNGSOPTIONEN:\n1. Zeitzone ändern (timezone-Feld)\n2. Suchzeitraum anpassen (aktuell: 7-14 Tage je nach Dringlichkeit)\n3. Arbeitszeiten definieren (activityDomain: 'work' = 9-17 Uhr, 'unrestricted' = alle Zeiten)\n4. Anzahl Vorschläge erhöhen (maxSuggestions, aktuell: 10)\n5. Weitere Teilnehmer hinzufügen (additionalParticipants-Feld)\n6. Auf Google Calendar umstellen\n\n💡 TIPP: Die KI berücksichtigt automatisch die Zeitpräferenzen aus der E-Mail-Analyse.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "findFreeSlots",
          "actionId": "6cad4d51-4f6f-46c9-8b31-bb0ef54f72f9",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "endTime": {
                "mode": "prompt",
                "prompt": "Generiere den End-Zeitpunkt für die Suche im ISO 8601 Format (z.B. '2025-01-27T17:00:00'). Der Zeitraum sollte 7-14 Tage ab dem Startzeitpunkt umfassen, abhängig von der Dringlichkeit."
              },
              "duration": {
                "mode": "prompt",
                "prompt": "Konvertiere die Termindauer {{analyzeMeetingRequest.output.structured.duration_minutes}} Minuten in das ISO 8601 Duration Format (z.B. 'PT30M' für 30 Minuten, 'PT1H' für 60 Minuten, 'PT1H30M' für 90 Minuten)."
              },
              "timezone": {
                "mode": "manual",
                "value": "Europe/Berlin"
              },
              "startTime": {
                "mode": "prompt",
                "prompt": "Generiere den Start-Zeitpunkt für die Suche nach freien Slots im ISO 8601 Format (z.B. '2025-01-20T09:00:00'). Berücksichtige die Zeitpräferenzen: {{analyzeMeetingRequest.output.structured.time_preferences}} und die Dringlichkeit: {{analyzeMeetingRequest.output.structured.urgency}}. Beginne die Suche ab morgen oder dem nächstmöglichen Werktag."
              },
              "activityDomain": {
                "mode": "manual",
                "value": "work"
              },
              "maxSuggestions": {
                "mode": "manual",
                "value": "{{ 10 }}"
              },
              "participantEmail": {
                "mode": "manual",
                "value": "{{analyzeMeetingRequest.output.structured.sender_email}}"
              }
            }
          }
        },
        "id": "334fb9cd-3691-4fb3-a02e-00afb6adcf02",
        "position": {
          "x": 1120,
          "y": 4960
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "💾 E-MAIL-ACTION: Entwurf speichern\n\n🔧 SETUP:\n- Gmail-Verbindung ist bereits konfiguriert\n- Speichert automatisch als Antwort auf die ursprüngliche E-Mail\n- Konvertiert Text in HTML-Format für schöne Formatierung\n\n✨ PERSONALISIERUNGSOPTIONEN:\n1. CC/BCC hinzufügen (z.B. sich selbst in CC)\n2. Anhänge automatisch hinzufügen (z.B. Standarddokumente)\n3. Auf Outlook Email umstellen\n4. HTML-Template anpassen (aktuell: einfache Formatierung mit <b>, <br>)\n5. Bestätigung vor Speichern aktivieren (requiresConfirmation: true)\n\n💡 TIPP: Der Entwurf wird als Thread-Antwort gespeichert, sodass die Konversation zusammenhängend bleibt.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "saveDraft",
          "actionId": "7c1e4def-fa3d-4a8f-9639-3c71d5a8f784",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "to": {
                "mode": "manual",
                "value": "{{analyzeMeetingRequest.output.structured.sender_email}}"
              },
              "threadId": {
                "mode": "auto"
              },
              "replyContent": {
                "mode": "prompt",
                "prompt": "Konvertiere den E-Mail-Text in HTML-Format mit passender Formatierung: {{generateEmailDraft.output.structured.email_body}}. Verwende <b> für Fettdruck, <br> für Zeilenumbrüche, und strukturiere die Terminvorschläge übersichtlich."
              }
            }
          }
        },
        "id": "89394825-3a12-4508-8efb-b599fa763ff9",
        "position": {
          "x": 2224,
          "y": 4960
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "🔔 BENACHRICHTIGUNG: Slack-Nachricht senden\n\n🔧 SETUP (ERFORDERLICH):\n⚠️ WÄHLEN SIE IHRE SLACK-VERBINDUNG UND CHANNEL AUS!\n- Klicken Sie auf den Node\n- Wählen Sie Ihre Slack-Verbindung\n- Wählen Sie den gewünschten Channel (z.B. #terminanfragen, #team)\n\n✨ PERSONALISIERUNGSOPTIONEN:\n1. Auf Microsoft Teams umstellen\n2. Nachrichtenformat anpassen (mehr/weniger Details)\n3. Mehrere Channels benachrichtigen (weitere Slack-Actions hinzufügen)\n4. @mentions hinzufügen (z.B. @channel bei dringenden Anfragen)\n5. Emoji/Icons anpassen\n6. Bedingte Benachrichtigungen (nur bei hoher Dringlichkeit)\n7. Direktnachricht an bestimmte Person statt Channel\n\n💡 TIPP: Sie können mehrere Benachrichtigungs-Nodes parallel hinzufügen (z.B. Slack UND Teams) oder eine Condition davor setzen, um nur bei bestimmten Kriterien zu benachrichtigen.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "sendNotification",
          "actionId": "26a39d11-d5fe-4f46-b776-973dd20b8147",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "text": {
                "mode": "prompt",
                "prompt": "Erstelle eine informative Slack-Nachricht, die das Team darüber informiert, dass ein E-Mail-Entwurf für eine Terminanfrage erstellt wurde.\n\nInformationen:\n- Absender: {{analyzeMeetingRequest.output.structured.sender_email}}\n- Betreff: {{analyzeMeetingRequest.output.structured.email_subject}}\n- Dringlichkeit: {{analyzeMeetingRequest.output.structured.urgency}}\n- Vorgeschlagene Termine: {{generateEmailDraft.output.structured.meeting_slot_1}}, {{generateEmailDraft.output.structured.meeting_slot_2}}, {{generateEmailDraft.output.structured.meeting_slot_3}}\n\nDie Nachricht sollte kurz, informativ und gut formatiert sein (verwende Markdown für Slack)."
              },
              "channelId": {
                "mode": "manual",
                "value": ""
              }
            }
          }
        },
        "id": "1e013e74-a9ec-4e70-ad06-88f278922906",
        "position": {
          "x": 2768,
          "y": 4960
        }
      }
    ],
    "edges": [
      {
        "id": "43f1b2af-208e-42a3-ac06-6c34fdbad18c",
        "source": "bec54d92-646f-4911-b322-148d82590677",
        "target": "b346aff8-80e9-406c-b86b-06ab39595fc7",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "0ade8632-aa9e-4fb6-9602-e7f53b0102a1",
        "source": "b346aff8-80e9-406c-b86b-06ab39595fc7",
        "target": "334fb9cd-3691-4fb3-a02e-00afb6adcf02",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "0fdfe8fb-3876-4156-97f7-5706f457cae1",
        "source": "334fb9cd-3691-4fb3-a02e-00afb6adcf02",
        "target": "1cf7db40-3a1f-42c8-9a16-9a549ef7e56f",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "9332996d-c64d-4825-bec7-8f6d346bf808",
        "source": "1cf7db40-3a1f-42c8-9a16-9a549ef7e56f",
        "target": "89394825-3a12-4508-8efb-b599fa763ff9",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "e76aaace-271b-4e00-ada5-7c8ec6af180b",
        "source": "89394825-3a12-4508-8efb-b599fa763ff9",
        "target": "1e013e74-a9ec-4e70-ad06-88f278922906",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      }
    ]
  }
}