{
    "schema": "https://saferpage.de/schemas/operator-integration-setup.v1",
    "generated_at": "2026-07-21T22:01:55+00:00",
    "summary": "Betreiber-Setup für Jira, Slack, Teams, Webhooks und E-Mail: Zielsysteme, Secret-Referenzen, Events, Dry-Run-Status, Retry-/Security-Regeln und Delivery-Quellen in einem Paket.",
    "metrics": {
        "channel_count": 7,
        "enabled_channel_count": 6,
        "ready_channel_count": 1,
        "missing_channel_count": 5,
        "delivery_source_count": 25,
        "check_count": 6,
        "passed_check_count": 1
    },
    "channels": [
        {
            "id": "local_file_sink",
            "label": "Lokaler Audit-File-Sink",
            "selected": true,
            "status": "ready_for_dry_run",
            "owner": "IT/Compliance",
            "purpose": "Interne Delivery-Evidence als sanitisierte JSONL-Datei schreiben, ohne externe Empfänger oder Ziel-URLs.",
            "events": [
                "monitoring.alert"
            ],
            "required_env_refs": [],
            "config_flags": [],
            "secret_policy": "Nur Secret-Referenzen oder gesetzte Ja/Nein-Flags anzeigen; keine Tokens, Webhook-URLs oder API-Keys im öffentlichen Export."
        },
        {
            "id": "webhook",
            "label": "Generischer Webhook",
            "selected": true,
            "status": "missing_configuration",
            "owner": "IT/Platform",
            "purpose": "Alerts, Nachweispositionen, Portfolio-Digests und Scan-Dispatches an eigene Orchestrierung senden.",
            "events": [
                "operator.remediation.ticket_ready",
                "monitoring.alert",
                "saferpage.portfolio.scan_dispatch",
                "saferpage.portfolio.digest"
            ],
            "required_env_refs": [
                "SAFERPAGE_WEBHOOK_URL",
                "SAFERPAGE_WEBHOOK_SECRET"
            ],
            "config_flags": [
                "webhook_url_set",
                "webhook_secret_set"
            ],
            "secret_policy": "Nur Secret-Referenzen oder gesetzte Ja/Nein-Flags anzeigen; keine Tokens, Webhook-URLs oder API-Keys im öffentlichen Export."
        },
        {
            "id": "slack",
            "label": "Slack",
            "selected": true,
            "status": "missing_configuration",
            "owner": "PrivacyOps",
            "purpose": "PrivacyOps-Kanaele mit priorisierten Buttons, Verantwortlichkeiten und Zielzeit-Hinweisen informieren.",
            "events": [
                "operator.remediation.ticket_ready",
                "monitoring.alert",
                "saferpage.portfolio.scan_dispatch"
            ],
            "required_env_refs": [
                "SAFERPAGE_SLACK_WEBHOOK_URL",
                "SAFERPAGE_SLACK_CHANNEL"
            ],
            "config_flags": [
                "slack_webhook_set",
                "slack_channel_set"
            ],
            "secret_policy": "Nur Secret-Referenzen oder gesetzte Ja/Nein-Flags anzeigen; keine Tokens, Webhook-URLs oder API-Keys im öffentlichen Export."
        },
        {
            "id": "teams",
            "label": "Microsoft Teams",
            "selected": true,
            "status": "missing_configuration",
            "owner": "Website-Betrieb",
            "purpose": "Adaptive Cards für Betreiber-, Datenschutz- oder Security-Teams vorbereiten.",
            "events": [
                "operator.remediation.ticket_ready",
                "monitoring.alert",
                "saferpage.portfolio.scan_dispatch"
            ],
            "required_env_refs": [
                "SAFERPAGE_TEAMS_WEBHOOK_URL"
            ],
            "config_flags": [
                "teams_webhook_set"
            ],
            "secret_policy": "Nur Secret-Referenzen oder gesetzte Ja/Nein-Flags anzeigen; keine Tokens, Webhook-URLs oder API-Keys im öffentlichen Export."
        },
        {
            "id": "jira",
            "label": "Jira",
            "selected": true,
            "status": "missing_configuration",
            "owner": "Projekt-/Nachweis-Verantwortung",
            "purpose": "Nachweis- und Alert-Aufgaben mit External-ID, Labels, Prioritaet und Akzeptanzkriterien anlegen.",
            "events": [
                "operator.remediation.ticket_ready",
                "monitoring.alert"
            ],
            "required_env_refs": [
                "SAFERPAGE_JIRA_BASE_URL",
                "SAFERPAGE_JIRA_EMAIL",
                "SAFERPAGE_JIRA_API_TOKEN"
            ],
            "config_flags": [
                "jira_base_set",
                "jira_auth_set",
                "jira_project_set"
            ],
            "secret_policy": "Nur Secret-Referenzen oder gesetzte Ja/Nein-Flags anzeigen; keine Tokens, Webhook-URLs oder API-Keys im öffentlichen Export."
        },
        {
            "id": "email",
            "label": "E-Mail/SMTP",
            "selected": true,
            "status": "missing_configuration",
            "owner": "Programm-Verantwortung",
            "purpose": "Portfolio-Digests und Eskalationen an Management, Datenschutz und Webbetrieb zustellen.",
            "events": [
                "saferpage.portfolio.digest",
                "monitoring.alert"
            ],
            "required_env_refs": [
                "SAFERPAGE_MAIL_FROM",
                "SAFERPAGE_MAIL_TO"
            ],
            "config_flags": [
                "mail_from_set",
                "mail_to_set"
            ],
            "secret_policy": "Nur Secret-Referenzen oder gesetzte Ja/Nein-Flags anzeigen; keine Tokens, Webhook-URLs oder API-Keys im öffentlichen Export."
        },
        {
            "id": "sendgrid",
            "label": "SendGrid",
            "selected": false,
            "status": "disabled",
            "owner": "IT/Platform",
            "purpose": "Wiederkehrende Portfolio-Digests über einen Mail-Provider ausliefern.",
            "events": [
                "saferpage.portfolio.digest"
            ],
            "required_env_refs": [
                "SENDGRID_API_KEY",
                "SAFERPAGE_MAIL_FROM",
                "SAFERPAGE_MAIL_TO"
            ],
            "config_flags": [
                "sendgrid_key_set",
                "mail_from_set",
                "mail_to_set"
            ],
            "secret_policy": "Nur Secret-Referenzen oder gesetzte Ja/Nein-Flags anzeigen; keine Tokens, Webhook-URLs oder API-Keys im öffentlichen Export."
        }
    ],
    "validation_checks": [
        {
            "id": "local_file_sink_configuration",
            "channel": "local_file_sink",
            "label": "Lokaler Audit-File-Sink konfigurieren",
            "status": "passed",
            "owner": "IT/Compliance",
            "evidence": "Erforderliche Secret-Referenzen oder Dry-Run-Flags sind gesetzt.",
            "action": "Dry-Run mit Beispielpayload ausführen und Zielsystemfreigabe dokumentieren."
        },
        {
            "id": "webhook_configuration",
            "channel": "webhook",
            "label": "Generischer Webhook konfigurieren",
            "status": "missing",
            "owner": "IT/Platform",
            "evidence": "Zielsystem, Secret-Referenzen und Projekt-/Kanalzuordnung fehlen noch.",
            "action": "Secrets in Serverumgebung oder Secret Manager setzen; öffentliche URLs/Tokens nicht in Querystrings speichern."
        },
        {
            "id": "slack_configuration",
            "channel": "slack",
            "label": "Slack konfigurieren",
            "status": "missing",
            "owner": "PrivacyOps",
            "evidence": "Zielsystem, Secret-Referenzen und Projekt-/Kanalzuordnung fehlen noch.",
            "action": "Secrets in Serverumgebung oder Secret Manager setzen; öffentliche URLs/Tokens nicht in Querystrings speichern."
        },
        {
            "id": "teams_configuration",
            "channel": "teams",
            "label": "Microsoft Teams konfigurieren",
            "status": "missing",
            "owner": "Website-Betrieb",
            "evidence": "Zielsystem, Secret-Referenzen und Projekt-/Kanalzuordnung fehlen noch.",
            "action": "Secrets in Serverumgebung oder Secret Manager setzen; öffentliche URLs/Tokens nicht in Querystrings speichern."
        },
        {
            "id": "jira_configuration",
            "channel": "jira",
            "label": "Jira konfigurieren",
            "status": "missing",
            "owner": "Projekt-/Nachweis-Verantwortung",
            "evidence": "Zielsystem, Secret-Referenzen und Projekt-/Kanalzuordnung fehlen noch.",
            "action": "Secrets in Serverumgebung oder Secret Manager setzen; öffentliche URLs/Tokens nicht in Querystrings speichern."
        },
        {
            "id": "email_configuration",
            "channel": "email",
            "label": "E-Mail/SMTP konfigurieren",
            "status": "missing",
            "owner": "Programm-Verantwortung",
            "evidence": "Zielsystem, Secret-Referenzen und Projekt-/Kanalzuordnung fehlen noch.",
            "action": "Secrets in Serverumgebung oder Secret Manager setzen; öffentliche URLs/Tokens nicht in Querystrings speichern."
        }
    ],
    "delivery_sources": [
        {
            "id": "dach_2026_parity_readiness",
            "label": "DACH 2026 Parity Readiness",
            "event": "competitive.parity.readiness",
            "schema": "dach-2026-parity-readiness.v1",
            "example_url": "https://saferpage.de/vergleich/parity-readiness-json"
        },
        {
            "id": "remediation_tickets",
            "label": "Nachweispositionen",
            "event": "operator.remediation.ticket_ready",
            "schema": "operator-remediation-ticket-delivery.v1",
            "example_url": "https://saferpage.de/fix-guides/anrufer.info/tickets-delivery-json"
        },
        {
            "id": "top_fixes_summary",
            "label": "Top-3 Fixes Summary",
            "event": "operator.top_fixes.summary",
            "schema": "top-fixes-summary.v2",
            "example_url": "https://saferpage.de/anrufer.info/top-fixes-json"
        },
        {
            "id": "tracker_decision_workflow",
            "label": "Tracker Decision Workflow",
            "event": "tracker.decision.workflow",
            "schema": "tracker-decision-workflow.v1",
            "example_url": "https://saferpage.de/anbieter/anrufer.info/entscheidungen-json"
        },
        {
            "id": "monitoring_alerts",
            "label": "Monitoring Alerts",
            "event": "monitoring.alert",
            "schema": "monitoring-alert-delivery.v1",
            "example_url": "https://saferpage.de/alarme/anrufer.info/delivery-json"
        },
        {
            "id": "monitoring_alert_dispatch_runner",
            "label": "Monitoring Alert Dispatch Runner",
            "event": "monitoring.alert.dispatch",
            "schema": "monitoring-alert-dispatch-runner.v1",
            "example_url": "https://saferpage.de/alarme/dispatch-runner-json"
        },
        {
            "id": "operator_delivery_credential_preflight",
            "label": "Delivery Credential Preflight",
            "event": "operator.delivery.credential_preflight",
            "schema": "operator-delivery-credential-preflight.v1",
            "example_url": "https://saferpage.de/integrationen/delivery-credential-preflight-json"
        },
        {
            "id": "security_feed_import",
            "label": "Security Feed Import Preview",
            "event": "security.feed.import_preview",
            "schema": "security-feed-import-preview.v1",
            "example_url": "https://saferpage.de/sicherheit/anrufer.info/feed-import-json"
        },
        {
            "id": "security_feed_live_connector",
            "label": "Security Feed Live Connector",
            "event": "security.feed.live_connector",
            "schema": "security-feed-live-connector.v1",
            "example_url": "https://saferpage.de/sicherheit/anrufer.info/feed-live-json"
        },
        {
            "id": "security_feed_schedule",
            "label": "Security Feed Schedule",
            "event": "security.feed.schedule",
            "schema": "security-feed-schedule.v1",
            "example_url": "https://saferpage.de/sicherheit/anrufer.info/feed-schedule-json"
        },
        {
            "id": "security_feed_storage",
            "label": "Security Feed Storage",
            "event": "security.feed.storage_plan",
            "schema": "security-feed-storage.v1",
            "example_url": "https://saferpage.de/sicherheit/anrufer.info/feed-storage-json"
        },
        {
            "id": "security_feed_storage_readiness",
            "label": "Security Feed Storage Readiness",
            "event": "security.feed.storage_readiness",
            "schema": "security-feed-storage-readiness.v1",
            "example_url": "https://saferpage.de/sicherheit/feed-storage-readiness-json"
        },
        {
            "id": "security_feed_activation",
            "label": "Security Feed Activation",
            "event": "security.feed.activation",
            "schema": "security-feed-activation.v1",
            "example_url": "https://saferpage.de/sicherheit/anrufer.info/feed-activation-json"
        },
        {
            "id": "security_feed_secrets",
            "label": "Security Feed Secrets",
            "event": "security.feed.secrets_readiness",
            "schema": "security-feed-secrets.v1",
            "example_url": "https://saferpage.de/sicherheit/anrufer.info/feed-secrets-json"
        },
        {
            "id": "security_feed_credential_preflight",
            "label": "Security Feed Credential Preflight",
            "event": "security.feed.credential_preflight",
            "schema": "security-feed-credential-preflight.v1",
            "example_url": "https://saferpage.de/sicherheit/feed-credential-preflight-json"
        },
        {
            "id": "security_feed_runner",
            "label": "Security Feed Runner State",
            "event": "security.feed.runner_state",
            "schema": "security-feed-runner-state.v1",
            "example_url": "https://saferpage.de/sicherheit/feed-runner-json"
        },
        {
            "id": "security_feed_launch_board",
            "label": "Security Feed Launch Board",
            "event": "security.feed.launch_board",
            "schema": "security-feed-launch-board.v1",
            "example_url": "https://saferpage.de/sicherheit/feed-launch-board-json"
        },
        {
            "id": "security_feed_approval_dossier",
            "label": "Security Feed Approval Dossier",
            "event": "security.feed.approval_dossier",
            "schema": "security-feed-approval-dossier.v1",
            "example_url": "https://saferpage.de/sicherheit/feed-approval-dossier-json"
        },
        {
            "id": "api_key_readiness",
            "label": "API Key Readiness",
            "event": "operator.api_key.readiness",
            "schema": "operator-api-key-readiness.v1",
            "example_url": "https://saferpage.de/api-zugriff/key-readiness-json"
        },
        {
            "id": "api_runtime_gate_probe",
            "label": "API Runtime Gate Probe",
            "event": "operator.api.runtime_gate_probe",
            "schema": "operator-api-runtime-gate-probe.v1",
            "example_url": "https://saferpage.de/api-zugriff/runtime-gate-probe-json"
        },
        {
            "id": "crawler_operations",
            "label": "DACH Crawler Operations",
            "event": "crawler.operations.snapshot",
            "schema": "dach-crawler-operations.v1",
            "example_url": "https://saferpage.de/crawler/ops-json"
        },
        {
            "id": "crawler_timer_runner",
            "label": "DACH Crawler Timer Runner",
            "event": "crawler.timer.runner_state",
            "schema": "dach-crawler-timer-runner.v1",
            "example_url": "https://saferpage.de/crawler/timer-runner-json"
        },
        {
            "id": "trust_ai_answer_citations",
            "label": "Trust AI Answer Citations",
            "event": "trust.ai_answer.citations",
            "schema": "trust-ai-answer-citations.v1",
            "example_url": "https://saferpage.de/trust-faq/anrufer.info/assistant-citations-json"
        },
        {
            "id": "portfolio_scan_dispatch",
            "label": "Portfolio Scan Dispatch",
            "event": "saferpage.portfolio.scan_dispatch",
            "schema": "portfolio-scan-dispatch.v1",
            "example_url": "https://saferpage.de/portfolio/dispatch-json"
        },
        {
            "id": "portfolio_digest",
            "label": "Portfolio Digest Delivery",
            "event": "saferpage.portfolio.digest",
            "schema": "portfolio-digest-delivery.v1",
            "example_url": "https://saferpage.de/portfolio/digest-delivery-json"
        }
    ],
    "security_controls": [
        {
            "id": "secret_storage",
            "label": "Secrets nur serverseitig speichern",
            "requirement": "Webhook-URLs, Tokens und API-Keys in Secret Manager oder Environment, nie im öffentlichen Export."
        },
        {
            "id": "signature",
            "label": "Payload-Signatur prüfen",
            "requirement": "HMAC mit X-SaferPage-Signature oder provider-spezifischer Signatur validieren."
        },
        {
            "id": "idempotency",
            "label": "Deduplizierung erzwingen",
            "requirement": "X-SaferPage-Idempotency-Key als External-ID für Jira/Webhook/Queue nutzen."
        },
        {
            "id": "rate_limit",
            "label": "Rate-Limits und Retry-Policy setzen",
            "requirement": "Exponential Backoff, Dead-Letter-Queue und Betreiber-Alarm bei wiederholtem Fehler."
        },
        {
            "id": "least_privilege",
            "label": "Minimale Berechtigungen",
            "requirement": "Jira-/Mail-/Webhook-Token nur für benötigte Projekte, Kanaele und Events freigeben."
        }
    ],
    "dry_run": {
        "enabled_by_query_flags": true,
        "example_query": "https://saferpage.de/integrationen/setup-json?channels=webhook,jira&webhook_url_set=yes&webhook_secret_set=yes&jira_base_set=yes&jira_auth_set=yes&jira_project_set=yes",
        "does_not_send": true
    },
    "links": {
        "html": "https://saferpage.de/integrationen",
        "json": "https://saferpage.de/integrationen/setup-json",
        "csv": "https://saferpage.de/integrationen/setup-csv",
        "markdown": "https://saferpage.de/integrationen/setup-md",
        "delivery_credential_preflight": "https://saferpage.de/integrationen/delivery-credential-preflight-json",
        "operator_workbench": "https://saferpage.de/betreiber",
        "comparison": "https://saferpage.de/vergleich",
        "parity_readiness": "https://saferpage.de/vergleich/parity-readiness-json",
        "schemas": "https://saferpage.de/schemas"
    },
    "disclaimer": "Dieses Setup versendet nichts und zeigt keine Secrets. Produktive Zustellung braucht Betreiberfreigabe, Zielsystemberechtigungen, Datenschutz-/Security-Abnahme und Monitoring."
}
