Перейти к содержимому

Цепочка эскалации: push → звонок → Discord, Teams, PagerDuty

Push на телефон — самый быстрый канал, но не самый надёжный: телефон на беззвучном, вы в метро, дежурный спит. Вместо того чтобы дублировать отправку в пять систем из каждого скрипта, настройте эскалацию на канале: скрипт по-прежнему делает один POST /message, а Notifly сам решает, куда дослать непрочитанное.

POST /message ──▶ push на все устройства (сразу)
│
└─ раз в минуту: сообщение прочитано?
├─ да → цепочка остановлена
└─ нет → истёк таймаут метода? → SMS / звонок / Discord /
Teams / PagerDuty / …

У каждого метода доставки свой таймаут и (у интеграций) свой минимальный приоритет. Сообщение считается прочитанным, когда его открыли в приложении или админке, нажали «Прочитано» прямо в уведомлении Android или кнопку-ссылку ✓ Прочитано в письме, Telegram, Slack, Teams, Discord или инциденте.

Настройки канала prod → вкладка Доставка:

ШагМетодТаймаутМин. приоритетЗачем
0push (Android, браузер)сразу—основной канал
1Discord / Teams0 мин7команда видит важное в общем чате
2SMS5 мин—не прочитали push
3звонок10 мин—не прочитали и SMS
4PagerDuty или Opsgenie15 мин9инцидент в системе дежурств

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

  • Discord: настройки канала сервера → Интеграции → Вебхуки → Новый вебхук → скопируйте URL (https://discord.com/api/webhooks/…).
  • Microsoft Teams: в канале Teams … → Workflows → шаблон Post to a channel when a webhook request is received → скопируйте URL. Старые Office 365 connectors не принимаются — Microsoft выводит их из эксплуатации.
  • Mattermost: Integrations → Incoming Webhooks → Add Incoming Webhook.

Сообщение приходит карточкой с цветом по приоритету, а под текстом — ссылки действий: «Прочитано» и варианты ответа, если это вопрос. Упоминания @everyone/@here/@channel из текста не срабатывают — случайный алерт не разбудит весь сервер.

Notifly создаёт инцидент (PagerDuty Events API v2) или алерт (Opsgenie) с severity по приоритету сообщения: 9–10 → critical / P1, 7–8 → error / P2. Повтор того же сообщения не создаст второй инцидент — ключ дедупликации notifly-<id сообщения>.

Поле «Когда сообщение прочитано» замыкает цикл: прочитали алерт в Notifly — через минуту инцидент получит acknowledge или resolve (в Opsgenie — close). Обратной синхронизации нет: acknowledge в PagerDuty сообщение в Notifly прочитанным не делает.

На вкладке Доставка есть кнопка теста: она сразу, без ожидания таймаута, шлёт тестовое уведомление во включённые интеграции и показывает результат по каждой. Всю цепочку целиком проверит настоящее сообщение:

Окно терминала
curl -s "$NOTIFLY_URL/message?token=$NOTIFLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"🔥 Тест эскалации","message":"Не открывайте push 5 минут","priority":9}'
  • Один вызов в коде: скрипты не знают про SMS, Discord и PagerDuty — маршрут задаётся в настройках канала и меняется без деплоя.
  • Громкость по нарастающей: сначала push, потом чат команды, потом звонок и инцидент — и всё останавливается, как только кто-то прочитал.
  • Ночью — по делу: с тихими часами ночью эскалируется только срочное, а во время плановых работ эскалация не срабатывает вовсе.
  • Подключить к этому же каналу алерты Prometheus или Zabbix — они получат ту же цепочку без изменений в их конфигурации.
  • Отдавать алерты в собственную систему (тикеты, свой бот) — через generic webhook с HMAC-подписью.