Table of contents

Webhooks

Webhooks — это канал уведомлений в Хоуке, который позволяет отправлять информацию о событиях и системные алерты на ваш собственный HTTP(S) endpoint. Каждый раз, когда срабатывает настроенное правило, Хоук отправляет POST-запрос с JSON-данными на указанный вами адрес.

Вы можете настроить веб-хуки на двух уровнях:

  1. На уровне проекта: для автоматизации обработки ошибок (например, создания тикетов или запуска workflow).
  2. На уровне пользователя: для получения персональных уведомлений (назначение ответственным, системные сообщения).

В проекте

  1. Перейдите в Настройки проектаУведомления.
  2. Создайте новый сценарий или отредактируйте существующий.
  3. В разделе Где получать активируйте чекбокс Webhook и введите URL вашего обработчика.
  4. Настройте фильтры (например, «Если ошибка встречалась более 500 раз за 1 час).

В аккаунте пользователя

  1. Перейдите в Аккаунт Уведомления.
  2. В разделе Каналы найдите Webhook и укажите URL.


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

Каждый запрос содержит следующие заголовки:

  • Content-Type: application/json
  • User-Agent: Hawk-Webhook/1.0
  • X-Hawk-Notification: <type> — тип события (например, event, assignee).

Базовая структура тела (JSON)

{   "type": "event",   "payload": {} }
  • type — строковый идентификатор типа уведомления.
  • payload — объект с данными.


1. Проектные события (event / several-events)

Отправляются при возникновении ошибок в коде приложения.

  • Объект project: содержит id, name, workspaceId и ссылку на иконку image.
  • Массив events: список инцидентов, каждый из которых включает: title: заголовок ошибки.. backtrace: стек вызовов (файл, строка, функция). totalCount и usersAffected: общее количество повторов и затронутых пользователей. timestamp: время события.
{ "type": "event", "payload": { "project": { "id": "string", "name": "string", "workspaceId": "string", "image": "string|null" }, "events": [ { "event": { "id": "string|null", "groupHash": "string", "totalCount": "number", "catcherType": "string", "timestamp": "number|string", "usersAffected": "number", "title": "string", "type": "string|null", "backtrace": [ { "file": "string", "line": "number", "column": "number|null", "function": "string|null" } ] }, "newCount": "number", "daysRepeated": "number", "usersAffected": "number|null", "repetitionId": "string|null" } ], "period": "number|null" } }

2. Персональные уведомления (assignee)

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

  • Включает данные проекта, детали события (event), а также объекты assignedBy (кто назначил) и assignee (кто назначен) с их именами и email.

3. Системные и биллинговые уведомления

Обычно приходят в Webhook пользователя и содержат объект workspace:

  • block-workspace: уведомления о блокировке.
  • payment-failed: уведомления о неудачной оплате (с указанием причины reason).
  • events-limit-almost-reached: предупреждение о достижении лимита тарифного плана (поля eventsCount и eventsLimit).
  • payment-success: данные об успешной оплате и параметрах текущего тарифа plan.
  • workspace-invite: ссылка и название воркспейса для вступления в команду.
  • Дополнительно поддерживаются: blocked-workspace-reminder, days-limit-almost-reached, sign-up, password-reset.
{ "type": "block-workspace", "payload": { "workspace": { "id": "string", "name": "string", "image": "string|null" } } }
{ "type": "payment-failed", "payload": { "workspace": { "id": "string", "name": "string", "image": "string|null" }, "reason": "string|null" } }
  • Протокол: поддерживаются только адреса HTTP или HTTPS.
  • Порты: только 80 (http) и 443 (https).
  • Хосты/адреса: localhost, внутренние домены и private/reserved IP запрещены (включая DNS-резолв).
  • Таймаут: сервер должен ответить в течение 10 секунд, иначе попытка доставки считается неудачной. Повторные попытки доставки не выполняются (механизм acknowledge отсутствует).
  • Редиректы: Хоук не следует по редиректам (ответы 3xx игнорируются).
  • Безопасность: payload формируется строго по белому списку полей для каждого типа уведомления; лишние и чувствительные поля не передаются.