{
  "schema": "ldwf",
  "version": 1,
  "name": "Interview-Vorbereitung",
  "meta": {
    "exportedAt": "2025-11-16T16:53:14.264Z",
    "exporter": "client"
  },
  "graph": {
    "nodes": [
      {
        "type": "action",
        "data": {
          "comment": "👤 KANDIDATEN-DATEN: Personio Kandidatenprofil abrufen\n\n📋 BESCHREIBUNG:\nRuft das vollständige Kandidatenprofil aus Personio ab, inkl.:\n- Name und Kontaktdaten\n- Bewerbungsunterlagen und CV\n- Bisherige Berufserfahrung\n- Qualifikationen und Skills\n- Bewerbungsstatus und -historie\n\n⚙️ SETUP:\n1. Wählen Sie Ihre Personio-Verbindung aus\n2. Die Kandidaten-ID wird automatisch aus dem vorherigen Schritt übernommen\n\n💡 PERSONALISIERUNG:\n- Keine Änderungen nötig - funktioniert automatisch\n- Stellen Sie sicher, dass Personio-IDs im Kalender korrekt sind\n\n⚡ PARALLEL-AUSFÜHRUNG:\nDieser Schritt läuft parallel zum Job-Details-Abruf für maximale Geschwindigkeit!",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "getCandidateDetails",
          "actionId": "669a6423-53d1-4feb-a900-dfc6e63fcacf",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "64776bd9-4c58-42d0-8301-2c8a4566e68c",
            "fields": {
              "id": {
                "mode": "manual",
                "value": "{{extractCandidateId.output.candidateId}}"
              }
            }
          }
        },
        "id": "df192e2f-044b-4d26-9fcf-1226d0ece583",
        "position": {
          "x": 1120,
          "y": 8190
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "💼 STELLENBESCHREIBUNG: Personio Job-Details abrufen\n\n📋 BESCHREIBUNG:\nRuft die vollständige Stellenbeschreibung aus Personio ab:\n- Job-Titel und Abteilung\n- Anforderungsprofil und Skills\n- Aufgabenbereiche\n- Team-Struktur\n- Karrierelevel und Gehaltsspanne\n\n⚙️ SETUP:\n1. Wählen Sie Ihre Personio-Verbindung aus\n2. Die Job-ID wird automatisch aus dem vorherigen Schritt übernommen\n\n💡 PERSONALISIERUNG:\n- Keine Änderungen nötig - funktioniert automatisch\n- Stellen Sie sicher, dass Job-IDs im Kalender korrekt sind\n\n⚡ PARALLEL-AUSFÜHRUNG:\nDieser Schritt läuft parallel zum Kandidaten-Abruf für maximale Geschwindigkeit!",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "getJobDetails",
          "actionId": "02c48dbd-fb47-48bc-9afa-786c6ce5fec5",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "64776bd9-4c58-42d0-8301-2c8a4566e68c",
            "fields": {
              "id": {
                "mode": "manual",
                "value": "{{extractCandidateId.output.jobId}}"
              }
            }
          }
        },
        "id": "12ab5338-49f7-470c-80b8-23fc30a8e51c",
        "position": {
          "x": 1120,
          "y": 8570
        }
      },
      {
        "type": "code",
        "data": {
          "comment": "🔍 DATEN-EXTRAKTION: IDs und Informationen aus Kalender-Event\n\n📋 BESCHREIBUNG:\nExtrahiert automatisch wichtige Informationen aus dem Kalender-Event:\n- Kandidaten-ID (für Personio-Abfrage)\n- Job-ID (für Stellenbeschreibung)\n- Interviewer-E-Mail (aus Teilnehmerliste)\n- Event-Titel und -Datum\n\n⚙️ SETUP:\nErwartet folgendes Format in der Event-Beschreibung:\n\"Candidate ID: 12345\"\n\"Job ID: 67890\"\n\n💡 PERSONALISIERUNG:\n- Passen Sie die RegEx-Muster an Ihr Format an (Zeile 6 & 11)\n- Ändern Sie die Teilnehmer-Logik (z.B. bestimmte E-Mail-Domain)\n- Fügen Sie weitere Extraktionen hinzu (z.B. Raumnummer, Remote-Link)\n\n📤 OUTPUT:\n- candidateId: Personio Kandidaten-ID\n- jobId: Personio Job-ID\n- interviewerEmail: E-Mail des Interviewers\n- eventTitle: Kalender-Event-Titel\n- eventDate: Datum/Zeit des Interviews",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "name": "Extract Candidate ID",
          "slug": "extractCandidateId",
          "language": "javascript",
          "code": "// Extract candidate ID from calendar event description\n// Expected format: \"Interview: [Candidate Name] - Candidate ID: 12345\"\nconst description = newInterviewEvent.output.description || '';\n\n// Try to extract candidate ID from description\nconst candidateIdMatch = description.match(/Candidate ID:\\s*(\\d+)/i);\nconst candidateId = candidateIdMatch ? candidateIdMatch[1] : null;\n\n// Try to extract job ID from description\nconst jobIdMatch = description.match(/Job ID:\\s*(\\d+)/i);\nconst jobId = jobIdMatch ? jobIdMatch[1] : null;\n\n// Extract interviewer email from attendees\nconst attendees = newInterviewEvent.output.attendees || [];\nconst interviewerEmail = attendees.length > 0 ? attendees[0].email : null;\n\nreturn {\n candidateId: candidateId,\n jobId: jobId,\n interviewerEmail: interviewerEmail,\n eventTitle: newInterviewEvent.output.summary || '',\n eventDate: newInterviewEvent.output.start?.dateTime || newInterviewEvent.output.start?.date || ''\n};"
        },
        "id": "4aca0727-3980-4d88-a84b-9d5eec915401",
        "position": {
          "x": 560,
          "y": 8380
        }
      },
      {
        "type": "agent",
        "data": {
          "comment": "🤖 KI-AGENT: Personalisierter Interview-Fragenkatalog\n\n📋 BESCHREIBUNG:\nEin KI-Agent erstellt einen maßgeschneiderten Fragenkatalog basierend auf:\n- Kandidatenprofil und Erfahrung\n- Stellenanforderungen\n- Interview-Kontext\n\nDer Katalog enthält 3 Kategorien:\n1. Fachkompetenz (5-7 Fragen)\n2. Soft Skills (4-6 Fragen)\n3. Cultural Fit (3-5 Fragen)\n\n⚙️ SETUP:\n- Keine Konfiguration nötig - nutzt Standard-KI-Modell\n- Optional: Wählen Sie ein anderes Modell für bessere/schnellere Ergebnisse\n\n💡 PERSONALISIERUNG:\nPassen Sie den Prompt an (Zeile 3 im Prompt-Feld):\n- Ändern Sie Anzahl der Fragen pro Kategorie\n- Fügen Sie weitere Kategorien hinzu (z.B. \"Technische Deep-Dive\")\n- Passen Sie den Ton an (formell/informell)\n- Fügen Sie Unternehmens-spezifische Werte hinzu\n- Ändern Sie die Sprache (Deutsch/Englisch)\n\n🎯 BEISPIEL-ANPASSUNGEN:\n- Für Tech-Roles: Fügen Sie \"Coding-Aufgaben\" hinzu\n- Für Leadership: Mehr Fokus auf \"Führungserfahrung\"\n- Für Junior-Positionen: Fokus auf \"Lernbereitschaft\"",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "generateInterviewQuestions",
          "assistantId": null,
          "mode": "create",
          "name": "Interview Questions Generator",
          "prompt": {
            "mode": "manual",
            "value": "Du bist ein erfahrener HR-Experte, der personalisierte Interview-Fragenkataloge erstellt.\n\nDeine Aufgabe ist es, basierend auf den folgenden Informationen einen strukturierten Fragenkatalog für ein Interview zu erstellen:\n\n**Kandidaten-Informationen:**\n{{getCandidateDetails.output}}\n\n**Stellenbeschreibung:**\n{{getJobDetails.output}}\n\n**Interview-Details:**\n- Datum: {{extractCandidateId.output.eventDate}}\n- Titel: {{extractCandidateId.output.eventTitle}}\n\nErstelle einen umfassenden Fragenkatalog, der folgende Kategorien abdeckt:\n\n1. **Fachkompetenz** (5-7 Fragen)\n   - Technische Fähigkeiten und Erfahrungen\n   - Relevante Projekte und Erfolge\n   - Branchenspezifisches Wissen\n\n2. **Soft Skills** (4-6 Fragen)\n   - Kommunikationsfähigkeit\n   - Teamarbeit und Zusammenarbeit\n   - Problemlösungskompetenz\n   - Führungsqualitäten (falls relevant)\n\n3. **Cultural Fit** (3-5 Fragen)\n   - Werte und Arbeitsweise\n   - Motivation für die Position\n   - Langfristige Karriereziele\n   - Passung zur Unternehmenskultur\n\nFormatiere die Fragen klar strukturiert mit Überschriften für jede Kategorie. Passe die Fragen spezifisch an die Stelle und den Kandidaten an."
          },
          "attachmentIds": [],
          "output": "structured",
          "connectionOverrides": {},
          "outputSchema": [
            {
              "id": "0c662a5f-8137-4a2a-9db6-7e8261eb0728",
              "name": "questions_catalog",
              "description": "Der vollständige Fragenkatalog mit allen Kategorien",
              "type": "string",
              "required": true
            },
            {
              "id": "d6cf9238-2379-4bde-879c-8024a3e72bd2",
              "name": "success",
              "description": "Ob die Erstellung erfolgreich war",
              "type": "boolean",
              "required": true
            }
          ],
          "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
          "tools": [],
          "maxSteps": 25
        },
        "id": "01d094f6-dc8b-4dc5-a9f7-a71a56895f0d",
        "position": {
          "x": 1680,
          "y": 8380
        }
      },
      {
        "type": "trigger",
        "data": {
          "comment": "🎯 WORKFLOW-START: Interview-Termin Trigger\n\n📋 BESCHREIBUNG:\nStartet automatisch, wenn ein neuer Interview-Termin im Google Calendar erstellt wird.\n\n⚙️ SETUP:\n1. Klicken Sie auf diesen Block\n2. Konfigurieren Sie die Suchanfrage (z.B. \"Interview:\" oder \"Bewerbungsgespräch\")\n3. Wählen Sie den gewünschten Kalender aus\n4. Optional: Filtern Sie nach bestimmten Kalendern oder Zeiträumen\n\n💡 PERSONALISIERUNG:\n- Passen Sie die Suchanfrage an Ihre Namenskonvention an\n- Verwenden Sie mehrere Workflows für verschiedene Interview-Typen\n- Kombinieren Sie mit Kalender-Labels oder -Kategorien\n\n📝 WICHTIG:\nStellen Sie sicher, dass Interview-Termine folgende Informationen in der Beschreibung enthalten:\n- \"Candidate ID: [Personio-ID]\"\n- \"Job ID: [Personio-Job-ID]\"",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "newInterviewEvent",
          "kind": "integration",
          "integrationId": "f8588690-d4e7-476b-9550-31a607880430",
          "triggerId": "2c1951ac-dd75-467b-9250-e25ab23497d2",
          "connectionId": null,
          "params": []
        },
        "id": "5d85c2cf-4cac-4a25-a0f2-e21d3bb8fd59",
        "position": {
          "x": 20,
          "y": 8380
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📧 E-MAIL-BENACHRICHTIGUNG: Interviewer informieren\n\n📋 BESCHREIBUNG:\nSendet automatisch eine professionelle E-Mail an den Interviewer mit:\n- Personalisiertem Betreff (Kandidat + Datum)\n- Begrüßung und Interview-Details\n- Zusammenfassung der wichtigsten Kandidaten-Infos\n- Direkter Link zur Notion-Seite mit Fragenkatalog\n- HTML-formatiert für professionelle Darstellung\n\n⚙️ SETUP:\n1. Verbinden Sie Ihr Gmail-Konto\n2. Die Empfänger-Adresse wird automatisch aus dem Kalender-Event extrahiert\n\n💡 PERSONALISIERUNG:\nPassen Sie die E-Mail an:\n\nBETREFF (mailSubject Prompt):\n- Ändern Sie den Ton (formell/informell)\n- Fügen Sie Firma/Abteilung hinzu\n- Verwenden Sie Emojis für bessere Sichtbarkeit\n\nINHALT (mailBody Prompt):\n- Passen Sie die Struktur an (mehr/weniger Details)\n- Fügen Sie Unternehmens-Branding hinzu\n- Ändern Sie die Sprache\n- Fügen Sie zusätzliche Links hinzu (Zoom, Raumbuchung)\n- Ändern Sie die Grußformel\n\nEMPFÄNGER:\n- Ändern Sie zu fester E-Mail: value = \"hr@firma.de\"\n- CC hinzufügen: Fügen Sie \"cc\" Feld hinzu\n\n🎯 BEISPIEL-ANPASSUNGEN:\n- Multi-Empfänger: \"interviewer1@firma.de, interviewer2@firma.de\"\n- Template mit Logo: Fügen Sie <img> Tag im HTML hinzu",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "sendNotificationEmail",
          "actionId": "7e540add-fe6d-44c2-b224-f7c384573cdf",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "mailBody": {
                "mode": "prompt",
                "prompt": "Erstelle eine professionelle E-Mail in HTML-Format mit folgenden Informationen:\n\n- Begrüßung des Interviewers\n- Hinweis auf das bevorstehende Interview am {{extractCandidateId.output.eventDate}}\n- Kurze Zusammenfassung der wichtigsten Kandidaten-Informationen aus {{getCandidateDetails.output}}\n- Link zur Notion-Seite mit den Interview-Fragen: {{createNotionPage.output}}\n- Professioneller Abschluss\n\nVerwende HTML-Tags für Formatierung: <b> für fett, <i> für kursiv, <br> für Zeilenumbrüche, <ul><li> für Listen."
              },
              "mailSubject": {
                "mode": "prompt",
                "prompt": "Erstelle einen professionellen E-Mail-Betreff für die Interview-Vorbereitung mit Kandidat {{getCandidateDetails.output}} am {{extractCandidateId.output.eventDate}}"
              },
              "mailRecipient": {
                "mode": "manual",
                "value": "{{extractCandidateId.output.interviewerEmail}}"
              }
            }
          }
        },
        "id": "2d27fd1b-0a3c-40a9-a8be-87c55ab0a253",
        "position": {
          "x": 2800,
          "y": 8380
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📝 NOTION-SPEICHERUNG: Interview-Notizen erstellen\n\n📋 BESCHREIBUNG:\nErstellt automatisch eine neue Notion-Seite mit:\n- Aussagekräftigem Titel (Kandidat + Position + Datum)\n- Vollständigem Fragenkatalog als Inhalt\n- 📝 Icon für bessere Übersicht\n- Speicherung in Ihrem persönlichen Workspace\n\n⚙️ SETUP:\n1. Verbinden Sie Ihr Notion-Konto\n2. Die Seite wird automatisch in Ihrem Root-Workspace erstellt\n\n💡 PERSONALISIERUNG:\nPassen Sie die Speicherung an:\n- Ändern Sie \"parentId\" auf eine bestimmte Notion-Datenbank oder -Seite\n- Ändern Sie das Icon (z.B. 🎯, 💼, 👥)\n- Fügen Sie Properties hinzu (z.B. Status, Interviewer, Datum)\n- Ändern Sie das Template im \"content\"-Feld\n\n🎯 BEISPIEL-ANPASSUNGEN:\n- Speichern in Interview-Datenbank: parentId = \"[Ihre Datenbank-ID]\"\n- Strukturierte Properties: Fügen Sie \"properties\" Feld hinzu\n- Cover-Bild: Fügen Sie \"cover\" URL hinzu",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "createNotionPage",
          "actionId": "7dba4335-2c76-4648-82ab-5a731759245d",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "icon": {
                "mode": "manual",
                "value": "📝"
              },
              "title": {
                "mode": "prompt",
                "prompt": "Erstelle einen aussagekräftigen Titel für die Interview-Notizen basierend auf: Kandidat {{getCandidateDetails.output}}, Position {{getJobDetails.output}}, Datum {{extractCandidateId.output.eventDate}}"
              },
              "content": {
                "mode": "manual",
                "value": "{{generateInterviewQuestions.output.structured.questions_catalog}}"
              },
              "parentId": {
                "mode": "manual",
                "value": "workspace"
              },
              "parentType": {
                "mode": "manual",
                "value": "page_id"
              },
              "createInPersonalRoot": {
                "mode": "manual",
                "value": "{{ true }}"
              }
            }
          }
        },
        "id": "32d7a3e9-c77e-4f4f-92ac-e8fc48a24124",
        "position": {
          "x": 2240,
          "y": 8380
        }
      }
    ],
    "edges": [
      {
        "id": "0bc96038-7880-492c-8de4-e79b3f839caf",
        "source": "4aca0727-3980-4d88-a84b-9d5eec915401",
        "target": "df192e2f-044b-4d26-9fcf-1226d0ece583",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "aae5545b-6e9c-4fdf-9728-f059792afd20",
        "source": "5d85c2cf-4cac-4a25-a0f2-e21d3bb8fd59",
        "target": "4aca0727-3980-4d88-a84b-9d5eec915401",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "73f1c7d6-8ed2-4e08-bab8-10c3210f462c",
        "source": "4aca0727-3980-4d88-a84b-9d5eec915401",
        "target": "12ab5338-49f7-470c-80b8-23fc30a8e51c",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "e1f1e01c-1a1c-441a-8469-75685937d9b9",
        "source": "df192e2f-044b-4d26-9fcf-1226d0ece583",
        "target": "01d094f6-dc8b-4dc5-a9f7-a71a56895f0d",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "92e79fa8-f81c-4399-b1aa-e70e19a282a3",
        "source": "32d7a3e9-c77e-4f4f-92ac-e8fc48a24124",
        "target": "2d27fd1b-0a3c-40a9-a8be-87c55ab0a253",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "49322de2-a3c4-4e0d-9f32-2dd8dcf4017d",
        "source": "12ab5338-49f7-470c-80b8-23fc30a8e51c",
        "target": "01d094f6-dc8b-4dc5-a9f7-a71a56895f0d",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "825fca2d-e073-451f-9a6d-8c8731f6c299",
        "source": "01d094f6-dc8b-4dc5-a9f7-a71a56895f0d",
        "target": "32d7a3e9-c77e-4f4f-92ac-e8fc48a24124",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      }
    ]
  }
}