Критичні події сайту: чому Telegram-бот сповіщає швидше за інші рішення?
Уявіть: ваш сайт падає о 3 годині ночі через помилку платіжного шлюзу, а ви дізнаєтеся про це від клієнтів уранці. Втрати в продажах, нерви, термінові фікси. Ми зіткнулися з цим — і впровадили Telegram-бота, який шле алерти миттєво, оминаючи email та системи моніторингу. Telegram Bot API дозволяє надсилати до 30 повідомлень на секунду, що гарантує доставку навіть при лавині подій. Бот повідомляє: впав сайт, помилка оплати, переповнився диск, з'явилися 500-ті помилки. Подібний підхід дозволяє скоротити час реакції до 5 хвилин, а в деяких проєктах — до 2 хвилин.
Telegram-бот забезпечує сповіщення в реальному часі, що в 10 разів швидше за email-повідомлення, і не вимагає витрат на інфраструктуру. Вбудована дедуплікація через Redis виключає лавину сповіщень, надсилаючи лише унікальні критичні події. Це особливо важливо для E‑commerce сайтів, де кожна хвилина простою — втрачені замовлення та значні фінансові втрати.
Які критичні події сайту не можна пропускати?
- HTTP 5xx — сайт недоступний для користувачів
- Помилки платіжних шлюзів (наприклад,
PaymentException) - Заповнення диска понад 90%
- Збої бази даних або Redis
- Перевищення часу відповіді (TTFB більше 5 секунд)
- Падіння черги завдань (наприклад, Laravel Queue)
Ми виділяємо три рівні важливості: CRITICAL (вимагає негайної реакції), WARNING (потребує уваги), INFO (інформаційне). Кожна подія прив'язана до певного каналу сповіщення: критичні — черговому інженеру в особисті повідомлення або в Ops Telegram канал, інші — в загальний канал.
Типи подій
// Список критичних подій з рівнями важливості
enum AlertLevel: string {
case CRITICAL = '🔴';
case WARNING = '🟡';
case INFO = '🔵';
}
class SiteEventAlerter
{
public function alert(AlertLevel $level, string $event, array $context = []): void
{
$message = "{$level->value} **{$event}**\n\n";
foreach ($context as $key => $value) {
$message .= "**{$key}:** {$value}\n";
}
$message .= "\n⏰ " . now()->format('d.m.Y H:i:s');
// Критичні події — особисті повідомлення черговому
$recipients = $level === AlertLevel::CRITICAL
? $this->getOnCallEngineers()
: [$this->alertsChannelId];
foreach ($recipients as $chatId) {
$this->telegram->sendMessage($chatId, $message);
}
}
}
Як дедуплікація через Redis запобігає спаму сповіщеннями?
Одна й та сама помилка може генерувати сотні алертів на хвилину. Дедуплікація через Redis блокує повторні сповіщення протягом 15 хвилин. Приклад реалізації:
private function shouldSend(string $eventKey): bool
{
$cacheKey = "alert_dedup:{$eventKey}";
if (Cache::has($cacheKey)) return false;
Cache::put($cacheKey, 1, now()->addMinutes(15));
return true;
}
Чому моніторинг критичних подій у реальному часі критичний для бізнесу?
Без моніторингу збої залишаються непоміченими до першого дзвінка клієнта. Порівняння методів сповіщення:
| Метод | Затримка | Надійність | Інфраструктурні витрати |
|---|---|---|---|
| 5–15 хв | Середня | Поштовий сервер | |
| Telegram Bot | 1–2 сек | Висока | Нульові |
| PagerDuty | 1–2 сек | Дуже висока | $30+/міс за користувача |
Telegram-бот дає швидкість і надійність, порівнянну з платними системами, при нульових витратах на інфраструктуру.
Порогові значення для типових подій:
| Подія | Поріг | Рівень |
|---|---|---|
| HTTP 5xx | >0 на хвилину | CRITICAL |
| Помилка платіжного шлюзу | будь-яка | CRITICAL |
| Заповнення диска | >90% | WARNING |
| TTFB | >5 секунд | WARNING |
| Вільна пам'ять Redis | <100 MB | WARNING |
Інтеграція в код
// В обробнику винятків (Handler.php)
public function report(Throwable $exception): void
{
if ($exception instanceof PaymentException) {
app(SiteEventAlerter::class)->alert(
AlertLevel::CRITICAL,
'Помилка платіжного шлюзу',
[
'Gateway' => $exception->getGateway(),
'Order' => $exception->getOrderId(),
'Error' => $exception->getMessage(),
]
);
}
parent::report($exception);
}
// В планувальнику (Kernel.php)
$schedule->call(function () {
$freeSpace = disk_free_space('/') / disk_total_space('/') * 100;
if ($freeSpace < 10) {
app(SiteEventAlerter::class)->alert(
AlertLevel::WARNING,
'Мало вільного місця на диску',
['Вільно' => round($freeSpace, 1) . '%']
);
}
})->hourly();
Архітектура обробки сповіщень
Для гарантії доставки повідомлення ставляться в чергу (Redis або RabbitMQ). Якщо Telegram тимчасово недоступний, бот повторює відправлення з експоненційною затримкою. Це виключає втрату алертів при мережевих збоях.
Типові помилки при інтеграції
- Не налаштована дедуплікація — лавина сповіщень при тимчасовому збої.
- Ігнорування рівнів WARNING — пропуск попереджень, які можуть перерости в збій.
- Відсутність резервного каналу — при недоступності Telegram алерти втрачаються. Черга вирішує цю проблему.
Як Telegram-бот скорочує час реакції на збої: практичний кейс
З нашої практики: один із клієнтів — інтернет-магазин з відвідуваністю 10 000 відвідувачів на день — зіткнувся з періодичними помилками платіжного шлюзу. Проблему помічали лише при дзвінках клієнтів, що призводило до значних фінансових втрат. Після впровадження Telegram-бота час реакції скоротився з 30 хвилин до 2 хвилин. Бот дозволяє черговим інженерам отримувати алерти миттєво та вживати заходів до того, як збій помітять користувачі. Економія від впровадження може бути суттєвою.
Як ми налаштовуємо Telegram-бота
- Аналізуємо — визначаємо, які події критичні для вашого бізнесу.
- Проєктуємо — розробляємо схему каналів та рівнів.
- Реалізуємо — пишемо код інтеграції у ваш додаток.
- Тестуємо — симулюємо сценарії збоїв.
- Деплоїмо — запускаємо в продакшен.
Весь процес займає 1–2 робочих дні. Час може варіюватися залежно від кількості джерел подій.
Що входить в роботу
- Документація з налаштування та експлуатації бота.
- Вихідний код з коментарями.
- Інтеграція в існуючі обробники помилок.
- Налаштування дедуплікації та рівнів сповіщень.
- Навчання чергових інженерів.
Отримайте консультацію інженера з великим досвідом впровадження таких рішень. Замовте впровадження Telegram-бота сповіщень вже сьогодні. Наш досвід — більше 50 реалізованих проєктів з моніторингу та алертингу. Якщо ви хочете обговорити деталі, зв'яжіться з нами — ми допоможемо налаштувати сповіщення під ваш проєкт.







