Skip to content

Webhook-интеграции ​

Webhook — это исходящий HTTP-запрос, который Elerio отправляет на ваш URL при изменении состояния монитора. С его помощью инциденты попадают в PagerDuty, Slack, Mattermost или любой собственный приёмник.

Главное отличие от многих сервисов: привязка идёт к конкретному монитору, а не ко всему аккаунту. Продакшн можно направить в PagerDuty, а стейджинг — в Slack-канал #noise.

Создание endpoint'а ​

В разделе Оповещения → Webhook добавьте endpoint:

  • Имя — для себя, чтобы различать в списке.
  • URL — куда слать запросы.
  • Секрет — генерируется автоматически (можно задать свой). Используется для подписи — см. ниже.

После создания привяжите endpoint к нужным мониторам через выбор каналов в форме монитора. Один endpoint можно привязать к нескольким мониторам и наоборот.

Кнопка «Тест» отправляет пробный запрос немедленно, чтобы проверить приёмник.

Формат запроса ​

Elerio шлёт POST с телом в формате JSON и следующими заголовками:

ЗаголовокЗначение
X-Elerio-Eventтип события (например, открытие/закрытие инцидента)
X-Elerio-Webhook-Idидентификатор доставки
X-Elerio-Delivery-Attemptномер попытки (с 1)
X-Elerio-Signatureподпись sha256=<hex> (см. ниже)

Проверка подписи ​

Чтобы убедиться, что запрос пришёл от Elerio, а не подделан, проверьте подпись. Elerio считает HMAC-SHA256 от тела запроса с вашим секретом и кладёт результат в заголовок X-Elerio-Signature в формате sha256=<hex>.

На своей стороне вычислите HMAC от сырого тела (до парсинга JSON) тем же секретом и сравните значения — обязательно constant-time-сравнением.

js
import crypto from 'node:crypto';

function verify(rawBody, signatureHeader, secret) {
  const expected =
    'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  const a = Buffer.from(signatureHeader);
  const b = Buffer.from(expected);
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}
python
import hmac, hashlib

def verify(raw_body: bytes, signature_header: str, secret: str) -> bool:
    expected = "sha256=" + hmac.new(
        secret.encode(), raw_body, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature_header, expected)

Если подпись не совпала — отклоните запрос.

Повторные попытки ​

Если ваш приёмник недоступен или вернул ошибку, Elerio повторяет доставку с нарастающей паузой: примерно через 5 секунд, 30 секунд и 5 минут. После исчерпания попыток доставка откладывается в «мёртвую очередь» и больше не повторяется. Поэтому приёмник стоит сделать идемпотентным — ориентируйтесь на X-Elerio-Webhook-Id.

Безопасность ​

URL endpoint'а проверяется при создании: Elerio не позволяет направлять webhook'и на приватные и внутренние адреса. Перевыпустить секрет можно в любой момент — старый сразу перестанет подходить.

Доступность ​

Webhook-канал доступен начиная с тарифа Supporter (до 5 endpoint'ов); на Business и Enterprise число endpoint'ов не ограничено. См. Тарифы и лимиты.