Kapitel 10/Free Rhohtext.md aktualisiert

This commit is contained in:
2025-10-09 20:27:12 +00:00
parent 996722e066
commit 915b449fb2

View File

@@ -1023,4 +1023,217 @@ Er prüft das Feld `postAllowed`, das aus dem vorherigen Code-Node stammt.
- Der *True*-Pfad wird nur ausgeführt, wenn der Stream innerhalb der nächsten 30 Minuten startet **und** noch kein Post gesendet wurde.
- Der *False*-Pfad kann später genutzt werden, um Debug-Logs oder Benachrichtigungen zu schreiben (z. B. „Kein Post nötig“).
👉 Screenshot geeignet: n8n IF-Node mit `{{$json.postAllowed}} is true (Boolean)`
👉 Screenshot geeignet: n8n IF-Node mit `{{$json.postAllowed}} is true (Boolean)`
### 6.13 Nextcloud-Node: Datei herunterladen
**Zweck:**
Dieser Node lädt die Datei `posts.txt` aus deiner Nextcloud in n8n, damit sie anschließend lokal verarbeitet werden kann.
**Node-Typ:** `Nextcloud`
**Name:** `posts.txt herunterladen`
👉 Screenshot geeignet: n8n Nextcloud-Node mit ausgefüllten Feldern
#### Einstellungen
| Feld | Eingabe |
|------|----------|
| **Credential to connect with** | `Nextcloud` *(aus Schritt 5.9)* |
| **Resource** | `File` |
| **Operation** | `Download` |
| **File Path** | `/n8n/posts.txt` *(Pfad in deiner Nextcloud anpassen)* |
| **Put Output File in Field** | `data` |
[!NOTE]
Die Datei `posts.txt` sollte in deiner Nextcloud vorhanden sein und **eine Textzeile pro Post** enthalten, z. B.:
```
Gleich gehts los der Stream startet in Kürze!
Heute wieder live seid dabei!
Stream incoming! Noch ein paar Minuten bis Start.
```
👉 Screenshot geeignet: Beispielansicht der Datei `posts.txt` in Nextcloud
Nach der Ausführung enthält der Node die Datei als **binäre Ausgabe** im Feld `data`.
Diese wird im nächsten Schritt lokal gespeichert, damit sie gelesen werden kann.
### 6.14 Code-Node: Zufälligen Post auswählen
**Zweck:**
Dieser Node liest die Datei `posts.txt` (aus dem Binary-Feld des Nextcloud-Nodes) und wählt zufällig eine Zeile als Posting-Text.
Wenn die Datei fehlt oder leer ist, nutzt der Workflow eine kleine Standardliste mit vorbereiteten Posts als Fallback.
**Node-Typ:** `Code`
**Name:** `Posttext auswählen`
👉 Screenshot geeignet: n8n geöffneter Code-Node mit Script
#### Code-Inhalt
```
/**
* Liest posts.txt direkt aus dem Binary-Feld "data" (vom Nextcloud-Node)
* und wählt zufällig eine Zeile aus.
* Wenn keine Datei oder kein Inhalt vorhanden ist, wird ein Fallback-Text aus einer Liste genutzt.
* Zusätzlich wird der Startzeitpunkt des Streams in lokaler Zeit (MEZ/MESZ) angehängt.
*/
let content = '';
try {
const buffer = items[0].binary?.data?.data;
if (buffer) {
content = Buffer.from(buffer, 'base64').toString('utf8');
}
} catch (err) {
content = '';
}
// Inhalt in Zeilen aufteilen
const lines = content.split('\n').map(l => l.trim()).filter(Boolean);
// Fallback-Texte
const fallbackPosts = [
'Der Stream startet gleich holt euch Snacks und seid dabei! 🎮',
'Bald gehts los heute wird wieder gezockt! 🔥',
'Noch kurz durchatmen gleich gehts live auf Sendung! 🚀',
'In wenigen Minuten live Kaffee bereit? ☕',
'Los gehts der Chat wartet schon auf euch! 💬',
'Heute gibts wieder gute Laune und Gaming pur! 💜'
];
// Textauswahl
let postText;
if (lines.length > 0) {
const randomIndex = Math.floor(Math.random() * lines.length);
postText = lines[randomIndex];
} else {
const randomIndex = Math.floor(Math.random() * fallbackPosts.length);
postText = fallbackPosts[randomIndex];
}
// Startzeitpunkt des Streams aus vorherigem Node lesen (startIso)
let startIso = items[0].json?.startIso || null;
let startLocal = '';
if (startIso) {
try {
const date = new Date(startIso);
const formatter = new Intl.DateTimeFormat('de-DE', {
weekday: 'short',
hour: '2-digit',
minute: '2-digit',
timeZone: 'Europe/Berlin',
hour12: false
});
startLocal = formatter.format(date);
} catch (err) {
startLocal = '';
}
}
if (startLocal) {
postText = `${postText} 🎬 Start: ${startLocal}`;
}
// Weitergabe an nächste Nodes
return [{
json: {
...items[0].json,
postText
}
}];
```
👉 Screenshot geeignet: Node-Ausgabe mit Feld `postText` und zufälligem Text
[!NOTE]
Wenn die Datei `posts.txt` fehlt oder leer ist, sorgt die integrierte Fallback-Liste dafür, dass trotzdem ein sinnvoller Post generiert wird.
Damit ist der Workflow robust und funktioniert zuverlässig auch ohne manuelle Pflege der Datei.
### 6.15 X-Post veröffentlichen
**Zweck:**
Dieser Node sendet den zuvor generierten Text (`postText`) automatisch als Tweet über das verknüpfte X-Konto.
**Node-Typ:** `X`
**Name:** `X Post veröffentlichen`
👉 Screenshot geeignet: n8n X-Node mit ausgefülltem Formular für Tweet-Erstellung
#### Einstellungen
| Feld | Eingabe |
|------|----------|
| **Credential to connect with** | `X account` *(aus Schritt 5.8)* |
| **Resource** | `Tweet` |
| **Operation** | `Create` |
| **Text** | `{{ $json.postText }}` |
Beispielausgabe:
```
Stream incoming! Noch ein paar Minuten bis Start 🎬 Start: Mi., 18:00
```
👉 Screenshot geeignet: n8n Erfolgreicher Tweet-Node mit grünem Ausgabestatus
[!NOTE]
Dieser Node nutzt direkt die X-Integration von n8n und benötigt keine manuelle API-Konfiguration.
Im **Free-Plan** sind bis zu **17 Posts pro 24 Stunden** erlaubt.
[!TIP]
Wenn der Node mit `401 Unauthorized` fehlschlägt:
- Öffne die X-Credentials in n8n und **verbinde den Account erneut**,
- prüfe, ob die App im X Developer Dashboard **„Read and Write“** aktiviert hat.
Danach sollte der Node wieder erfolgreich posten.
### 6.16 Lokale Datei löschen (Workflow-Speicher bereinigen)
**Zweck:**
Dieser Node entfernt die lokal zwischengespeicherte Datei `posts.txt` aus dem Workflow-Speicher.
Damit wird verhindert, dass beim nächsten Lauf alte Daten erneut verwendet werden.
**Node-Typ:** `Code`
**Name:** `Temporäre Datei entfernen`
👉 Screenshot geeignet: n8n Code Node mit Löschskript
#### Einstellungen
**Code:**
```
return items.map(item => {
if (item.binary && item.binary.data) {
delete item.binary.data; // Entfernt die heruntergeladene Datei aus dem Speicher
}
return item;
});
```
[!NOTE]
- Dieser Node löscht **nicht die Datei auf der Festplatte oder in Nextcloud**,
sondern nur die temporäre Kopie, die n8n im Speicher hält.
- Beim nächsten Workflow-Lauf wird die Datei automatisch neu aus Nextcloud geladen.
- Diese Methode funktioniert stabil in jeder n8n-Version, ohne zusätzliche Module.
### 6.17 Gesamter Workflow als JSON-Import
Zum Abschluss stellen wir den gesamten Workflow als **importierbare JSON-Datei** bereit.
Diese Datei enthält alle Nodes, Verbindungen und Einstellungen fertig vorbereitet für den direkten Import in n8n.
👉 Screenshot geeignet: n8n Menüpunkt „Import from File“
1) Öffne n8n im Browser.
2) Klicke oben rechts auf das **Drei-Punkte-Menü****Import from File**.
3) Wähle die bereitgestellte JSON-Datei (`stream_schedule_workflow.json`) aus.
4) Nach dem Import prüfe, ob alle **Credentials** korrekt zugewiesen sind:
- Twitch
- X (Twitter)
- Nextcloud
[!TIP]
Sollten Credentials fehlen oder fehlerhaft sein, öffne den jeweiligen Node, wähle in der Liste das passende Credential neu aus und speichere den Node anschließend.
Nach erfolgreichem Import ist der Workflow sofort einsatzbereit und kann manuell gestartet oder automatisch durch den Cron-Trigger ausgelöst werden.