{
  "schema": "ldwf",
  "version": 1,
  "name": "Content Repurposing",
  "meta": {
    "exportedAt": "2025-11-16T16:52:32.840Z",
    "exporter": "client"
  },
  "graph": {
    "nodes": [
      {
        "type": "agent",
        "data": {
          "comment": "🧠 SCHRITT 2: KI-Strategie-Agent\n\n🎯 BESCHREIBUNG:\nDieser LLM-Agent analysiert den Blog-Post und entwickelt 3-5 kreative Repurposing-Strategien für verschiedene Plattformen und Formate.\n\n⚙️ WIE ES FUNKTIONIERT:\n- Erhält den kompletten Blog-Post vom Webhook\n- Analysiert Inhalt, Thema und Kernbotschaften\n- Schlägt plattformspezifische Content-Formate vor (LinkedIn, Twitter, Newsletter, Video, etc.)\n- Gibt für jede Idee konkrete Strategie-Empfehlungen\n\n📊 OUTPUT:\nStrukturierte Daten mit Array von Repurposing-Ideen, die an den nächsten Agent weitergegeben werden.\n\n🎨 PERSONALISIERUNG:\n- Passen Sie den Prompt an Ihre Zielgruppe an\n- Fügen Sie spezifische Plattformen hinzu/entfernen Sie welche\n- Definieren Sie Ihren Brand Voice und Tone of Voice\n- Geben Sie Content-Richtlinien vor (z.B. \"Immer mit Frage starten\")\n- Ändern Sie die Anzahl der Vorschläge (aktuell 3-5)\n\n💡 TIPP:\nFügen Sie Brand Guidelines als Knowledge Base hinzu, damit der Agent Ihren Stil besser versteht.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "repurposingStrategist",
          "assistantId": null,
          "mode": "create",
          "name": "Content Repurposing Strategist",
          "prompt": {
            "mode": "manual",
            "value": "You are a creative content strategist. Analyze the following blog post data and suggest 3-5 creative ways to repurpose it for different platforms and formats.\n\nBlog Post Data:\n{{newBlogPost.output}}\n\nFor each repurposing idea, provide:\n1. Platform/Format (e.g., LinkedIn post, Twitter thread, Newsletter section, Video script, Instagram carousel)\n2. Strategy: Brief explanation of the approach\n3. Key points to emphasize\n4. Recommended tone and style\n\nBe creative and consider different audience segments and content formats. Think about how to maximize reach and engagement across multiple channels."
          },
          "attachmentIds": [],
          "output": "structured",
          "connectionOverrides": {},
          "outputSchema": [
            {
              "id": "6835cf3c-a9c2-4908-8253-99ab16c6ad96",
              "name": "output",
              "description": "Complete repurposing strategy analysis",
              "type": "string",
              "required": true
            },
            {
              "id": "5183db23-752f-4790-8345-b2ec01e65742",
              "name": "success",
              "description": "Whether analysis was successful",
              "type": "boolean",
              "required": true
            },
            {
              "id": "1690e8bc-a3a8-411e-8b67-34951d4e30ba",
              "name": "repurposing_ideas",
              "description": "Array of repurposing suggestions",
              "type": "array",
              "required": true
            }
          ],
          "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
          "tools": [],
          "maxSteps": 25
        },
        "id": "eaa52df4-e817-421a-9ab3-d169be098dd5",
        "position": {
          "x": 560,
          "y": 7810
        }
      },
      {
        "type": "loop_end",
        "data": {
          "comment": "✅ SCHRITT 4c: Loop-Ende\n\n🎯 BESCHREIBUNG:\nMarkiert das Ende der Loop-Iteration. Alle Drafts wurden verarbeitet und Tasks wurden erstellt.\n\n⚙️ WIE ES FUNKTIONIERT:\n- Wartet, bis alle Iterationen abgeschlossen sind\n- Sammelt keine Daten (Loop End hat keinen Output)\n- Gibt die Kontrolle an den nächsten Schritt weiter\n\n🎨 ERROR HANDLING:\n- Aktuell: \"continue\" - Workflow läuft weiter, auch wenn einzelne Iterationen fehlschlagen\n- Alternative: \"stop\" - Workflow stoppt bei erstem Fehler\n\n💡 WICHTIG:\nDaten aus dem Loop (einzelne Drafts) sind NACH dem Loop-End nicht mehr verfügbar. Wenn Sie diese später brauchen, speichern Sie sie innerhalb des Loops.",
          "executionId": null,
          "errorHandling": {
            "strategy": "continue"
          },
          "name": "Loop End",
          "slug": "draftLoopEnd",
          "loopEndSlug": "draftLoop"
        },
        "id": "3eee108c-0683-4bb9-815e-7e3e02a54cb3",
        "position": {
          "x": 2800,
          "y": 7810
        }
      },
      {
        "type": "trigger",
        "data": {
          "comment": "📌 SCHRITT 1: CMS-Webhook-Integration\n\n🎯 BESCHREIBUNG:\nDieser Webhook empfängt automatisch Daten von Ihrem CMS, sobald ein neuer Blog-Post veröffentlicht wird.\n\n⚙️ SETUP:\n1. Kopieren Sie die Webhook-URL aus diesem Trigger\n2. Gehen Sie zu den Webhook-Einstellungen Ihres CMS (WordPress, Webflow, Contentful, etc.)\n3. Fügen Sie die URL als \"Post Published\" oder \"New Content\" Webhook ein\n4. Konfigurieren Sie die Payload so, dass sie folgende Daten sendet:\n   - title (Blog-Post-Titel)\n   - content (Vollständiger Artikel-Text)\n   - images (Array mit Bild-URLs oder Beschreibungen)\n   - author, publishedDate (optional)\n\n🔒 SICHERHEIT:\nFügen Sie optional ein Secret hinzu, um sicherzustellen, dass nur Ihr CMS den Workflow triggern kann.\n\n🎨 PERSONALISIERUNG:\n- Passen Sie die erwarteten Felder an Ihr CMS-Datenmodell an\n- Fügen Sie zusätzliche Metadaten hinzu (Kategorie, Tags, SEO-Daten)\n- Verwenden Sie Webhook-Filter, um nur bestimmte Post-Typen zu verarbeiten",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "newBlogPost",
          "name": "New Blog Post Published",
          "kind": "webhook"
        },
        "id": "89190385-e208-4411-9344-36d04a3db1d5",
        "position": {
          "x": 20,
          "y": 7810
        }
      },
      {
        "type": "loop",
        "data": {
          "comment": "🔁 SCHRITT 4a: Loop-Start\n\n🎯 BESCHREIBUNG:\nDieser Loop iteriert durch alle erstellten Content-Drafts und verarbeitet jeden einzeln.\n\n⚙️ WIE ES FUNKTIONIERT:\n- Empfängt das Array mit allen Drafts vom Content-Writer-Agent\n- Führt die inneren Schritte (Task-Erstellung) für jeden Draft aus\n- Verarbeitet bis zu 20 Drafts (anpassbar)\n\n📊 LOOP-VARIABLEN (nur innerhalb des Loops verfügbar):\n- {{draftLoop.output.currentItem}} - Der aktuelle Draft\n- {{draftLoop.output.currentIndex}} - Index (0, 1, 2, ...)\n- {{draftLoop.output.total}} - Gesamtanzahl der Drafts\n\n🎨 PERSONALISIERUNG:\n- Ändern Sie maxIterations, wenn Sie mehr als 20 Drafts erwarten\n- Aktivieren Sie concurrency:true für parallele Verarbeitung (schneller, aber weniger kontrolliert)\n\n⚠️ WICHTIG:\nAlle Nodes zwischen Loop-Start und Loop-End sind Teil der Iteration.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "name": "Process Each Draft",
          "slug": "draftLoop",
          "loopArrayValue": "{{draftCreator.output.structured.drafts}}",
          "maxIterations": 20,
          "concurrency": false
        },
        "id": "44cc4a71-df82-4f7f-91f8-be0768d2dae6",
        "position": {
          "x": 1680,
          "y": 7810
        }
      },
      {
        "type": "agent",
        "data": {
          "comment": "✍️ SCHRITT 3: KI-Content-Writer-Agent\n\n🎯 BESCHREIBUNG:\nDieser LLM-Agent erstellt konkrete, publikationsreife Content-Drafts basierend auf den Strategievorschlägen des ersten Agents.\n\n⚙️ WIE ES FUNKTIONIERT:\n- Empfängt die Repurposing-Strategien vom vorherigen Agent\n- Hat Zugriff auf den Original-Blog-Post\n- Schreibt für jede Strategie einen vollständigen, einsatzbereiten Draft\n- Fügt plattformspezifische Elemente hinzu (Hashtags, CTAs, Formatierung)\n\n📊 OUTPUT:\nArray mit fertigen Content-Drafts, die direkt verwendet oder minimal bearbeitet werden können.\n\n🎨 PERSONALISIERUNG:\n- Definieren Sie Ihren Schreibstil (formal, casual, humorvoll, etc.)\n- Geben Sie Emoji-Nutzung vor oder verbieten Sie diese\n- Legen Sie Längen-Limits fest (z.B. \"LinkedIn max 1300 Zeichen\")\n- Fügen Sie Standard-CTAs oder Disclaimer hinzu\n- Definieren Sie bevorzugte Hashtag-Strategien\n\n💡 TIPP:\nFügen Sie Beispiel-Posts als Knowledge Base hinzu, damit der Agent Ihren Stil lernt.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "draftCreator",
          "assistantId": null,
          "mode": "create",
          "name": "Content Draft Creator",
          "prompt": {
            "mode": "manual",
            "value": "You are an expert content writer. Based on the repurposing strategies provided, create concrete, ready-to-use drafts for each suggested content format.\n\nOriginal Blog Post:\n{{newBlogPost.output}}\n\nRepurposing Strategies:\n{{repurposingStrategist.output.structured.output}}\n\nFor each repurposing idea, create:\n1. A complete, polished draft that's ready to publish (or nearly ready with minor edits)\n2. Relevant hashtags or keywords where applicable\n3. Call-to-action appropriate for the platform\n4. Any platform-specific formatting recommendations\n\nMake the drafts engaging, on-brand, and optimized for each specific platform. Each draft should stand alone as a complete piece of content."
          },
          "attachmentIds": [],
          "output": "structured",
          "connectionOverrides": {},
          "outputSchema": [
            {
              "id": "6de821ec-c055-4a58-86ed-5841a457ada2",
              "name": "output",
              "description": "All created content drafts",
              "type": "string",
              "required": true
            },
            {
              "id": "3672e926-da3d-4f22-9505-44426302aa46",
              "name": "success",
              "description": "Whether draft creation was successful",
              "type": "boolean",
              "required": true
            },
            {
              "id": "e7489cd5-01de-4228-99af-68e79779d536",
              "name": "drafts",
              "description": "Array of content drafts with metadata",
              "type": "array",
              "required": true
            }
          ],
          "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
          "tools": [],
          "maxSteps": 25
        },
        "id": "f7691218-f4cd-41fb-b0ba-d7891793361a",
        "position": {
          "x": 1120,
          "y": 7810
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📋 SCHRITT 4b: Asana-Task-Erstellung (innerhalb Loop)\n\n🎯 BESCHREIBUNG:\nErstellt für jeden Content-Draft automatisch eine Asana-Task, die Ihr Team bearbeiten kann.\n\n⚙️ SETUP:\n1. Verbinden Sie Ihr Asana-Konto im Workflow\n2. Wählen Sie Workspace und Projekt aus (optional, kann auch im Feld konfiguriert werden)\n3. Der Task-Name wird automatisch per KI generiert basierend auf Platform/Format\n4. Der komplette Draft-Inhalt wird in den Task-Notizen gespeichert\n\n📊 WAS PASSIERT:\n- Pro Draft wird eine separate Task erstellt\n- Tasks enthalten den fertigen Content im Notiz-Feld\n- Tasks können direkt zugewiesen und bearbeitet werden\n\n🎨 PERSONALISIERUNG:\n- Setzen Sie projectId auf ein spezifisches Projekt\n- Weisen Sie Tasks automatisch zu (assignee-Feld)\n- Fügen Sie Due Dates hinzu (z.B. +3 Tage)\n- Setzen Sie Follower (followers-Feld)\n- Nutzen Sie htmlNotes für formatierte Notizen\n- Taggen Sie Tasks mit Custom Fields\n\n🔄 ALTERNATIVEN:\nStatt Asana können Sie auch Linear, Jira, Notion, monday.com oder Microsoft Planner verwenden.",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "createTaskAsana",
          "actionId": "4ebba7b1-7c04-4e1e-a219-bcf1e3ccb1f2",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "name": {
                "mode": "prompt",
                "prompt": "Create a task name based on the current draft item platform/format"
              },
              "dueAt": {
                "mode": "none"
              },
              "dueOn": {
                "mode": "none"
              },
              "notes": {
                "mode": "manual",
                "value": "{{draftLoop.output.currentItem}}"
              },
              "parent": {
                "mode": "none"
              },
              "startAt": {
                "mode": "none"
              },
              "startOn": {
                "mode": "none"
              },
              "assignee": {
                "mode": "none"
              },
              "completed": {
                "mode": "none"
              },
              "followers": {
                "mode": "none"
              },
              "htmlNotes": {
                "mode": "none"
              },
              "projectId": {
                "mode": "none"
              },
              "workspace": {
                "mode": "none"
              },
              "customType": {
                "mode": "none"
              },
              "customFields": {
                "mode": "none"
              },
              "approvalStatus": {
                "mode": "none"
              },
              "assigneeSection": {
                "mode": "none"
              },
              "resourceSubtype": {
                "mode": "none"
              },
              "customTypeStatusOption": {
                "mode": "none"
              }
            }
          }
        },
        "id": "4f7b560c-4b9f-4c18-b0ad-d912c38ebf1c",
        "position": {
          "x": 2240,
          "y": 7810
        }
      },
      {
        "type": "action",
        "data": {
          "comment": "📢 SCHRITT 5: Team-Benachrichtigung\n\n🎯 BESCHREIBUNG:\nSendet eine zusammenfassende Benachrichtigung an Ihren Team-Chat mit allen wichtigen Informationen.\n\n⚙️ SETUP:\n1. Verbinden Sie Ihr Slack-Konto\n2. Wählen Sie den gewünschten Channel aus (z.B. #content-team, #marketing)\n3. Die Nachricht wird automatisch per KI generiert und enthält:\n   - Blog-Post-Titel\n   - Anzahl der erstellten Drafts\n   - Übersicht der Repurposing-Strategien\n   - Hinweis auf die Asana-Tasks\n\n📊 WAS PASSIERT:\n- Team wird sofort informiert, wenn neue Content-Drafts bereitstehen\n- Alle relevanten Informationen auf einen Blick\n- Direkter Link zur Weiterverarbeitung\n\n🎨 PERSONALISIERUNG:\n- Ändern Sie den Prompt für anderen Nachrichtenstil\n- Fügen Sie @mentions hinzu (z.B. @content-manager)\n- Nutzen Sie mrkdwn:true für Markdown-Formatierung\n- Senden Sie an mehrere Channels (duplizieren Sie diesen Node)\n- Fügen Sie Emojis oder Custom-Branding hinzu\n\n🔄 ALTERNATIVEN:\n- Microsoft Teams statt Slack\n- E-Mail-Benachrichtigung (Gmail/Outlook)\n- Push-Notification\n- Webhook an anderes System",
          "executionId": null,
          "errorHandling": {
            "strategy": "stop"
          },
          "slug": "notifyTeam",
          "actionId": "26a39d11-d5fe-4f46-b776-973dd20b8147",
          "config": {
            "connectionId": null,
            "requiresConfirmation": false,
            "modelId": "c968689a-c0d9-49de-aa76-b10ed15ebb0e",
            "fields": {
              "text": {
                "mode": "prompt",
                "prompt": "Create a comprehensive notification message summarizing:\n1. The blog post that was published (title from webhook data)\n2. Number of content drafts created\n3. Brief overview of the repurposing strategies used\n4. Mention that tasks have been created in Asana for the team to review\n\nMake it friendly and actionable. Use the data from: {{newBlogPost.output}}, {{repurposingStrategist.output.structured}}, and {{draftCreator.output.structured}}"
              },
              "parse": {
                "mode": "none"
              },
              "mrkdwn": {
                "mode": "none"
              },
              "channel": {
                "mode": "none"
              },
              "icon_url": {
                "mode": "none"
              },
              "username": {
                "mode": "none"
              },
              "thread_ts": {
                "mode": "none"
              },
              "icon_emoji": {
                "mode": "none"
              },
              "link_names": {
                "mode": "none"
              },
              "unfurl_links": {
                "mode": "none"
              },
              "unfurl_media": {
                "mode": "none"
              },
              "reply_broadcast": {
                "mode": "none"
              }
            }
          }
        },
        "id": "9a3747b9-f7f7-4c87-a3ca-f453a7548845",
        "position": {
          "x": 3344,
          "y": 7810
        }
      }
    ],
    "edges": [
      {
        "id": "e5f48a47-da10-4f56-bc86-ef6d83d4b0a5",
        "source": "3eee108c-0683-4bb9-815e-7e3e02a54cb3",
        "target": "9a3747b9-f7f7-4c87-a3ca-f453a7548845",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "474c147d-8856-4fdf-be1f-cf22a088c5e6",
        "source": "89190385-e208-4411-9344-36d04a3db1d5",
        "target": "eaa52df4-e817-421a-9ab3-d169be098dd5",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "b37a7e64-be4e-4872-b15c-f9130219b550",
        "source": "eaa52df4-e817-421a-9ab3-d169be098dd5",
        "target": "f7691218-f4cd-41fb-b0ba-d7891793361a",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "33cc028e-9cd6-4cb5-b34e-c5fadf147eb5",
        "source": "f7691218-f4cd-41fb-b0ba-d7891793361a",
        "target": "44cc4a71-df82-4f7f-91f8-be0768d2dae6",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "ccfee0ca-660b-4e43-837f-28b4eaa280a7",
        "source": "4f7b560c-4b9f-4c18-b0ad-d912c38ebf1c",
        "target": "3eee108c-0683-4bb9-815e-7e3e02a54cb3",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      },
      {
        "id": "50d85233-6c08-4993-9143-653a09d737d8",
        "source": "44cc4a71-df82-4f7f-91f8-be0768d2dae6",
        "target": "4f7b560c-4b9f-4c18-b0ad-d912c38ebf1c",
        "animated": false,
        "sourceHandle": "output-success",
        "targetHandle": "input-default",
        "conditionId": null
      }
    ]
  }
}