# Brevo Newsletter → Communi App Automatische Übernahme der CK-Newsletter aus Brevo in den Communi-News-Feed. ## Ablauf (Webhook-Pipeline) ```mermaid flowchart TD Brevo[Brevo Newsletter-Versand] WH["brevo-webhook · VPS
(Container, Port 8055)"] Seen{"camp_id schon
in seen_campaigns.json?"} Fetch["Kampagne via
/emailCampaigns/{camp_id} holen"] Conv["HTML → Markdown
Format: 📰 {Typ} · {Betreff}"] Communi["Communi API · /recommendation
Gruppe 88531 · isOfficial"] Brevo -->|"Webhook: Event 'Zugestellt'
(liefert camp_id)"| WH WH --> Seen Seen -->|ja| Skip["200 skipped
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 ```mermaid flowchart LR A["'Zugestellt' feuert
pro Empfänger (~150x)"] --> B{Idempotenz
pro camp_id} B -->|1. Mal| C[verarbeiten + posten] B -->|"2..n"| D[verwerfen] C --> E["Fehler? → ntfy-Alert
(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.