Files
diagramme/brevo-communi-pipeline.md
Andreas Knorr bd55a69b8b Mermaid-Beispiel: Brevo→Communi-Pipeline
Demonstriert Mermaid-Rendering in der Gitea-Web-Ansicht
(flowchart TD + LR, Tabelle). Ergänzt monitoring-datenfluss.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 07:11:45 +00:00

1.4 KiB

Brevo Newsletter → Communi App

Automatische Übernahme der CK-Newsletter aus Brevo in den Communi-News-Feed.

Ablauf (Webhook-Pipeline)

flowchart TD
    Brevo[Brevo Newsletter-Versand]
    WH["brevo-webhook · VPS<br/>(Container, Port 8055)"]
    Seen{"camp_id schon<br/>in seen_campaigns.json?"}
    Fetch["Kampagne via<br/>/emailCampaigns/{camp_id} holen"]
    Conv["HTML → Markdown<br/>Format: 📰 {Typ} · {Betreff}"]
    Communi["Communi API · /recommendation<br/>Gruppe 88531 · isOfficial"]

    Brevo -->|"Webhook: Event 'Zugestellt'<br/>(liefert camp_id)"| WH
    WH --> Seen
    Seen -->|ja| Skip["200 skipped<br/>kein API-Call"]
    Seen -->|nein| Fetch
    Fetch --> Conv
    Conv --> Communi
    WH -.antwortet IMMER 200.-> Brevo

Verteiler (Brevo-Listen-IDs)

Newsletter Brevo-Liste Communi-Gruppe
GemeindeNewsletter 198 (Gemeinderundmail) 88531
Regionalnewsletter 89 (Regional-NL SCK) 88531

Schutzmechanik

flowchart LR
    A["'Zugestellt' feuert<br/>pro Empfänger (~150x)"] --> B{Idempotenz<br/>pro camp_id}
    B -->|1. Mal| C[verarbeiten + posten]
    B -->|"2..n"| D[verwerfen]
    C --> E["Fehler? → ntfy-Alert<br/>(nie HTTP 500)"]

Hinweis: Idempotenz keyt auf camp_id (nicht Event-id) — sonst 1 Post pro Empfänger. Webhook antwortet immer 200, damit Brevo keinen Retry-Sturm auslöst.