Надійність

Надійність, яку платформа сповіщень має заслужити

Весь сенс інструменту сповіщень — пережити найгірші хвилини року. Ось що робить WardenPoint, щоб бути до них готовим: дублювання каналів, передбачувані повторні спроби, ланцюги з урахуванням підтверджень та журнал аудиту, який можна прочитати.

Ціль uptime
99.99%
Медіанна затримка
~20ms
Каналів на крок
3+

Сповіщення, яке витримає важкий день

  1. +0s
    Прийом API — Прийнято; UUID призначено
  2. +1s
    Telegram — Голосове повідомлення надіслано
  3. +10s
    Запасний голосовий канал — Telegram недоступний · виконано PSTN-дзвінок
  4. +14s
    Черговий — DTMF 1 · ланцюг скасовано

Чотири стовпи

Як ми тримаємо сповіщення живим

Чотири аспекти надійності, які платформа сповіщень має розв'язати. Кожен перелічує те, що вже вшито в код, а не те, що ми сподіваємось випустити.

01 · Надмірність каналів

Кілька каналів на крок

На кожному кроці ескалації можна паралельно задіяти кілька каналів. Якщо Telegram не працює, телефонний дзвінок все одно пролунає. Якщо обидва канали виходять з ладу, на заміну налаштовано SMS.

  • Масиви каналів на крок — запускай кілька паралельно
  • Резервний канал для кожного каналу — якщо Telegram падає, його роль переймає SMS
  • Ротація операторів для голосу і SMS — жодна одинична відмова не зупиняє доставку
  • Стан каналу фіксується в журналі аудиту для кожного відправлення

02 · Політика повторних спроб

Передбачувані повторні спроби з обмеженою кількістю

Ми повторюємо спробу на тому самому каналі, перш ніж перейти до іншого, але не безкінечно. Інтервали між спробами чітко визначені; після вичерпання — система переходить до наступного каналу.

  • Конфігурована кількість спроб для кожного каналу (за замовч. 3 для голосу, 2 для Telegram)
  • Експоненційний або лінійний backoff для кожного каналу
  • Ідемпотентність за (api_key, idempotency_key) — дублікати зливаються в одне відправлення
  • Твердий ліміт на весь ланцюг — жоден alert не дзвонитиме вічно

03 · З урахуванням підтверджень

Ланцюг зупиняється, коли хтось бере сповіщення на себе

Підтвердження з будь-якого каналу, що отримав сповіщення, скасовує решту ланцюга. Журнал аудиту фіксує, хто і коли підтвердив.

  • Підтвердження кнопкою в Telegram, відповіддю SMS, DTMF, кліком в email або в дашборді
  • Resolved-hook від моніторингу скасовує ланцюг автоматично
  • Чисте повторне відправлення, коли черговий передає інцидент посередині
  • Жодних залишкових повторних спроб після підтвердження — гарантується скасуванням у черзі

04 · Журнал аудиту

Структурований, придатний для запитів, експортовний

Кожна відправка, підтвердження, ескалація та вирішення пише рядок JSON. Схема стабільна; старі поля лишаються, нові додаються без поломки парсерів.

  • JSON Lines журнал аудиту для кожної компанії
  • Стабільна схема з полями notification_uuid, channel, status, actor, ip і request_id
  • CSV-експорт для групи одержувачів для перевірок SLA
  • Пов'язано з логами додатка через request_id

Політика повторних спроб

Що повторюємо і коли зупиняємось

Повторні спроби мають бути передбачуваними. Виберіть кількість спроб, backoff і резервний канал для кожного каналу. WardenPoint постачає розумні значення за замовчуванням, а платні плани дозволяють їх перевизначити.

  • Голосові дзвінки повторюємо до 3 разів з експоненційним backoff, далі переходимо на голос у Telegram
  • Telegram повторює 2 рази з лінійним backoff, далі переходить на SMS
  • SMS повторює 2 рази з ротацією провайдерів; 5xx оператора перемикає на наступного провайдера
  • Email повторюємо на тимчасових SMTP 4xx; постійні 5xx завершують спробу, ланцюг іде далі
  • Кожне рішення про повторну спробу потрапляє в журнал аудиту — шлях можна відтворити
config/escalation.phpPHP
# config/escalation.php — retry policy
'retry' => [
'voice_call' => [
'attempts' => 3,
'backoff' => 'exponential',
'fallback_channel' => 'telegram_voice',
],
'telegram_voice' => [
'attempts' => 2,
'backoff' => 'linear',
'fallback_channel' => 'sms',
],
],

Чесні цифри

Цифри, яких ми тримаємось

Ціль доступності
99.99%

Внутрішнє SLO для публічного API та шару диспетчера. /status показує реальне поточне значення.

Медіанна затримка API
~20ms

Виміряна медіана (P50) на публічному API. З боку оператора додається 2–10 с для голосу/SMS.

Каналів на крок
3+

Кожен крок може запустити будь-яку комбінацію з восьми каналів паралельно. Без штучного ліміту.

Твердий ліміт ланцюга
На ланцюг

Ланцюг не може перевищити налаштовану загальну тривалість. Ми не дзвонимо вічно — це закладено в дизайн.

Вбудований статус

Розмістіть наш статус на власному дашборді

Покажіть стан WardenPoint на внутрішній вікі, статусному порталі чи у футері сайту. Один тег, без API-ключа, без збірки — значок оновлюється щохвилини й падає у стан «Operational», якщо ваші читачі не можуть звернутись до нашого API.

Значок-таблетка

Перегляд наживо

Operational
<!-- Pill badge -->
<script
src="https://status.wardenpoint.com/status-embed.js"
data-format="badge"
data-theme="light"
defer></script>

Картка

Перегляд наживо

Operational99.99% uptime · 90dView status →
<!-- Card with uptime -->
<div id="wp-status"></div>
<script
src="https://status.wardenpoint.com/status-embed.js"
data-target="#wp-status"
data-format="card"
data-theme="auto"
defer></script>
Параметри
data-target — CSS-селектор контейнера. Необовʼязковий; за замовчуванням рендериться поряд.
 
data-theme — light · dark · auto (наслідує налаштування читача).
 
data-format — badge (один рядок) або card (з показником uptime за 90 днів).

FAQ надійності

Часті питання про надійність

99,99% для публічного API та шару диспетчера. Сторінка стану показує реальну ковзну величину з 90-денним вікном.
Безкоштовний план

Перевірте заявлену надійність власним тестом

Додайте одержувача, вимкніть Telegram на телефоні чергового та подивіться, як спрацює резерв. Рядок журналу аудиту розкаже всю історію.

  • Безкоштовний план
  • Журнал аудиту для кожного відправлення
  • Вбудована ротація операторів