> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corgea.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Slack

> Slack-Benachrichtigungen mit Corgea-Webhooks einrichten

Senden Sie Corgea-Benachrichtigungen an Slack, indem Sie unter **Integrations → Webhooks** einen Webhook aus Slack Workflow Builder verbinden.

<Warning>
  Die separate Zeile **Slack** unter Automation Integrations ist veraltet. Erstellen Sie neue Slack-Benachrichtigungen über **Webhooks**. Bestehende Slack-Integrationen funktionieren weiterhin und lassen sich über **View All** testen oder löschen.
</Warning>

<Frame>
  <img src="https://mintcdn.com/corgea/bUShOerLaxHbdmO7/images/webhooks/webhooks_integrations.png?fit=max&auto=format&n=bUShOerLaxHbdmO7&q=85&s=e84b9d7d75569f68d644ada376ea16bf" alt="Automatisierungsintegrationen mit Slack als veraltet gekennzeichnet" style={{ borderRadius: '0.5rem' }} width="1641" height="240" data-path="images/webhooks/webhooks_integrations.png" />
</Frame>

## Voraussetzungen

* Admin-Zugriff in Corgea
* Berechtigung, Workflows in Ihrem Slack-Arbeitsbereich zu erstellen

## Einrichten des Slack Workflow Builders

Mit Slack Workflow Builder können Sie die **Top-Level-Felder** des Corgea-Payloads einer Channel-Nachricht zuordnen.

<Warning>
  Slack Workflow Builder unterstützt nur **JSON-Schlüssel auf oberster Ebene**. Verschachtelte Pfade wie `data.message` oder `data.summary.total_issues` werden **nicht unterstützt** und führen häufig zu HTTP 400 `invalid_workflow_input`.

  Bei `Type = Slack` und einer Workflow-Builder-URL (`hooks.slack.com/triggers/...`) flacht Corgea **nur** `scan.started`, `scan.completed`, `scan.failed` und `webhook.test` zu einem Top-Level-Payload ab. Ordnen Sie `message`, `pull_request_id`, `scan_url` und `true_positive_count` zu, nicht verschachtelte `data.*`-Felder.

  Andere abonnierte Ereignisse auf demselben Slack-Webhook (zum Beispiel `issue.status_changed` oder `sla.violation`) erhalten weiterhin die verschachtelte Nachricht. Bevorzugen Sie Scan-Lifecycle-Abonnements für Workflow Builder oder verwenden Sie einen benutzerdefinierten Body / nicht-Slack-Ziel für diese Ereignisse.
</Warning>

<Steps>
  <Step title="Workflow erstellen">
    1. Öffnen Sie in Slack Ihr Arbeitsbereichs-Menü
    2. Öffnen Sie **Tools → Workflow Builder**
    3. Klicken Sie auf **Create**
    4. Wählen Sie **Webhook** als Trigger
    5. Nennen Sie den Workflow und fahren Sie fort
  </Step>

  <Step title="Workflowschritte konfigurieren">
    1. Kopieren Sie die Webhook-URL des Workflow-Builders (`hooks.slack.com/triggers/...`)
    2. Fügen Sie im **Webhook**-Auslöser Schritt **Variablen hinzu**, deren Namen den obersten Schlüsseln von Corgea entsprechen (Slack erkennt Payload-Felder nicht automatisch). Fügen Sie mindestens hinzu: `message`, `pull_request_id`, `scan_url`, `true_positive_count`, `scan_id`, `event_type`, `project_name`, `status`, `branch`, `company`
    3. Fügen Sie den Schritt **Send a message** hinzu. Corgea veröffentlicht nicht selbstständig in Slack.
    4. Fügen Sie die Webhook-Variablen über **Insert a variable** in die Nachricht ein. Direkt eingegebener Text wie `{message}` funktioniert nicht.

    Beispiel für einen flachen `scan.completed`-Text, den Corgea an den Workflow Builder sendet (verschachtelte `project`, `summary` und `scheduled_scan_ids` **sind nicht** enthalten):

    ```json theme={null}
    {
      "event_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "event_type": "scan.completed",
      "timestamp": "2025-01-15T15:45:00.000Z",
      "message": "Scan completed for My Project (PR #42): 5 true-positive findings. View: https://app.corgea.app/project/proj-uuid-9012/?scan_id=scan-uuid-7890",
      "scan_id": "scan-uuid-7890",
      "scan_url": "https://app.corgea.app/project/proj-uuid-9012/?scan_id=scan-uuid-7890",
      "scan_type": "full",
      "pull_request_id": "42",
      "true_positive_count": 5,
      "status": "completed",
      "branch": "feature/auth",
      "project_name": "My Project",
      "company": "comp-uuid-1234",
      "run_id": "run-abc",
      "engine": "corgea"
    }
    ```

    Bei `scan.failed` enthält das flache Payload außerdem das Top-Level-Feld `error`, sofern vorhanden.

    Beginnen Sie mit `message` für eine versandfertige Zusammenfassung, fügen Sie dann `pull_request_id`, `scan_url` und `true_positive_count` für die PR-Triage hinzu.

    Die `message` eines abgeschlossenen Scans verwendet die Anzahl der **True Positives**, nicht die Gesamtzahl der Issues:
    `Scan completed for {project} (PR #N): X true-positive finding(s) [(Y with fixes)]. View: {scan_url}`
    `Y with fixes` zählt nur Fixes für diese True-Positive-Findings.

    5. Beenden und veröffentlichen Sie den Workflow
  </Step>

  <Step title="In Corgea konfigurieren">
    1. Öffnen Sie **Integrations → Webhooks**
    2. Erstellen Sie einen Webhook
    3. Setzen Sie **Type** auf `Slack`
    4. Geben Sie einen Namen ein und fügen Sie die Workflow-Builder-URL ein
    5. Abonnieren Sie `scan.completed` und/oder `scan.failed`, optional `scan.started`
    6. Optional unter **Scan Event Filters**:
       * **Only pull request / merge request scans** — überspringt Scans ohne PR oder MR
       * **Only completed scans with true-positive findings** — überspringt `scan.completed`, wenn `true_positive_count` gleich 0 ist; `scan.failed` bleibt unverändert
    7. Klicken Sie auf **Create Webhook** und speichern Sie den einmalig angezeigten Secret Key
    8. Prüfen Sie die Zustellung mit **Test**
  </Step>
</Steps>

## Erwartetes Verhalten beim Webhook-Test

Wenn Sie im Slack Workflow Builder-Ziel auf **Test Webhook** klicken, sendet Corgea ein einfaches Beispiel wie:

```json theme={null}
{
  "event_id": "...",
  "event_type": "webhook.test",
  "timestamp": "2025-01-15T15:45:00.000Z",
  "message": "This is a test webhook from Corgea",
  "test": true,
  "webhook_name": "My Slack Hook",
  "company": "comp-uuid-1234",
  "company_id": "comp-uuid-1234",
  "scan_id": "00000000-0000-0000-0000-000000000000",
  "scan_url": "https://app.corgea.app/project/example/?scan_id=00000000-0000-0000-0000-000000000000",
  "scan_type": "full",
  "pull_request_id": "123",
  "true_positive_count": 2,
  "status": "completed",
  "branch": "main",
  "project_name": "Example Project",
  "run_id": "test-run",
  "engine": "corgea"
}
```

`company` entspricht den Live-Scan-Events. `company_id` enthält aus Kompatibilitätsgründen denselben Wert für ältere Test-Consumer. Andere Ziele als Slack erhalten dieselben Felder im regulären Envelope unter `data`.

Erwartetes Ergebnis:

* HTTP 2xx von Slack (nicht 400 `invalid_workflow_input`)
* Eine nicht-leere Slack-Nachricht, wenn Sie die Top-Level-Variable `message` zuordnen
* Variablennamen, die mit Produktions-Scan-Ereignissen übereinstimmen (damit Sie PR # / Scan-Link / TP-Anzahl während des Tests zuordnen können)

## Benachrichtigungsinhalt

Für Slack Workflow Builder (`Type = Slack` + `hooks.slack.com/triggers/...`), ordnen Sie diese **obersten** Felder zu:

| Feld                  | Beschreibung                                                                   |
| --------------------- | ------------------------------------------------------------------------------ |
| `message`             | Versandbereite Zusammenfassung (PR #, TP-Anzahl, Scan-URL, falls verfügbar)    |
| `event_type`          | z.B. `scan.completed`, `scan.failed`, `webhook.test`                           |
| `event_id`            | UUID des Zustellungs-Events                                                    |
| `timestamp`           | ISO 8601 Zeitstempel                                                           |
| `scan_id`             | Scan-UUID                                                                      |
| `scan_url`            | Deep Link zum Scan in Corgea                                                   |
| `scan_type`           | Scan-Typ-String                                                                |
| `pull_request_id`     | PR/MR-Nummer, wenn dies ein Pull Request-Scan ist (leer, wenn kein PR)         |
| `true_positive_count` | Nicht gelöschte Security-Findings ohne False Positives und Code-Quality-Issues |
| `status`              | `started`, `completed` oder `failed`                                           |
| `branch`              | Git-Branch                                                                     |
| `project_name`        | Projektname                                                                    |
| `company`             | Firmen-ID (gleicher Schlüssel wie bei Live-Scan-Daten)                         |
| `company_id`          | Gleicher Wert wie `company` (nur `webhook.test`; nicht bei live `scan.*`)      |
| `run_id`              | Scan-Durchlauf-ID                                                              |
| `engine`              | Scanner-Engine                                                                 |
| `error`               | Fehlergrund (nur `scan.failed`, wenn vorhanden)                                |
| `test`                | `true` nur bei `webhook.test`                                                  |
| `webhook_name`        | Webhook-Anzeigename (nur `webhook.test`)                                       |

`true_positive_count` entspricht der Sicherheitszählung der Scan-Benutzeroberfläche: schließt `status=false_positive`, `hold_reason=false_positive` und `detected_by=code-quality` aus. Verschachtelte Felder wie `summary`, `project`, `scheduled_scan_ids`, `scan_errors`, `created_at` und `processed_at` bleiben unter `data` für Zapier/Andere verfügbar (und in der Lieferhistorie), werden jedoch nicht für den Slack Workflow Builder abgeflacht.

## Hinweise zur Kompatibilität

* **Zapier / Other:** erhalten weiterhin den verschachtelten Envelope (`event_id`, `event_type`, `timestamp`, `data`) einschließlich `data.message`, `data.summary` und der neuen Triage-Felder unter `data`.
* **Bestehende Slack Workflow Builder-Konfigurationen**, die verschachtelte `data.*` abbildeten, funktionieren nicht – auf oberste Ebenen (`message`, nicht `data.message`) neu zuordnen.
* Die **Delivery History** in Corgea speichert den verschachtelten Envelope, auch wenn Slack einen flachen HTTP-Body erhält.
* **Nicht-Scan-Ereignisse** auf einem Slack WF-Webhooks werden nicht abgeflacht; behalten Sie diese bei Zapier/Other oder einem benutzerdefinierten Body, wenn Sie nutzbare Slack-Variablen benötigen.

## Incoming Webhooks und Workflow Builder

* **Empfohlen:** Workflow-Builder-URLs (`hooks.slack.com/triggers/...`) mit einem Schritt **Send a message**. Corgea flacht `scan.*` und `webhook.test` für `Type = Slack` ab.
* **Eingehende Webhooks** (`hooks.slack.com/services/...`): Werden beim Speichern abgelehnt, es sei denn, Sie fügen einen [benutzerdefinierten Body](/de/webhooks) hinzu, dessen gerendertes JSON ein oberstes nicht-leeres Stringfeld `text` enthält (Slack-Fallback-Text; optionale `blocks` sind daneben erlaubt). `{"text": "{{message}}"}` funktioniert nur, wenn der Webhook auf `scan.started` / `scan.completed` / `scan.failed` / `scheduled_scan.daily_report` beschränkt ist (`{{message}}` ist für andere Ereignisse leer). Ohne einen gültigen Body schlagen Zustellungen fehl und der Webhook kann automatisch pausieren.

## Verwalten bestehender Slack-Integrationen

Wenn Sie noch Integrationen in der veralteten Slack-Zeile haben, öffnen Sie **View All**, um sie zu testen oder zu löschen:

<Frame>
  <img src="https://mintcdn.com/corgea/bUShOerLaxHbdmO7/images/webhooks/slack_view_all_modal.png?fit=max&auto=format&n=bUShOerLaxHbdmO7&q=85&s=82712d185c56db9be7b35b1e8eff1931" alt="Alle Slack-Integrationen-Modale zur Verwaltung bestehender Integrationen anzeigen" style={{ borderRadius: '0.5rem' }} width="839" height="350" data-path="images/webhooks/slack_view_all_modal.png" />
</Frame>

## Anpassungsoptionen

Mit dem Workflow-Builder können Sie:

* Nachrichten nach Schweregrad oder Projekt an verschiedene Kanäle weiterleiten
* Erinnerungen oder Folgeschritte hinzufügen
* Bedingte Logik basierend auf Scan-Ergebnissen erstellen (zum Beispiel nur benachrichtigen, wenn `true_positive_count` größer als 0 ist)
* Die gleichen Payload-Variablen über mehrere Aktionen wiederverwenden

Verwenden Sie bevorzugt Corgeas **Scan Event Filters** (nur PRs sowie abgeschlossene Scans mit Findings), um unnötige Benachrichtigungen aus geplanten oder vollständigen Scans ohne Drittanbieter wie Zapier zu vermeiden.

## Zusätzliche Ressourcen

* [Slack Workflow Builder Anleitung](https://slack.com/help/articles/360035692513-Guide-to-Workflow-Builder)
* [JSON für Workflow Builder flach machen](https://slack.dev/flatten-json-for-workflow-builder/)
* [Corgea Webhooks](/de/webhooks)
