Вебхук — канал для тех, кто хочет связать оповещение со своими инструментами: скриптом, информационной доской состояния, системой дежурств, небольшим сервисом, который заводит заявку. Когда сайт перестаёт работать и когда он снова начинает, UptimeWire отправляет один HTTP-запрос на заданный вами адрес.
Note
Вебхуки разработаны и проверены на тестовом получателе. Доставка на живой публичный адрес пока независимо не проверена. Прежде чем на это рассчитывать, проверьте свой адрес тестовым сообщением.
Что передаёт вебхук
| Событие | Значение заголовка | Когда отправляется |
|---|---|---|
| Сбой | incident.opened |
Сбой подтверждён, инцидент открыт. |
| Восстановление | incident.closed |
Сайт снова отвечает, инцидент закрыт. |
| Тест | test |
Вы нажимаете «Send test message» в своём аккаунте. |
Предупреждения о сертификате, домене и DNS вебхуком не отправляются. Они приходят по почте и, если подключён, в Telegram.
Как настроить
Адрес задаётся в вашем аккаунте UptimeWire, в настройках уведомлений профиля. Добавить, изменить, проверить или удалить его может только владелец аккаунта.
- Введите адрес вашего получателя. Он должен начинаться с
https://. - Нажмите «Save address». При первом сохранении создаётся секрет подписи.
- Скопируйте секрет подписи в своего получателя. Он начинается с
whsec_. - Нажмите «Send test message». Результат показывается сразу.
Адрес один для всех сайтов в аккаунте. Выбрать отдельный адрес для одного сайта нельзя.
Какие адреса принимаются
UptimeWire отклоняет адрес, который:
- не использует
https://или содержит имя пользователя или пароль; - указывает на частную или внутреннюю сеть, на сам компьютер или на числовой обход вроде IP-адреса в десятичной или шестнадцатеричной записи;
- длиннее 2 048 знаков.
Адрес проверяется при сохранении и ещё раз перед отправкой каждого сообщения.
Сообщение
Запрос — это HTTP POST с телом в формате JSON. Этот пример показан для иллюстрации: значения выдуманы.
{
"id": "4182",
"event": "incident.opened",
"site": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Shop",
"url": "https://shop.example.com"
},
"incident": {
"id": "00000000-0000-0000-0000-000000000001",
"started_at": "2026-11-01T10:15:00Z",
"ended_at": null,
"duration_seconds": null,
"cause": "HTTP 503"
}
}
Для incident.closed тело такое же, но поля ended_at и duration_seconds заполнены. Для test поля site и incident равны null. Время указано по UTC.
Поле id определяет доставку, а не инцидент. Часть про инцидент показывает его состояние на момент отправки сообщения, поэтому запоздавшее incident.opened уже может содержать ended_at. Игнорируйте неизвестные вам поля, чтобы ваш получатель продолжал работать, если появится новое поле.
Заголовки
| Заголовок | Значение |
|---|---|
Content-Type |
application/json |
User-Agent |
UptimeWire-Webhook/1 |
X-UptimeWire-Delivery |
То же значение, что id в теле. |
X-UptimeWire-Event |
incident.opened, incident.closed или test. |
X-UptimeWire-Signature |
t=<unix time>,v1=<signature> |
Проверка подписи
Любой, кто узнает ваш адрес, может отправить на него запрос. Подпись позволяет вашему получателю отличить настоящее сообщение UptimeWire от поддельного.
Подпись — это HMAC с SHA-256, записанный в шестнадцатеричном виде. Она вычисляется вашим секретом подписи от текста, составленного из времени t, точки и необработанного тела.
Чтобы проверить сообщение:
- Прочитайте необработанное тело до того, как разбирать его как JSON. Разбор и повторная запись могут его изменить.
- Возьмите
tиv1из заголовкаX-UptimeWire-Signature. - Вычислите HMAC от
t, точки и необработанного тела с вашим секретом подписи. - Сравните свой результат с
v1сравнением за постоянное время. - Отклоните сообщение, если
tотличается от показаний ваших часов больше чем на пять минут.
Если вы создадите в аккаунте новый секрет, старый перестанет работать сразу. Периода совместной работы нет.
Доставка и повторные попытки
Доставка считается успешной, если ваш получатель отвечает статусом 2xx в течение пяти секунд. Всё остальное — сбой: другой статус, превышено время ожидания, проблема с сертификатом или отказ в соединении. UptimeWire не следует за перенаправлениями, и ответ 3xx — это сбой.
Неудавшееся сообщение пробуют отправить всего до пяти раз: сразу, затем через 1, 5, 30 и 120 минут. После последней попытки оно помечается как неудавшееся. UptimeWire не присылает вам об этом письмо, но панель показывает, что оповещение не доставлено. Адрес он не отключает.
В редких случаях одно и то же сообщение может прийти дважды, а сообщения могут приходить не по порядку. Сохраняйте id каждого обработанного сообщения и по started_at определяйте, какое состояние новее.
Что видно в вашем аккаунте
В карточке вебхука в вашем аккаунте есть журнал доставки с последними 20 сообщениями. Для каждого показаны сайт, тип сообщения, статус (доставлено, не удалось, будет повторено, ожидает или отменено), число попыток и результат, например «Answered 200».
Ограничения
- Один адрес на аккаунт, общий для всех сайтов. Изменить его может только владелец аккаунта.
- Только сбой и восстановление.
- Входит в тариф Starter и выше. Если аккаунт переходит на тариф без вебхуков, ожидающие сообщения отменяются, а новые не создаются. Адрес и секрет сохраняются, и после повышения тарифа сообщения возобновляются.
- Сообщения отправляются как минимум один раз, а не ровно один раз.
- UptimeWire не читает ответ, который присылает ваш получатель.
Устранение неполадок
- «This address is not allowed.» Адрес ведёт в частную или внутреннюю сеть. Используйте публичный адрес.
- "The address must start with https://." Обычный
http://не принимается. - «The address did not answer in 5 seconds.» Сначала отвечайте, а медленную работу делайте потом, например поставив сообщение в очередь.
- «Answered 3xx: redirects are not followed.» Укажите конечный адрес.
- Сообщения приходят, но подпись не совпадает. Проверьте, что вы вычисляете её от необработанного тела и используете текущий секрет.
- «Too many test messages.» Кнопка проверки ограничена пятью нажатиями в минуту.
Telegram, Discord, Slack и Microsoft Teams — отдельные каналы. Что передаёт каждый из них, смотрите в обзоре интеграций.