diff --git a/Kapitel 10/Premium Rohtext.md b/Kapitel 10/Premium Rohtext.md index 834df9a..0cd7e89 100644 --- a/Kapitel 10/Premium Rohtext.md +++ b/Kapitel 10/Premium Rohtext.md @@ -717,3 +717,138 @@ Diese Ausgabe kann direkt an den **Text Manipulation Node** weitergegeben oder m --- +## KI-Erweiterung des bestehenden Workflows + +Der im Free-Kapitel erstellte Workflow **„Stream-Reminder + Social Post“** übernimmt bereits die Planung und Veröffentlichung automatischer Stream-Ankündigungen. +Er verarbeitet Streamdaten, erstellt daraus Beiträge und veröffentlicht sie über die angebundenen Plattformen. + +In diesem Premium-Abschnitt erweitern wir genau diesen Workflow um **eine KI-basierte Textoptimierung** über den Node **`n8n-nodes-openrouter`**. +Damit kann n8n künftig selbstständig aus vorhandenen Daten (z. B. Streamtitel, Kategorie, Datum) automatisch ansprechende Formulierungen, passende Hashtags und prägnante Kurztexte erzeugen – vollautomatisch und ohne manuelles Eingreifen. + +Diese KI-Erweiterung ersetzt keine bestehenden Bestandteile, sondern ergänzt sie direkt an einer definierten Stelle im bestehenden Ablauf: +- Der **OpenRouter-Node** wird **nach der Datenermittlung** eingefügt, um aus den Streaminformationen optimierte Social-Posts zu generieren. +- Die erzeugten Texte können anschließend direkt an die bestehenden Veröffentlichungs-Nodes übergeben werden. + +👉 Screenshot geeignet: *Workflow-Übersicht mit zusätzlich eingefügtem OpenRouter-Node hinter der Datenermittlung.* + +> [!NOTE] +> Der bestehende Aufbau bleibt unverändert. +> Wir fügen ausschließlich den OpenRouter-Node hinzu und konfigurieren ihn so, dass er bestehende Felder automatisch weiterverarbeitet und optimiert. + +> [!TIP] +> Diese Erweiterung ist ein erster Schritt zur vollständigen KI-Automatisierung von Social-Media-Abläufen. +> Spätere Kapitel bauen darauf auf und erweitern die Integration um kontextabhängige Textgenerierung und mehrsprachige Posts. + +### Schritt 1 – OpenRouter-Node hinzufügen und konfigurieren + +Der **OpenRouter-Node** wird direkt hinter dem IF-Node *„Stream prüfen“* eingefügt. +Er erzeugt aus den Twitch-Daten (`title`, `startIso`, `kategroie`) automatisch einen passenden Social-Media-Post. + +| Einstellung | Wert | +|--------------|------| +| **Credential to connect with** | *OpenRouter account* | +| **Operation** | *Chat* | +| **Model Name or ID** | `OpenAI: GPT-5` | +| **System Prompt** | `You are a helpful assistant...` *(Standardtext belassen)* | +| **Message** | Siehe unten | +| **Temperature** | `0.9` | + +**Prompt im Feld „Message“:** + +``` +Erstelle einen Social-Media-Post auf Deutsch für folgendes Event. +Stil: freundlich, prägnant. Maximal 5 Hashtags mit größter Wirkung nach Analyse + +Titel: {{$json["title"]}} +Datum: {{ $json.startIso }} -> Umwandeln in Datum und Uhrzeit in Lokale Deutsche Zeit. Du brauchst nur die Uhrzeit nennen. +Kategorie: {{ $json.kategroie }} + +Gib nur den fertigen Posttext zurück. +``` + +👉 **Screenshot geeignet:** Node-Editor mit eingetragenem Prompt und Modell „OpenAI: GPT-5“ + +Der Node erzeugt eine einzige Ausgabevariable: +`{{$json["response"]}}` – sie enthält den vollständigen Text, der anschließend an die If-Prüfung übergeben wird. + + +### Schritt 2 – KI-Antwort prüfen + +Direkt hinter dem OpenRouter-Node wird ein **IF-Node** eingefügt, um leere Antworten abzufangen. + +| Feld | Wert | +|------|------| +| **Left Value** | `={{ $json.response }}` | +| **Operator** | *String → Is Empty* | + +Damit prüft n8n, ob das Feld `response` leer ist. +Nur wenn es wirklich Text enthält, läuft der KI-Zweig weiter. + +👉 **Screenshot geeignet:** IF-Node mit Bedingung „response is empty“ + +- **TRUE (leer):** → *Download a file* (Fallback) +- **FALSE (Text vorhanden):** → *Edit Fields* (KI-Text übernehmen) + + +### Schritt 3 – KI-Text übernehmen + +Der **Set-Node „Edit Fields“** wandelt die KI-Antwort in das vom Rest des Workflows genutzte Feld `postText` um. + +| Feldname | Wert | +|-----------|------| +| **postText** | `={{ $json.response }}` | + +Damit erhält der nächste Node dieselbe Datenstruktur wie zuvor. + +👉 **Screenshot geeignet:** Node-Editor mit Feldzuweisung `postText = {{$json.response}}` + + +### Schritt 4 – Fallback-Zweig + +Wenn der IF-Node auf „TRUE“ schaltet (also keine KI-Antwort vorhanden ist), +führt der Workflow den bekannten Pfad aus dem Free-Kapitel weiter: + +- **Nextcloud-Node „Download a file“** lädt `posts.txt`. +- **Code-Node „Posttext auswählen“** wählt einen passenden Text oder Fallback-Satz. + +👉 **Screenshot geeignet:** TRUE-Pfad mit Nextcloud- und Code-Node + + +### Schritt 5 – Merge-Node + +Der **Merge-Node** führt die beiden Pfade (KI und Fallback) wieder zusammen, +sodass der folgende *X-Node* immer ein gültiges Feld `postText` erhält. + +| Einstellung | Wert | +|--------------|------| +| **Mode** | *Append* | +| **Eingänge** | *2* | + +Damit werden die Ausgaben beider Pfade zusammengeführt. +Da beide Nodes (`Edit Fields` und `Posttext auswählen`) dasselbe Feld `postText` besitzen, +übernimmt n8n automatisch den jeweils vorhandenen Wert — unabhängig davon, welcher Pfad aktiv war. + +👉 **Screenshot geeignet:** Merge-Node mit beiden Eingängen (1 = Fallback, 2 = KI-Zweig) + +> [!NOTE] +> Durch diesen Aufbau bleibt der Workflow stabil: +> - Fällt der KI-Dienst aus → Fallback aus Nextcloud +> - Antwort vorhanden → KI-Text aus OpenRouter +> Beide Fälle liefern dasselbe Datenformat für den abschließenden Veröffentlichungs-Node. + +### Schritt 6 – Post veröffentlichen + +Der **X-Node „Post veröffentlichen“** nutzt schließlich das Feld: + +``` +={{ $json.postText }} +``` + +Dadurch bleibt der Workflow robust: +- Wenn die KI funktioniert, wird ihr Text gepostet. +- Wenn sie ausfällt, nutzt der Workflow automatisch den bestehenden Zufallstext. + +> [!TIP] +> Diese Integration erhöht die Automatisierung, ohne Abhängigkeiten zu erzwingen. +> Sie lässt sich später auf weitere Plattformen (z. B. Discord, Threads, WhatsApp) erweitern, +> indem dieselbe Logik für zusätzliche „Publish“-Nodes übernommen wird. \ No newline at end of file