# Webhook-aviseringar

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

## Lägg till en webhook-prenumerant

Logga in på Instatus på [instatus.com/login](https://dashboard.instatus.com/login) och välj sedan din statussida.

Gå till **Prenumeranter** och sedan **Webhook**.

Klicka på **Lägg till webhook-prenumerant**,

Ett nytt formulär visas där du kan ange:

- Webhook-URL
- E-postadress

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

Vi skickar anrop till din URL enligt det här [formatet](https://instatus.com/help/sv/webhooks),
och ett mejl skickas till den angivna e-postadressen när det uppstår problem med URL:en.

Du kan ge din webhook-prenumerant ett namn genom att klicka på den och skriva ett namn i formuläret. Du kan också ta bort prenumeranten genom att klicka på Avsluta prenumeration.

## Verifiering av webhook-payload

**Vi rekommenderar starkt att du validerar webhook-payloaden i din webhook-endpoint.**

Vi signerar webhook-payloader med en hemlighet och skickar med signaturen i en header som heter `x-instatus-webhook-signature`. Med signaturen kan du verifiera att webhooken kom från Instatus.

### Steg för att verifiera en webhook

1. Hämta din **webhook-hemlighet** från dashboarden (du hittar den när du redigerar eller skapar en webhook, och du kan även anpassa den där).

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

2. Skapa en ny endpoint på din server som tar emot webhooken.

3. Jämför signaturen med den signatur din server genererar för att validera den.

4. Om signaturerna stämmer överens kan du behandla webhooken.

#### Kodexempel

```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'))
```

### Varför verifiering är viktigt

- **Säkerställer äkthet**: Garanterar att webhooken kommer från vår plattform.
- **Förhindrar manipulation**: Upptäcker ändringar i payloaden.
- **Ökar säkerheten**: Skyddar mot replay-attacker och obehörig åtkomst.

- [X-aviseringar](https://instatus.com/help/sv/status-page/notifications/x): Lär dig skicka aviseringar via X.
