Звонки от Uptime Kuma: как заставить телефон звонить при сбоях

В Uptime Kuma больше 90 способов уведомлений, но ни один не звонит на телефон. Как добавить звонковые оповещения о сбоях с помощью одного вебхука.

Содержание

Uptime Kuma поддерживает более 90 способов доставки уведомлений, но ни один из них не заставляет телефон звонить. Чтобы получать звонок, когда монитор фиксирует сбой, отправляйте уведомление типа Webhook из Uptime Kuma в канал Echobell с типом уведомления Звонок. В этом руководстве — точное произвольное тело запроса, способ развести оповещения о сбое и о восстановлении, и две ошибки, которые незаметно ломают всю схему.

Uptime Kuma — самый популярный self-hosted мониторинг доступности: около 90 000 звёзд на GitHub, версия 2.5.0 вышла в августе 2026 года. Он проверяет HTTP-эндпоинты, TCP-порты, DNS-записи, Docker-контейнеры и не только, и сбои он действительно определяет отлично.

Уязвимое место — последняя миля: доставить оповещение человеку, который спит.

Почему Uptime Kuma не может позвонить вам сам

Список уведомлений в Uptime Kuma длинный — Telegram, Discord, Slack, электронная почта, Gotify, ntfy и десятки других, — но все они доставляют сообщение. На сообщения действуют переключатель звонка на телефоне, режим «Не беспокоить» и режимы «Фокусирование» в iOS. В три часа ночи это означает: оповещение пришло, и ничего не произошло.

Встроенного способа «позвони мне» здесь нет. Обычно останавливаются на таких вариантах:

  • Twilio — поверх него можно построить голосовые звонки, но провайдер Twilio в Uptime Kuma отправляет SMS. Для звонков придётся написать промежуточный сервис, купить номер и платить за каждый вызов.
  • PagerDuty, Zenduty, Spike.sh, Splunk On-Call — они действительно звонят, но это полноценные платформы управления инцидентами с соответствующей ценой за каждого пользователя. Верный выбор, если нужны графики дежурств и политики эскалации; избыточный, если нужно всего лишь, чтобы телефон зазвонил.
  • SMS-шлюзы — SMS всё равно приходит как сообщение, а в iOS оно не пробивает «Фокусирование», если отправителя нет в списке разрешённых.

В репозитории Uptime Kuma уже давно открыт запрос на уведомления через VoIP-звонки. А пока обходной путь — универсальный провайдер Webhook: он умеет отправить что угодно на любой URL, и этого достаточно.

Что понадобится

  • Работающий экземпляр Uptime Kuma (руководство написано под 2.x; произвольное тело запроса работает и начиная с 1.23)
  • Установленный Echobell (App Store / Google Play)
  • Пять минут

Вашему экземпляру Uptime Kuma нужен исходящий HTTPS до hook.echobell.one. Доступ к нему из интернета не нужен — вебхук исходящий, поэтому монитор на домашнем сервере или во внутренней сети работает без проблем.

Шаг 1 — создайте канал, который вам звонит

Создайте в Echobell канал с названием вроде Production Down. Установите для подписки тип уведомления Звонок. Именно эта настройка решает всё: звонковые оповещения приходят экраном входящего вызова и звонят сквозь «Фокусирование» и «Не беспокоить» в iOS — в отличие от push-уведомления.

Задайте шаблоны:

Заголовок: 🔴 {{monitor}} недоступен
Текст: {{message}}
Цель: {{target}}

Затем скопируйте Webhook URL канала. Он выглядит так:

https://hook.echobell.one/t/<channel-token>

Относитесь к этому URL как к секрету — любой, у кого он есть, может заставить ваш телефон звонить.

Шаг 2 — добавьте Echobell как уведомление типа Webhook

В Uptime Kuma откройте Settings → Notifications → Setup Notification и заполните:

ПолеЗначение
Notification TypeWebhook
Friendly NameEchobell — Down
Post URLваш Webhook URL из Echobell
Request BodyCustom Body

Поле Additional Headers оставьте пустым.

Шаг 3 — отправляйте данные, которые можно фильтровать

Этот шаг пропускает большинство руководств, а именно он решает, получится ли у вас система оповещений или генератор шума.

Вставьте это в Custom Body:

{
  "monitor": "{{name}}",
  "target": "{{hostnameOrURL}}",
  "message": "{{ msg | strip_newlines }}",
  "up": "{{ heartbeatJSON['status'] }}"
}

Uptime Kuma рендерит произвольное тело запроса через Liquid и предоставляет такие переменные:

ПеременнаяЧто содержит
{{name}}Отображаемое имя монитора
{{hostnameOrURL}}Проверяемое имя хоста или URL
{{status}}🔴 Down, ✅ Up или ⚠️ Test
{{msg}}Причина в понятном виде, например connect ECONNREFUSED 10.0.0.4:443
{{ monitorJSON['...'] }}Полный объект монитора
{{ heartbeatJSON['...'] }}Полный объект heartbeat

Две детали здесь сделаны намеренно:

strip_newlines для msg. Сообщение Uptime Kuma часто содержит переносы строк, а сырой перенос внутри строки JSON — это невалидный JSON. Без фильтра вебхук будет отказывать время от времени — только на тех ошибках, чей текст случайно оказался многострочным. Если ваша версия Uptime Kuma достаточно свежая и знает Liquid-фильтр json, вариант "message": {{ msg | json }} (обратите внимание: без окружающих кавычек) ещё надёжнее, потому что он экранирует и кавычки.

heartbeatJSON['status'] вместо {{status}}. Переменная status возвращает текст с эмодзи, который неудобно сравнивать. Статус heartbeat — это обычное число:

  • 0 — недоступен
  • 1 — доступен
  • 2 — ожидание
  • 3 — обслуживание

Кавычки ("up": "{{ ... }}") тоже важны, и почему — объясняет шаг 5.

Шаг 4 — уберите звонки при восстановлении

Одно уведомление Uptime Kuma срабатывает и при сбое, и при восстановлении. Если ничего не менять, схема позвонит вам, когда сервис сломается, и позвонит снова, когда он починится сам. Именно второй звонок приучает людей игнорировать первый.

Разведите их с помощью условий Echobell — они проверяются до любой доставки:

В канале Production Down (тип уведомления Звонок) задайте условие:

up == "0"

Создайте второй канал с названием Production Recovered, задайте ему тип уведомления Обычное и условие:

up == "1"

С шаблонами:

Заголовок: ✅ {{monitor}} снова доступен
Текст: {{message}}

Затем добавьте в Uptime Kuma второе уведомление типа Webhook — то же произвольное тело, те же мониторы, но с URL канала восстановления. Оба уведомления получают все события; каждый канал отбрасывает ту половину, которая ему не нужна.

Результат: сбой звонит, восстановление приходит тихим push-уведомлением, которое вы прочитаете утром.

Шаг 5 — настройте монитор так, чтобы он не поднимал ложную тревогу

Звонок, за которым оказалась двухсекундная сетевая заминка, хуже, чем отсутствие звонка: следующий тоже смахнут. Основную работу здесь делают три настройки самого монитора:

  • Retries — поставьте 2 или 3. Uptime Kuma пометит монитор как недоступный только после такого числа неудач подряд, что отсеивает единичные потерянные пакеты.
  • Heartbeat Retry Interval — как быстро выполняется повторная проверка при сбое. 20–30 секунд — разумный компромисс; вместе с тремя повторами реальный сбой обнаруживается примерно за минуту.
  • Resend Notification if Down X times consecutively — поставьте примерно 10, и Uptime Kuma позвонит снова, если через десять следующих проверок сервис всё ещё недоступен. Это грубая политика эскалации, и она работает.

Если хотите, чтобы неотвеченный звонок повторялся сразу, а не ждал повторной отправки, включите в настройках приложения Echobell Повтор неудавшегося звонка.

Звонить только вне рабочего времени

В рабочее время вы, скорее всего, и так смотрите на дашборд, а звонящий телефон — лишнее отвлечение. Системные переменные времени в Echobell (все в UTC) позволяют одному каналу вести себя по-разному в зависимости от часа:

up == "0" && (hour >= 17 || hour < 9)

Это условие звонит вам только вне интервала 09:00–17:00 UTC. Для дневных push-уведомлений направьте второй канал с типом «Обычное» на обратное условие:

up == "0" && hour >= 9 && hour < 17

Не забудьте про сдвиг на свой часовой пояс — эти переменные всегда считаются в UTC. Подробнее об этом — в статье уведомления по временным окнам с условиями на UTC.

Как поделиться оповещением с командой

Канал Echobell можно передать коллегам по ссылке подписки, и каждый подписчик выбирает свой тип уведомления. Так один и тот же монитор может звонить дежурному инженеру и одновременно приходить обычным push-уведомлением всем остальным — без оплаты за каждого пользователя и без отдельных правил маршрутизации в Uptime Kuma.

Это сочетается и с теми соображениями приватности, ради которых вы вообще выбрали self-hosted: мониторы остаются на вашей инфраструктуре, а Echobell хранит содержимое и историю уведомлений на устройстве, а не на своих серверах.

Чего эта схема не даёт

Честно очерченная граница избавит вас от неудачной миграции в будущем. Echobell — это слой доставки, а не платформа управления инцидентами. В нём нет:

  • Графиков дежурств и передачи смен по принципу follow-the-sun
  • Деревьев эскалации, которые автоматически поднимают второго человека
  • Хронологий инцидентов, отслеживания подтверждений и инструментов для постмортемов

Если всё это нужно вашей команде — берите PagerDuty, Grafana Cloud IRM или подобное. Эта схема закрывает конкретный пробел, который оставляет Uptime Kuma: превращает обнаруженный сбой в телефон, который действительно звонит. Для одиночных администраторов, небольших команд и домашних лабораторий этого обычно достаточно.

Диагностика проблем

Кнопка Test ничего не делает. С приведённой выше нагрузкой это ожидаемо, и в первый раз сбивает с толку всех. При нажатии Test у Uptime Kuma нет heartbeat для подстановки, поэтому {{ heartbeatJSON['status'] }} превращается в пустую строку и ни одно из условий не срабатывает. Чтобы проверить по-настоящему, создайте одноразовый TCP-монитор на порт, который никто не слушает (127.0.0.1:9), и дайте ему упасть.

Вебхук отказывает время от времени. Почти всегда это проблема переносов строк — проверьте, что msg проходит через strip_newlines. Ломается только на тех сообщениях об ошибках, где случайно оказался перенос строки, поэтому и выглядит случайным.

Echobell отвечает success: false с кодом HTTP 200. Токен канала неверный или канал удалён. На неизвестный токен подходящей длины Echobell отвечает 200, так что смотрите на тело JSON, а не на код статуса.

HTTP 405. У канала включён режим POST Only, а запрос пришёл методом GET. Uptime Kuma отправляет POST, так что обычно это значит, что вы открыли URL в браузере.

Ничего не звонит, но уведомление приходит. У подписки выбран тип «Обычное» или «Срочное», а не «Звонок». Тип уведомления выбирается для каждого подписчика отдельно, поэтому проверьте его на том устройстве, которое не звонит.

Частые вопросы

Может ли Uptime Kuma позвонить на телефон сам?

Нет. У Uptime Kuma больше 90 способов уведомлений, но все они доставляют сообщения. Для звонка нужно направить вебхук в сервис, который умеет звонить, — например в Echobell — либо использовать платную платформу управления инцидентами.

Работает ли это с self-hosted Uptime Kuma за фаерволом?

Да. Вебхук — это исходящий HTTPS-запрос от вашего экземпляра Uptime Kuma, ему нужно достучаться только до hook.echobell.one. Публичный адрес экземпляру не нужен.

Пробьёт ли звонок режим «Не беспокоить»?

Да. Тип уведомления «Звонок» в Echobell выглядит как входящий вызов и звонит сквозь «Фокусирование» и «Не беспокоить» в iOS. Подробности и нужные настройки — в статье как обойти «Фокусирование» в iOS для критичных оповещений.

Как перестать получать звонки при восстановлении сервиса?

Используйте два канала с условиями — up == "0" для звонкового канала и up == "1" для канала восстановления с обычным приоритетом — и направьте на каждый своё уведомление типа Webhook. Шаг 4 выше разбирает это подробно.

Можно ли звонить сразу нескольким людям по одному монитору?

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

Итог

Вся схема — это один вебхук, одно произвольное тело запроса и два условия. Мониторы Uptime Kuma, логика повторов и страницы статуса остаются ровно такими же, а разрыв между «монитор заметил» и «человек заметил» закрывается.

Скачайте Echobell для iPhone или возьмите его в Google Play, затем подключите сначала один некритичный монитор и уроните его намеренно. Проверьте маршрут прежде, чем на него полагаться.


Похожие статьи

Похожие статьи

Как перенаправить оповещения Upptime в телефонные звонки с Echobell

Отправляйте оповещения Upptime о сбоях в Echobell как срочные push-уведомления или телефонные звонки — через один пользовательский вебхук и без дополнительных серверов.

Читать далее

24-часовой отсчёт CRA начинается 11 сентября 2026 года: убедитесь, что кто-то возьмёт трубку

С 11 сентября 2026 года EU Cyber Resilience Act даёт производителям 24 часа на подачу раннего предупреждения — через браузер, без API для отчётности. Как превратить этот триггер в телефонный звонок с помощью Echobell и чего даже самое громкое оповещение не решит.

Читать далее

Ваш ИИ-агент ждёт вас: превращаем запросы на подтверждение в телефонные звонки

Автономные агенты молча останавливаются и ждут, когда им нужен человек. Ничто в стеке агентов не заставит ваш телефон зазвонить. Разбираем, как связать запросы на подтверждение и сорвавшиеся запуски с настоящим звонком через Echobell.

Читать далее