{
    "schema": "https://saferpage.de/schemas/monitoring-alert-delivery.v1",
    "generated_at": "2026-06-10T10:55:27+00:00",
    "domain": "bzk-koblenz.de",
    "idempotency_key": "sp-alert-f653aea479098a34cffc8690",
    "dry_run": true,
    "does_not_send": true,
    "routing_summary": "bzk-koblenz.de: 1 Alert(s), primaerer Owner Compliance/IT, SLA 0-30 Tage.",
    "routing_rules": [
        {
            "severity": "kritisch",
            "target": "incident_privacy_security",
            "notify": [
                "Datenschutz/Legal",
                "IT/Security",
                "Management"
            ],
            "sla": "0-7 Tage"
        },
        {
            "severity": "hoch",
            "target": "privacyops_backlog",
            "notify": [
                "Fach-Owner",
                "Programm-Owner"
            ],
            "sla": "0-14 Tage"
        },
        {
            "severity": "mittel",
            "target": "monitoring_review",
            "notify": [
                "Compliance/IT"
            ],
            "sla": "naechster Review"
        },
        {
            "severity": "niedrig",
            "target": "watchlist",
            "notify": [
                "Compliance/IT"
            ],
            "sla": "laufend"
        }
    ],
    "signing_headers": {
        "X-SaferPage-Event": "monitoring.alert",
        "X-SaferPage-Domain": "bzk-koblenz.de",
        "X-SaferPage-Idempotency-Key": "sp-alert-f653aea479098a34cffc8690",
        "X-SaferPage-Signature": "sha256=<HMAC ueber Request-Body>"
    },
    "signature_verification": {
        "algorithm": "HMAC-SHA256",
        "canonical_payload": "payloads.generic_webhook encoded as JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES",
        "canonical_body_sha256": "58c1c145bbc265f3c5ae6c2a62c8ad2dc931bc4c807dd103d0e7fb301b1f65d6",
        "signature_header": "X-SaferPage-Signature",
        "signature_format": "sha256=<hex_hmac_sha256>",
        "secret_ref": "SAFERPAGE_WEBHOOK_SECRET oder SAFERPAGE_OPERATOR_WEBHOOK_SECRET im Secret Manager",
        "example_verify_command": "printf %s \"$BODY\" | openssl dgst -sha256 -hmac \"$SAFERPAGE_WEBHOOK_SECRET\" -binary | xxd -p -c 256",
        "receiver_must_check": [
            "X-SaferPage-Event equals monitoring.alert",
            "X-SaferPage-Domain matches expected domain",
            "X-SaferPage-Idempotency-Key was not processed before",
            "HMAC over the exact request body matches X-SaferPage-Signature",
            "Body-SHA-256 matches the audited canonical body when using the public test fixture"
        ],
        "failure_policy": "Reject unsigned, mismatched, replayed or duplicate payloads; keep alert in manual review queue."
    },
    "verification_test_fixture": {
        "purpose": "Öffentlicher Testfall fuer Empfaenger-Implementierungen. Nicht als produktives Secret verwenden.",
        "test_secret": "saferpage_monitoring_delivery_test_secret_do_not_use_in_production",
        "canonical_body_sha256": "58c1c145bbc265f3c5ae6c2a62c8ad2dc931bc4c807dd103d0e7fb301b1f65d6",
        "expected_signature": "sha256=991d48051d67fd8204acc9076163bcd18d67d771da3223e3e921725d7942f676",
        "expected_signature_header": "X-SaferPage-Signature: sha256=991d48051d67fd8204acc9076163bcd18d67d771da3223e3e921725d7942f676",
        "positive_test": "Empfaenger akzeptiert den unveraenderten generic_webhook-Body mit expected_signature und Idempotency-Key.",
        "negative_tests": [
            "Body um ein Zeichen veraendern: Signatur muss abgelehnt werden.",
            "X-SaferPage-Domain auf andere Domain setzen: Payload muss abgelehnt werden.",
            "X-SaferPage-Idempotency-Key erneut senden: Payload muss als Duplikat abgelehnt oder ignoriert werden.",
            "Signature-Prefix entfernen oder falschen Algorithmus nutzen: Payload muss abgelehnt werden."
        ],
        "sample_commands": {
            "body_sha256": "printf %s \"$BODY\" | sha256sum",
            "expected_signature": "printf %s \"$BODY\" | openssl dgst -sha256 -hmac \"saferpage_monitoring_delivery_test_secret_do_not_use_in_production\" -binary | xxd -p -c 256",
            "curl_dry_run": "curl -X POST \"$WEBHOOK_URL\" -H \"Content-Type: application/json\" -H \"X-SaferPage-Event: monitoring.alert\" -H \"X-SaferPage-Domain: bzk-koblenz.de\" -H \"X-SaferPage-Idempotency-Key: sp-alert-f653aea479098a34cffc8690\" -H \"X-SaferPage-Signature: sha256=991d48051d67fd8204acc9076163bcd18d67d771da3223e3e921725d7942f676\" --data-binary @body.json"
        }
    },
    "retry_policy": {
        "max_attempts": 5,
        "backoff": "1m, 5m, 15m, 1h, 6h",
        "dedupe_key": "idempotency_key",
        "dead_letter_action": "CSV/Markdown Runbook in Betreiberakte ablegen und Owner manuell informieren."
    },
    "payloads": {
        "generic_webhook": {
            "event": "monitoring.alert",
            "domain": "bzk-koblenz.de",
            "scan": {
                "id": "bf3eeb24-c7c2-412a-ab6e-a1e451fc6942",
                "checked_at": "2026-06-10 07:42:33.331944+02",
                "score": 40,
                "score_delta": null
            },
            "metrics": {
                "alert_count": 1,
                "high_or_critical_count": 0,
                "scan_count": 1,
                "new_finding_count": 0,
                "resolved_finding_count": 0,
                "technical_new_count": 0,
                "new_cookie_count": 0,
                "new_third_party_count": 0,
                "consent_score": 72
            },
            "primary_alert": {
                "id": "history_missing",
                "severity": "mittel",
                "title": "Noch wenig Verlauf für Alerting",
                "trigger": "1 gespeicherte Scan(s)",
                "impact": "Ohne Vorher-Nachher-Vergleich sind Änderungen nur eingeschränkt beweisbar.",
                "operator_action": "Wiederholungsscans einplanen und JSON/RSS-Feeds in den Betreiberprozess aufnehmen.",
                "owner": "Compliance/IT",
                "sla": "0-30 Tage",
                "evidence": "Mindestens zwei gespeicherte Scans erhöhen die Aussagekraft.",
                "url": "https://saferpage.de/monitoring/domain/bzk-koblenz.de",
                "status": "offen prüfen"
            },
            "alerts": [
                {
                    "id": "history_missing",
                    "severity": "mittel",
                    "title": "Noch wenig Verlauf für Alerting",
                    "owner": "Compliance/IT",
                    "sla": "0-30 Tage",
                    "url": "https://saferpage.de/monitoring/domain/bzk-koblenz.de"
                }
            ],
            "links": {
                "alert_center": "https://saferpage.de/alarme/bzk-koblenz.de",
                "json": "https://saferpage.de/alarme/bzk-koblenz.de/export",
                "csv": "https://saferpage.de/alarme/bzk-koblenz.de/export-csv",
                "runbook_markdown": "https://saferpage.de/alarme/bzk-koblenz.de/runbook-md",
                "delivery_json": "https://saferpage.de/alarme/bzk-koblenz.de/delivery-json",
                "report": "https://saferpage.de/bzk-koblenz.de",
                "change_center": "https://saferpage.de/aenderungen/bzk-koblenz.de",
                "monitoring": "https://saferpage.de/monitoring/domain/bzk-koblenz.de",
                "json_feed": "https://saferpage.de/monitoring/domain/bzk-koblenz.de/feed",
                "rss_feed": "https://saferpage.de/monitoring/domain/bzk-koblenz.de/feed?format=rss",
                "operator_board": "https://saferpage.de/betreiber/bzk-koblenz.de",
                "risk_center": "https://saferpage.de/risiko/bzk-koblenz.de"
            }
        },
        "slack_block_kit": {
            "text": "[MITTEL] SaferPage Alert fuer bzk-koblenz.de: Noch wenig Verlauf für Alerting",
            "blocks": [
                {
                    "type": "header",
                    "text": {
                        "type": "plain_text",
                        "text": "SaferPage Alert: bzk-koblenz.de"
                    }
                },
                {
                    "type": "section",
                    "text": {
                        "type": "mrkdwn",
                        "text": "*MITTEL* - Noch wenig Verlauf für Alerting\nOwner: Compliance/IT | SLA: 0-30 Tage"
                    }
                },
                {
                    "type": "section",
                    "text": {
                        "type": "mrkdwn",
                        "text": "Wiederholungsscans einplanen und JSON/RSS-Feeds in den Betreiberprozess aufnehmen."
                    }
                },
                {
                    "type": "actions",
                    "elements": [
                        {
                            "type": "button",
                            "text": {
                                "type": "plain_text",
                                "text": "Report"
                            },
                            "url": "https://saferpage.de/bzk-koblenz.de"
                        },
                        {
                            "type": "button",
                            "text": {
                                "type": "plain_text",
                                "text": "Runbook"
                            },
                            "url": "https://saferpage.de/alarme/bzk-koblenz.de/runbook-md"
                        }
                    ]
                }
            ]
        },
        "teams_adaptive_card": {
            "type": "message",
            "attachments": [
                {
                    "contentType": "application/vnd.microsoft.card.adaptive",
                    "content": {
                        "type": "AdaptiveCard",
                        "version": "1.4",
                        "body": [
                            {
                                "type": "TextBlock",
                                "size": "Large",
                                "weight": "Bolder",
                                "text": "SaferPage Alert: bzk-koblenz.de"
                            },
                            {
                                "type": "TextBlock",
                                "text": "MITTEL - Noch wenig Verlauf für Alerting",
                                "wrap": true
                            },
                            {
                                "type": "FactSet",
                                "facts": [
                                    {
                                        "title": "Owner",
                                        "value": "Compliance/IT"
                                    },
                                    {
                                        "title": "SLA",
                                        "value": "0-30 Tage"
                                    },
                                    {
                                        "title": "Score",
                                        "value": "40"
                                    }
                                ]
                            },
                            {
                                "type": "TextBlock",
                                "text": "Wiederholungsscans einplanen und JSON/RSS-Feeds in den Betreiberprozess aufnehmen.",
                                "wrap": true
                            }
                        ],
                        "actions": [
                            {
                                "type": "Action.OpenUrl",
                                "title": "Report oeffnen",
                                "url": "https://saferpage.de/bzk-koblenz.de"
                            },
                            {
                                "type": "Action.OpenUrl",
                                "title": "Alerts oeffnen",
                                "url": "https://saferpage.de/alarme/bzk-koblenz.de"
                            }
                        ]
                    }
                }
            ]
        },
        "jira_issue": {
            "fields": {
                "summary": "SaferPage MITTEL: bzk-koblenz.de - Noch wenig Verlauf für Alerting",
                "description": "Wiederholungsscans einplanen und JSON/RSS-Feeds in den Betreiberprozess aufnehmen.\n\nReport: https://saferpage.de/bzk-koblenz.de\nRunbook: https://saferpage.de/alarme/bzk-koblenz.de/runbook-md",
                "labels": [
                    "saferpage",
                    "privacyops",
                    "monitoring-alert",
                    "mittel"
                ],
                "priority": {
                    "name": "Medium"
                },
                "customfield_owner_hint": "Compliance/IT",
                "customfield_sla_hint": "0-30 Tage"
            }
        },
        "email_digest": {
            "subject": "[MITTEL] SaferPage Alert fuer bzk-koblenz.de",
            "preheader": "Noch wenig Verlauf für Alerting - Owner Compliance/IT, SLA 0-30 Tage",
            "body_lines": [
                "Wiederholungsscans einplanen und JSON/RSS-Feeds in den Betreiberprozess aufnehmen.",
                "Report: https://saferpage.de/bzk-koblenz.de",
                "Runbook: https://saferpage.de/alarme/bzk-koblenz.de/runbook-md"
            ]
        }
    },
    "alert_count": 1,
    "links": {
        "alert_center": "https://saferpage.de/alarme/bzk-koblenz.de",
        "json": "https://saferpage.de/alarme/bzk-koblenz.de/export",
        "csv": "https://saferpage.de/alarme/bzk-koblenz.de/export-csv",
        "runbook_markdown": "https://saferpage.de/alarme/bzk-koblenz.de/runbook-md",
        "delivery_json": "https://saferpage.de/alarme/bzk-koblenz.de/delivery-json",
        "report": "https://saferpage.de/bzk-koblenz.de",
        "change_center": "https://saferpage.de/aenderungen/bzk-koblenz.de",
        "monitoring": "https://saferpage.de/monitoring/domain/bzk-koblenz.de",
        "json_feed": "https://saferpage.de/monitoring/domain/bzk-koblenz.de/feed",
        "rss_feed": "https://saferpage.de/monitoring/domain/bzk-koblenz.de/feed?format=rss",
        "operator_board": "https://saferpage.de/betreiber/bzk-koblenz.de",
        "risk_center": "https://saferpage.de/risiko/bzk-koblenz.de"
    },
    "disclaimer": "Payloads sind Integrationsvorlagen. Webhook-Secret, Zielsystem, Empfaenger, Zugriffsschutz und reale Ticketfelder muessen Betreiber intern konfigurieren."
}
