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-сравнением.
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);
}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'ов не ограничено. См. Тарифы и лимиты.