Формат webhook-уведомлений

Webhook-уведомления позволяют интегрировать UpRadar с любой внешней системой: Slack, PagerDuty, собственным сервером обработки инцидентов или корпоративным чат-ботом. При каждом событии инцидента UpRadar отправляет HTTP POST-запрос на указанный вами URL с JSON-телом в стандартизированном формате.

Формат payload

Пример тела запроса для события incident_down:

{
  "event": "incident_down",
  "monitor": {
    "id": 42,
    "name": "API Production",
    "url": "https://api.example.com/health",
    "type": "http"
  },
  "incident": {
    "id": 101,
    "startedAt": "2024-01-15T10:30:00Z",
    "reason": "HTTP 503"
  },
  "project_id": 5,
  "timestamp": "2024-01-15T10:30:05Z"
}

Пример тела запроса для события incident_up (добавляется поле resolvedAt):

{
  "event": "incident_up",
  "monitor": {
    "id": 42,
    "name": "API Production",
    "url": "https://api.example.com/health",
    "type": "http"
  },
  "incident": {
    "id": 101,
    "startedAt": "2024-01-15T10:30:00Z",
    "resolvedAt": "2024-01-15T11:05:33Z",
    "reason": "HTTP 503"
  },
  "project_id": 5,
  "timestamp": "2024-01-15T11:05:38Z"
}

Описание полей

event
Тип события: incident_down (монитор упал) или incident_up (монитор восстановлен).
monitor.id
Уникальный числовой идентификатор монитора в UpRadar.
monitor.type
Тип монитора: http, ssl или domain.
incident.startedAt
Время начала инцидента в формате ISO 8601 (UTC).
incident.resolvedAt
Время разрешения инцидента (только в событии incident_up).
incident.reason
Причина сбоя: HTTP-статус, текст ошибки или тип таймаута.
project_id
Числовой идентификатор проекта, к которому относится монитор.
timestamp
Время отправки webhook-запроса в формате ISO 8601 (UTC).

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

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

Content-Type: application/json
User-Agent: UpRadar/1.0

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

UpRadar выполняет однократную попытку доставки с таймаутом 5 секунд. Если ваш сервер не ответил в течение этого времени или вернул код ответа, отличный от 2xx, событие фиксируется в журнале ошибок webhook-интеграции в личном кабинете.

Идемпотентность. Поскольку запрос может быть доставлен несколько раз, рекомендуется использовать incident.id как уникальный ключ события на вашей стороне — это предотвратит дублирование обработки одного и того же инцидента.