diff --git a/Profice-services/feedgine.md b/Profice-services/feedgine.md index a9fd76e..8081256 100644 --- a/Profice-services/feedgine.md +++ b/Profice-services/feedgine.md @@ -2,7 +2,7 @@ title: FEEDGINE description: published: true -date: 2026-03-26T13:14:25.187Z +date: 2026-03-26T13:33:30.807Z tags: editor: markdown dateCreated: 2026-03-26T13:12:31.315Z @@ -12,7 +12,7 @@ dateCreated: 2026-03-26T13:12:31.315Z **Projekt:** POAS Feed Enricher **Sprache:** Python 3.11 -**Stand:** März 2026 +**Stand:** 26.01.2026 --- @@ -58,7 +58,7 @@ flowchart TD D --> E["Angereicherter XML-Feed"] E --> F["Google Merchant Center"] E --> G["nginx Feed-Server"] - D --> H["Telegram-Benachrichtigung"] + D --> H["Chat- & E-Mail-Benachrichtigung"] ``` --- @@ -228,7 +228,7 @@ Der Scheduler ist der Haupteinstiegspunkt. Er läuft dauerhaft und startet die P - Berechnung des nächsten Ausführungszeitpunkts aus `SCHEDULE_HOUR` und `SCHEDULE_MINUTE` - Wartemodus in 60-Sekunden-Intervallen (CPU-schonend) - Unterstützt `--run-now` (sofortige Ausführung), `--once` (einmalig, dann Beenden), `--lookback-days N` -- Sendet Telegram-Benachrichtigung beim Start des Schedulers +- Sendet Chat- und E-Mail-Benachrichtigung beim Start des Schedulers ### 3.2 Watchdog / Pipeline-Ausführer (`Startup/watchdog.py`) @@ -240,7 +240,7 @@ Der Watchdog orchestriert den gesamten Ausführungsablauf und implementiert Fehl - Startet die Pipeline als Subprozess (mit Timeout) - Retry-Logik: bis zu `MAX_RETRIES` Versuche mit `RETRY_DELAY_SECONDS` Pause - **Integritätsprüfungen** vor der Veröffentlichung (siehe 3.6) -- Telegram-Benachrichtigungen bei Erfolg und Fehler (inkl. Log-Anhang) +- Chat- und E-Mail-Benachrichtigungen bei Erfolg und Fehler (inkl. Log-Anhang) ### 3.3 Google Ads Datenabruf (`poas_feed_enricher/app.py`) @@ -300,7 +300,7 @@ Vor der Veröffentlichung des Feeds werden drei Sicherheitsprüfungen durchgefü | Integritäts-Check | Keine Produkte mit fehlender `g:id` | Strukturfehler im XML | | Sanity-Check | Produktanzahl weicht < ±1000 vom Vorrun ab | Anomaler Produktverlust | -Schlägt eine Prüfung fehl, wird der Feed **nicht** veröffentlicht und eine Telegram-Warnung gesendet. +Schlägt eine Prüfung fehl, wird der Feed **nicht** veröffentlicht und eine Chat- sowie E-Mail-Warnung gesendet. ### 3.7 Feed-Veröffentlichung (`Startup/feed_publisher.py`) @@ -320,21 +320,21 @@ Verwaltet Speicherplatz durch automatische Rotation der datierten Ordner. - Behält die neuesten `KEEP_LAST_N` (Standard: 3) Ordner - Löscht ältere Ordner automatisch -### 3.9 Telegram-Benachrichtigungen (`Startup/telegram_notifier.py`) +### 3.9 Chat- und E-Mail-Benachrichtigungen (`Startup/notifier.py`) -Sendet Status-Nachrichten an konfigurierte Telegram-Chats. +Sendet Status-Nachrichten über zwei Kanäle: als **Chat-Nachricht** (z. B. an einen konfigurierten Messaging-Dienst) und als **E-Mail** an definierte Empfängeradressen. **Nachrichten-Typen:** -| Ereignis | Inhalt | -|---|---| -| Scheduler-Start | Programmstart, geplante Uhrzeit, Lookback-Tage | -| Pipeline gestartet | Ausführungsbeginn | -| **Erfolg** | Feed-Statistiken, Label-Verteilung, Feed-URL | -| **Fehler** | Fehlermeldung + vollständige Log-Datei als Anhang | -| Feed gesperrt | Grund der Sicherheitsprüfung (Zero/Integrität/Sanity) | +| Ereignis | Chat-Nachricht | E-Mail | +|---|---|---| +| Scheduler-Start | Programmstart, geplante Uhrzeit, Lookback-Tage | Startbestätigung | +| Pipeline gestartet | Ausführungsbeginn | — | +| **Erfolg** | Feed-Statistiken, Label-Verteilung, Feed-URL | Zusammenfassung mit allen Kennzahlen | +| **Fehler** | Fehlermeldung + Log-Anhang | Detaillierte Fehlermeldung + Log-Datei im Anhang | +| Feed gesperrt | Grund der Sicherheitsprüfung (Zero/Integrität/Sanity) | Detaillierte Sperrmeldung mit Empfehlung | -**Beispielformat einer Erfolgsmeldung:** +**Beispielformat einer Chat-Erfolgsnachricht:** ``` POAS Pipeline — SUCCESS @@ -364,6 +364,36 @@ GMC Feed: https://[FEED-SERVER]/[CLIENT_PREFIX]/poas_feed.xml > *Dies ist ein Beispielformat — Zahlen und URLs sind Platzhalter.* +**Beispielformat einer E-Mail-Erfolgsnachricht:** + +``` +Betreff: [POAS Pipeline] Feed-Lauf erfolgreich — TT.MM.JJJJ + +Guten Tag, + +der tägliche Feed-Lauf wurde erfolgreich abgeschlossen. + +Datum: TT.MM.JJJJ HH:MM +Ausgabeordner: Output TT.MM.JJJJ + +Feed-Zusammenfassung: + Quell-XML: XXX.XXX Produkte + Endgültiger Feed: XXX.XXX Produkte + Ads-Treffer: XXX.XXX Produkte + +Label-Verteilung: + Longtail: XX.XXX (XX,X %) + Core: XX.XXX (XX,X %) + Feeder: XX.XXX (XX,X %) + +Feed-URL: https://[FEED-SERVER]/[CLIENT_PREFIX]/poas_feed.xml + +Mit freundlichen Grüßen +POAS Pipeline +``` + +> *Dies ist ein Beispielformat — Zahlen, Adressen und URLs sind Platzhalter.* + --- ## 4. Installation ohne Docker (Direktinstallation) @@ -422,8 +452,11 @@ nano .env Die folgenden Variablen **müssen** gesetzt werden (Details siehe [Abschnitt 6](#6-konfiguration)): ```dotenv -TELEGRAM_BOT_TOKEN=... -TELEGRAM_CHAT_IDS=... +NOTIFY_CHAT_TOKEN=... +NOTIFY_CHAT_IDS=... +NOTIFY_EMAIL_TO=... +NOTIFY_EMAIL_FROM=... +NOTIFY_EMAIL_SMTP=... SHOP_NAME=... SHOP_URL=... FEED_ZIPS=... @@ -621,9 +654,15 @@ services: container_name: poas-pipeline restart: unless-stopped environment: - # Telegram - TELEGRAM_BOT_TOKEN: "[BOT_TOKEN]" - TELEGRAM_CHAT_IDS: "[CHAT_ID_1],[CHAT_ID_2]" + # Chat-Benachrichtigung + NOTIFY_CHAT_TOKEN: "[CHAT_BOT_TOKEN]" + NOTIFY_CHAT_IDS: "[CHAT_ID_1],[CHAT_ID_2]" + + # E-Mail-Benachrichtigung + NOTIFY_EMAIL_TO: "[empfaenger@beispiel.de]" + NOTIFY_EMAIL_FROM: "[absender@beispiel.de]" + NOTIFY_EMAIL_SMTP: "[smtp.beispiel.de]" + NOTIFY_EMAIL_SMTP_PORT: "587" # Shop-Informationen SHOP_NAME: "[SHOPNAME]" @@ -760,16 +799,16 @@ graph TB end end - INTERNET["Internet\nGoogle Ads API / Telegram / Shop-ZIP"] + INTERNET["Internet\nGoogle Ads API / Shop-ZIP"] GMC["Google Merchant Center"] - TELEGRAM["Telegram"] + NOTIFY["Chat- & E-Mail-Benachrichtigung"] PIPELINE --> V1 PIPELINE --> V2 NGINX --> V2 PIPELINE --> INTERNET NGINX -->|"Port 8525"| GMC - PIPELINE --> TELEGRAM + PIPELINE --> NOTIFY ``` --- @@ -782,8 +821,12 @@ Alle Konfigurationsparameter werden über die `.env`-Datei (Direktinstallation) | Variable | Beispielformat | Beschreibung | |---|---|---| -| `TELEGRAM_BOT_TOKEN` | `[TOKEN]:AAG...` | Token des Telegram-Bots | -| `TELEGRAM_CHAT_IDS` | `[ID1],[ID2]` | Chat-IDs (kommagetrennt) | +| `NOTIFY_CHAT_TOKEN` | `[TOKEN]` | API-Token für den Chat-Benachrichtigungsdienst | +| `NOTIFY_CHAT_IDS` | `[ID1],[ID2]` | Empfänger-IDs für Chat-Nachrichten (kommagetrennt) | +| `NOTIFY_EMAIL_TO` | `[empfaenger@beispiel.de]` | E-Mail-Empfängeradresse(n), kommagetrennt | +| `NOTIFY_EMAIL_FROM` | `[absender@beispiel.de]` | Absenderadresse für E-Mail-Benachrichtigungen | +| `NOTIFY_EMAIL_SMTP` | `[smtp.beispiel.de]` | SMTP-Serveradresse | +| `NOTIFY_EMAIL_SMTP_PORT` | `587` | SMTP-Port (587 für STARTTLS, 465 für SSL) | | `SHOP_NAME` | `[Shopname]` | Name des Shops (für Feed-Titel) | | `SHOP_URL` | `https://[shop-domain]` | Shop-URL (für Feed-Link) | | `SHOP_DESCRIPTION` | `[Beschreibung]` | Shop-Beschreibung | @@ -842,9 +885,9 @@ sequenceDiagram participant API as Google Ads API participant ZIP as Shop-ZIP-Server participant N as nginx - participant TG as Telegram + participant MSG as Chat & E-Mail - S->>TG: Scheduler gestartet + S->>MSG: Scheduler gestartet Note over S: Wartet bis SCHEDULE_HOUR:SCHEDULE_MINUTE loop Täglich @@ -857,7 +900,7 @@ sequenceDiagram W->>W: Integritätsprüfungen W->>N: Feed veröffentlichen W->>W: Alte Ordner löschen - W->>TG: Erfolgsmeldung mit Statistiken + W->>MSG: Erfolgsmeldung mit Statistiken end ``` @@ -974,13 +1017,13 @@ graph TD LABEL["label_engine.py — POAS-Berechnung"] PUB["feed_publisher.py — Veröffentlichung"] CLEAN["cleanup.py — Speicherverwaltung"] - TG["telegram_notifier.py — Benachrichtigung"] + TG["notifier.py — Chat- & E-Mail-Benachrichtigung"] end subgraph OUTPUT["Ausgabe"] FEED["poas_feed.xml (angereicherter GMC-Feed)"] NGINX["nginx — Feed-Server"] - TELEGRAM["Telegram — Benachrichtigung"] + NOTIFY["Chat- & E-Mail-Benachrichtigung"] end ZIP --> WATCH @@ -997,7 +1040,7 @@ graph TD FEED --> NGINX WATCH --> CLEAN WATCH --> TG - TG --> TELEGRAM + TG --> NOTIFY ``` ### 8.2 Dateistruktur @@ -1033,7 +1076,7 @@ poas-pipeline/ │ ├── watchdog.py ← Pipeline-Ausführer + Retry │ ├── cleanup.py ← Ordner-Erstellung & -Rotation │ ├── feed_publisher.py ← Feed nach nginx kopieren -│ ├── telegram_notifier.py ← Telegram-Benachrichtigungen +│ ├── notifier.py ← Chat- & E-Mail-Benachrichtigungen │ └── logs/ ← Ausführungs-Logs │ ├── Datei/ ← Statische Eingabedaten @@ -1058,13 +1101,13 @@ sequenceDiagram participant APP as Ads-Abruf participant TRN as XML-Anreicherung participant PUB as Feed-Publisher - participant TG as Telegram + participant MSG as Chat & E-Mail - SCH->>TG: Scheduler gestartet + SCH->>MSG: Scheduler gestartet Note over SCH: Wartet bis SCHEDULE_HOUR:SCHEDULE_MINUTE (UTC) SCH->>WDG: execute_pipeline(lookback_days) - WDG->>TG: Pipeline gestartet + WDG->>MSG: Pipeline gestartet WDG->>CLN: Datierten Input-Ordner erstellen CLN->>CLN: ZIP-Feeds herunterladen @@ -1099,9 +1142,9 @@ sequenceDiagram PUB->>PUB: ZIP-Archiv erstellen PUB-->>WDG: OK WDG->>CLN: Alte Ordner rotieren - WDG->>TG: Erfolgsmeldung mit Statistiken + WDG->>MSG: Erfolgsmeldung + Statistiken (Chat & E-Mail) else Prüfung fehlgeschlagen - WDG->>TG: Warnung: Feed gesperrt (Grund) + WDG->>MSG: Warnung: Feed gesperrt (Chat & E-Mail) end ``` @@ -1132,8 +1175,7 @@ flowchart TD F6 -- Ja --> FU["underperformer — custom_label_4"] F6 -- Nein --> FI["invisibles — custom_label_4"] ``` + --- - -**Letzte Aktualisierung:** 26.03.2026 *Dokumentation für POAS Feed Enricher — alle Namen, URLs, IDs und Zahlen in dieser Dokumentation sind Platzhalter und dienen ausschließlich der Veranschaulichung.*