05_Вебхуки

Версия 2.2 от Bimit Administrator на 13.03.2026, 15:48

Webhook - это механизм автоматического оповещения вашей системы о событиях, происходящих в проектах вашей организации.

Webhook отправляется HTTP POST запросом на URL, указанный в настройках организации.

Заголовки запроса

HeaderОписание
Content-Typeapplication/json
X-Idempotency-KeyКлюч идемпотентности
X-HMAC-SpecКод проверки подлинности сообщений

Пример

Content-Type: application/json

X-Idempotency-Key: c0a80108-9ce6-1d7f-819c-e66fc6cc0001

X-HMAC-Spec:698e2329aa17f15e049694e87425f1a2a1c27271d9d472c377422d57d7c779ec

 

X-Idempotency-Key

Содержит уникальный идентификатор события.

Зачем это нужно

Webhook может быть отправлен несколько раз, например если:

  • endpoint вернул не 200
  • произошёл сетевой сбой
  • клиент долго отвечал (более 30 секунд)

Чтобы избежать дублирования обработки, сервер получателя должен:

  1. сохранить X-Idempotency-Key
  2. проверять его при каждом запросе
  3. игнорировать уже обработанные события

X-HMAC-Spec

Используется для проверки подлинности webhook. Подпись создаётся с использованием HMAC SHA256.

Алгоритм:

signature = HMAC_SHA256(secret, requestBody)

где:

  • secret — токен организации
  • requestBody — raw JSON webhook payload

Перед вычислением подписи JSON проходит нормализацию, чтобы обеспечить одинаковый результат хеширования на разных платформах.

Нормализация JSON

Перед вычислением HMAC выполняются следующие правила:

  1. Поля объектов сортируются в алфавитном порядке
  2. Используется компактный JSON
  3. Удаляются все пробелы и переносы строк
  4. Используется стандартная кодировка UTF-8

Это гарантирует, что одинаковый payload всегда создаёт одинаковую подпись независимо от реализации клиента.

Рекомендации для получателя webhook

Для корректной проверки подписи рекомендуется:

  1. Вычислить HMAC SHA256 либо у raw тела запроса, либо выполнить такую же нормализацию JSON
  2. Сравнить результат с X-HMAC-Spec

Если подпись не совпадает - запрос следует считать недоверенным.

 

Тело запроса

Webhook отправляется в формате JSON.

Пример:

{
  "author" : "Администратор",
  "data" : {
    "header" : "Модель(и) отключена(ы)"
  },
  "event" : "model_is_off",
  "project" : "01 checks",
  "target" : "Администратор",
}

Поля payload

ПолеТипОписание
authorstringавтор события
dataobjectдополнительные данные события
eventstringтип события
projectstringпроект, в котором произошло событие
targetstringпользователь, кому адресовано уведомление

Ожидаемый ответ

Webhook считается успешно доставленным, если endpoint возвращает:

  HTTP 200 OK

Любой другой HTTP код считается ошибкой доставки.

Повторные попытки (Retry)

Если endpoint возвращает:

  • любой код ≠ 200
  • или происходит сетевой сбой
  • клиент долго отвечал (более 30 секунд)

система автоматически повторит отправку.

Интервалы повторов:

ПопыткаЗадержка
130 секунд
260 секунд
3120 секунд

После всех попыток webhook считается недоставленным.

Требования к endpoint

Endpoint должен:

  • принимать HTTP POST
  • обрабатывать JSON
  • возвращать 200 OK, если webhook успешно обработан
  • отвечать не дольше 30 секунд