Цепочка эскалации: push → звонок → Discord, Teams, PagerDuty
Push на телефон — самый быстрый канал, но не самый надёжный: телефон на
беззвучном, вы в метро, дежурный спит. Вместо того чтобы дублировать отправку
в пять систем из каждого скрипта, настройте эскалацию на канале: скрипт
по-прежнему делает один POST /message, а Notifly сам решает, куда дослать
непрочитанное.
Как это работает
Заголовок раздела «Как это работает»POST /message ──▶ push на все устройства (сразу) │ └─ раз в минуту: сообщение прочитано? ├─ да → цепочка остановлена └─ нет → истёк таймаут метода? → SMS / звонок / Discord / Teams / PagerDuty / …У каждого метода доставки свой таймаут и (у интеграций) свой минимальный приоритет. Сообщение считается прочитанным, когда его открыли в приложении или админке, нажали «Прочитано» прямо в уведомлении Android или кнопку-ссылку ✓ Прочитано в письме, Telegram, Slack, Teams, Discord или инциденте.
Пример цепочки для прод-канала
Заголовок раздела «Пример цепочки для прод-канала»Настройки канала prod → вкладка Доставка:
| Шаг | Метод | Таймаут | Мин. приоритет | Зачем |
|---|---|---|---|---|
| 0 | push (Android, браузер) | сразу | — | основной канал |
| 1 | Discord / Teams | 0 мин | 7 | команда видит важное в общем чате |
| 2 | SMS | 5 мин | — | не прочитали push |
| 3 | звонок | 10 мин | — | не прочитали и SMS |
| 4 | PagerDuty или Opsgenie | 15 мин | 9 | инцидент в системе дежурств |
У SMS и звонка фильтра по приоритету нет — поэтому их лучше включать на отдельном канале только для критичных алертов, а рядовые события слать в соседний канал без этих методов.
Discord, Microsoft Teams, Mattermost
Заголовок раздела «Discord, Microsoft Teams, Mattermost»- 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 из текста не срабатывают — случайный
алерт не разбудит весь сервер.
PagerDuty и Opsgenie
Заголовок раздела «PagerDuty и Opsgenie»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-подписью.