# Webhook-Benachrichtigungen

Source: https://instatus.com/help/de/status-page/notifications/webhook

## Webhook-Abonnent hinzufügen

Melden Sie sich bei Instatus unter [instatus.com/login](https://dashboard.instatus.com/login) an und wählen Sie Ihre Statusseite.

Gehen Sie zu **Abonnenten** und dann zu **Webhook**.

Klicken Sie auf **Webhook-Abonnent hinzufügen**,

Es erscheint ein neues Formular, in dem Sie eingeben können:

- Webhook-URL
- E-Mail-Adresse

![Webhook-Abonnent](https://instatus.com/help/notification/webhook1.png)

Wir senden Anfragen an Ihre URL in diesem [Format](https://instatus.com/help/de/webhooks),
und bei einem Problem mit der URL geht eine E-Mail an die angegebene Adresse.

Sie können Ihrem Webhook-Abonnenten einen Namen geben, indem Sie ihn anklicken und im Formular einen Namen eingeben; über „Abmelden“ können Sie diesen Abonnenten auch löschen.

## Überprüfung der Webhook-Payload

**Es wird dringend empfohlen, die Webhook-Payload im Webhook-Endpunkt zu validieren.**

Wir signieren Webhook-Payloads mit einem Secret und senden die Signatur im Header `x-instatus-webhook-signature`. Mit dieser Signatur können Sie prüfen, dass der Webhook von Instatus stammt.

### Schritte zur Überprüfung des Webhooks

1. Holen Sie sich Ihr **Webhook-Secret** aus dem Dashboard (Sie finden es beim Bearbeiten oder Erstellen eines Webhooks und können es dort auch anpassen).

![Webhook-Secret](https://instatus.com/help/notification/webhook-secret-example.png)

2. Richten Sie auf Ihrem Server einen neuen Endpunkt ein, der den Webhook empfängt.

3. Vergleichen Sie die Signatur zur Validierung mit der auf Ihrem Server erzeugten Signatur.

4. Stimmen die Signaturen überein, verarbeiten Sie den Webhook.

#### Codebeispiel

```javascript
import crypto from 'crypto'
import express from 'express'

const app = express()
app.use(express.json())

const WEBHOOK_SECRET = 'your-webhook-secret'

function isVerifiedPayload(payload, signature, secret) {
  const hmac = crypto.createHmac('sha256', secret)
  const digest = hmac.update(JSON.stringify(payload)).digest('hex')
  return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature))
}

app.post('/endpoint/to/webhook', (req, res) => {
  const payload = req.body
  const signature = req.header('x-instatus-webhook-signature')

  if (!signature) {
    return res.status(400).send('Signature missing')
  }

  if (!isVerifiedPayload(payload, signature, WEBHOOK_SECRET)) {
    return res.status(401).send('Invalid signature')
  }

  // Process the valid webhook
  res.status(200).send('Webhook received')
})

app.listen(3000, () => console.log('Server running on port 3000'))
```

### Warum die Überprüfung wichtig ist

- **Sichert die Authentizität**: Stellt sicher, dass der Webhook von unserer Plattform stammt.
- **Verhindert Manipulation**: Erkennt Änderungen an der Payload.
- **Erhöht die Sicherheit**: Schützt vor Replay-Angriffen und unbefugtem Zugriff.

- [X-Benachrichtigungen](https://instatus.com/help/de/status-page/notifications/x): Erfahren Sie, wie Sie X-Benachrichtigungen senden.
