Уведомления через вебхук

Добавьте подписчика-вебхук

Войдите в Instatus на instatus.com/login и выберите свою страницу статуса.

Перейдите в Подписчики, затем Вебхук.

Нажмите Добавить подписчика-вебхук,

Откроется форма, где можно указать:

  • URL вебхука
  • Адрес email
Подписчик-вебхук

Мы будем отправлять запросы на ваш URL в этом формате, а на указанный адрес email придёт письмо, если с URL возникнут проблемы.

Подписчику-вебхуку можно дать название: нажмите на него и введите название в форме. Там же можно удалить подписчика, нажав «Отписаться».

Проверка полезной нагрузки вебхука

Настоятельно рекомендуется проверять полезную нагрузку вебхука на стороне вашего эндпоинта.

Мы подписываем полезную нагрузку вебхука секретом и передаём подпись в заголовке x-instatus-webhook-signature. Эта подпись позволяет убедиться, что вебхук пришёл от Instatus.

Как проверить вебхук

  1. Возьмите свой секрет вебхука из панели (его видно при создании или изменении вебхука, там же его можно изменить).
Секрет вебхука
  1. Создайте на своём сервере эндпоинт, который будет принимать вебхук.

  2. Сравните полученную подпись с подписью, сгенерированной вашим сервером.

  3. Если подписи совпадают, обработайте вебхук.

Пример кода

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

Зачем нужна проверка

  • Подтверждает подлинность: гарантирует, что вебхук отправлен нашей платформой.
  • Защищает от подмены: выявляет изменения в полезной нагрузке.
  • Повышает безопасность: защищает от атак повторного воспроизведения и несанкционированного доступа.