rss-news/docs/AUTOMATION.md
OliverGiertz 6192f8e527 feat(automation): autonomous pipeline with Telegram bot and N8N integration
- Add full auto pipeline: RSS ingest → GPT relevance score → AI rewrite → WP draft
- Add Telegram bot with inline buttons (rewrite/discard/override) and commands (/run, /rejected, /status)
- Add smart publish scheduler: max 2 drafts/day, spread over week (09:00 & 14:00 CET)
- Add N8N API endpoints (/api/n8n/pipeline, /api/n8n/ingest) with X-API-Key auth
- Add GPT-based relevance scoring (0-100) for VanLife/Camping/Outdoor topics
- Remove Ampel risk-level policy check from ingestion (all enabled feeds are used)
- Add Telegram webhook endpoint and setup endpoint
- Add delete_wp_post() for Telegram discard action
- Add DB migrations for relevance_score and scheduled_publish_at columns
- Update .env.example with all new configuration variables
- Add docs/AUTOMATION.md with full setup and usage documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 09:40:15 +00:00

5 KiB
Raw Permalink Blame History

Automatischer Pipeline-Betrieb

Überblick

Das System läuft vollautomatisch und benötigt nur noch gelegentliche Telegram-Interaktion.

N8N (2× täglich, 08:00 + 16:00 Uhr)
  └─► POST /api/n8n/pipeline  (X-API-Key Header)
        ├── RSS Ingestion (alle aktivierten Feeds)
        ├── Relevanz-Score per GPT (0100)
        │     ├── Score ≥ 80 → Rewrite + WP-Draft + Telegram
        │     ├── Score 6079 → Telegram-Warnung + manueller Override möglich
        │     └── Score < 60 → Abgelehnt + tägliche Telegram-Liste
        └── Pipeline-Zusammenfassung via Telegram

Einrichtung

1. Umgebungsvariablen setzen

Kopiere backend/.env.example nach backend/.env und fülle alle Felder aus:

cp backend/.env.example backend/.env
nano backend/.env

Wichtige Variablen:

Variable Beschreibung
TELEGRAM_BOT_TOKEN Bot-Token von @BotFather
TELEGRAM_CHAT_ID Deine persönliche Chat-ID
TELEGRAM_WEBHOOK_SECRET Zufälliger String (≥ 20 Zeichen)
N8N_API_KEY Starker zufälliger API-Key
OPENAI_API_KEY OpenAI API-Key
WP_BASE_URL WordPress-URL
WP_USERNAME WordPress-Benutzername
WP_PASSWORD WordPress App-Passwort

2. Telegram-Webhook registrieren

Nach dem Deployment einmalig aufrufen:

curl -X POST https://news.vanityontour.de/api/telegram/setup-webhook \
  -H "Cookie: rss_news_session=<dein-session-token>"

Oder über die Admin-UI: Settings → Telegram Webhook einrichten.

3. N8N Workflow einrichten

In N8N einen neuen Workflow erstellen:

Trigger: Cron

  • Zeitplan 1: 0 8 * * * (täglich 08:00)
  • Zeitplan 2: 0 16 * * * (täglich 16:00)

Aktion: HTTP Request

  • Method: POST
  • URL: https://news.vanityontour.de/api/n8n/pipeline
  • Header: X-API-Key: <dein-n8n-api-key>

Fehlerbehandlung: Bei HTTP-Fehler → E-Mail/Telegram-Alert


Telegram-Befehle

Befehl Funktion
/run Pipeline manuell starten
/rejected Abgelehnte Artikel der letzten 3 Tage anzeigen
/status Aktuellen Pipeline-Status
/help Alle Befehle anzeigen

Telegram-Benachrichtigungen

Neuer Draft erstellt

Wenn ein Artikel erfolgreich verarbeitet wurde:

✅ Neuer Draft erstellt
📰 [Artikel-Titel]
🟢 Relevanz-Score: 87/100
📅 Vorgeschlagene Veröffentlichung: Mo, 24.03.2026 um 09:00 Uhr
🏷 #VanLife #Camping #Wohnmobil
🔗 Draft in WordPress öffnen

  [✏️ Neu schreiben]  [❌ Verwerfen]

Relevanz-Warnung (Score 6079)

⚠️ Artikel mit niedrigem Relevanz-Score
📰 [Artikel-Titel]
🟡 Score: 72/100
💬 Artikel behandelt hauptsächlich...
🔗 Originalartikel

  [ Trotzdem verarbeiten]  [❌ Ablehnen]

Abgelehnte Artikel (Ende jedes Runs)

Liste aller abgelehnten Artikel mit Override-Buttons für jeden einzelnen.


Relevanz-Score

Der GPT-basierte Score bewertet die Themenrelevanz für den VanLife/Camping-Blog:

Score Aktion
80100 Automatisch verarbeiten
6079 Telegram-Warnung, manueller Override
059 Automatisch abgelehnt

Themen die hoch scored werden: Campingplätze, Stellplätze, Wohnmobile, Van-Ausbau, Outdoor-Equipment, Wandern, Naturreisen, Roadtrips, Camping-Tipps.

Schwellwerte sind in .env konfigurierbar:

PIPELINE_RELEVANCE_AUTO=80
PIPELINE_RELEVANCE_WARN=60

Veröffentlichungsplan

  • Maximal 2 Beiträge pro Tag
  • Bevorzugte Zeiten: 09:00 und 14:00 Uhr (CET)
  • Gleichmäßig über die Woche verteilt
  • Der Vorschlag erscheint in der Telegram-Nachricht
  • Manuell in WordPress setzen oder über WP Scheduling-Plugin automatisieren

Einstellbar via:

PIPELINE_MAX_DRAFTS_PER_DAY=2
PIPELINE_PUBLISH_HOURS=9,14

API-Endpunkte (N8N / extern)

Alle externen Endpunkte benötigen den Header X-API-Key: <N8N_API_KEY>.

Methode Endpunkt Funktion
POST /api/n8n/pipeline Komplette Pipeline starten
POST /api/n8n/ingest Nur RSS-Import (ohne Rewrite)

Deployment (Hetzner via GitHub)

Das Deployment läuft automatisch über GitHub Actions beim Push auf main:

  1. GitHub Action führt Tests aus
  2. Bei Erfolg: SSH-Deploy auf Hetzner
  3. pip install -r requirements.txt
  4. Systemd-Dienst rss-app neu starten

Workflow-Dateien: .github/workflows/test.yml und .github/workflows/deploy.yml


Troubleshooting

Pipeline läuft, aber keine Telegram-Nachrichten:

  • TELEGRAM_BOT_TOKEN und TELEGRAM_CHAT_ID prüfen
  • Webhook-Status prüfen: GET https://api.telegram.org/bot<TOKEN>/getWebhookInfo

N8N bekommt 401:

  • N8N_API_KEY in .env und N8N-Workflow-Header müssen übereinstimmen

Alle Artikel werden abgelehnt:

  • PIPELINE_RELEVANCE_WARN temporär auf 40 senken zum Testen
  • Über /rejected + Override-Button manuell testen

Artikel werden doppelt importiert:

  • Deduplication läuft über source_url (eindeutig). Bereits verarbeitete Artikel werden nie erneut als Draft angelegt.