Адміністратор Бітрікс-сайту має отримувати сповіщення про критичні події миттєво: нове замовлення, збій оплати, помилка агента, перевищення дискового ліміту. Стандартні поштові події покривають базові сценарії, але ми часто зустрічаємо кейси, коли їх недостатньо: затримка відправки, відсутність Telegram-каналу, неможливість фільтрації за пріоритетом. Розробляємо систему оповіщень, яка об'єднує Email, Telegram, SMS та внутрішній журнал — під ключ із налаштуванням пріоритетів та дайджестів. Наприклад, при збої оплати через ЮKassa потрібно негайно сповістити адміністратора в Telegram, щоб оперативно зв'язатися з клієнтом. Або при перевищенні дискового простору агент може відправити SMS, якщо сайт критично важливий. Кожна хвилина простою обходиться в середньому в 10 000 грн, тому швидкість сповіщень критична. Ми реалізували такі сценарії на PHP 8.1+ з використанням власного модуля на інфоблоках v2.0 та тегованого кешування.
Як влаштована стандартна система сповіщень у Бітрікс?
Ядро Бітрікс використовує механізм поштових подій: код події → шаблон листа → отримувачі. Всі події реєструються в таблиці b_event, шаблони — в b_event_message, а історія відправлених листів (при включеному логуванні) — в b_event_log.
Для e-commerce критичні події вже існують: SALE_ORDER_NEW (нове замовлення), SALE_ORDER_PAID (оплата отримана), SALE_ORDER_CANCEL (скасування). Отримувачів налаштовуєте в шаблоні події через модуль main → «Поштові події».
Проблема стандартного механізму: листи відправляються синхронно в момент події, що при повільному SMTP додає до 500 мс до завантаження сторінки. Рішення — черга відправки через таблицю b_email_service або зовнішній SMTP зі швидким з'єднанням.
Чому одних поштових подій недостатньо?
Поштові події мають три обмеження:
- тільки Email-канал (не можна відправити Telegram або SMS);
- синхронна відправка (гальмує сервер);
- відсутність вбудованої пріоритезації (всі події рівні).
Telegram-сповіщення працюють у 10 разів швидше, ніж Email при критичних подіях, а SMS гарантує доставку навіть при падінні сайту. Для нестандартних сценаріїв ми вішаємося на події модулів через init.php.
Як налаштувати кастомні сповіщення через події модулів
Нова заявка з форми — OnAfterAddResult модуля form:
AddEventHandler("form", "OnAfterAddResult", function($formId, $resultId, $arResult) { if ($formId == CALLBACK_FORM_ID) { notifyAdmin('Нова заявка #' . $resultId, formatFormData($arResult)); } }); Помилка в агентах — агенти в b_agent виконуються без явного логування. Обгортайте код агента в try-catch і при виключенні відправляйте сповіщення:
function MyModuleAgent() { try { // код агента } catch (\Throwable $e) { notifyAdmin('Помилка агента', $e->getMessage() . "\n" . $e->getTraceAsString()); } return __FUNCTION__ . '();'; } Перевищення лімітів диска — у Бітріксі є агент CIBlockAgent::CheckDiskQuota(). Його можна перевизначити або доповнити своїм агентом, що перевіряє розмір директорій і відправляє alert при перевищенні порогу, наприклад 90% від квоти.
Помилки оплати — подія OnSalePaymentUpdate з перевіркою зміни статусу на помилковий:
AddEventHandler("sale", "OnSalePaymentUpdate", function($id, &$arFields) { if ($arFields['IS_RETURN'] === 'Y' || strpos($arFields['PS_STATUS_MESSAGE'], 'error') !== false) { notifyAdmin('Помилка оплати замовлення', print_r($arFields, true)); } }); Як відправити сповіщення в Telegram?
Створіть бота через BotFather, отримайте BOT_TOKEN та CHAT_ID адміністраторського чату. Відправка через \Bitrix\Main\Web\HttpClient:
function notifyTelegram(string $message): void { $botToken = COption::GetOptionString('local', 'telegram_bot_token'); $chatId = COption::GetOptionString('local', 'telegram_admin_chat_id'); $httpClient = new \Bitrix\Main\Web\HttpClient(); $httpClient->post( "https://api.telegram.org/bot{$botToken}/sendMessage", ['chat_id' => $chatId, 'text' => $message, 'parse_mode' => 'HTML'] ); } Зберігайте токени в b_option через COption, не в коді — при ротації токена не потрібно шукати по файлах.
Багатоканальна доставка: Telegram, SMS, Push
Email — базовий канал, але не завжди достатньо швидкий. Для критичних сповіщень додавайте:
Telegram-бот
Швидкість доставки: 0.5–2 секунди. Надійність при падінні сайту низька (потрібен інтернет), вартість безкоштовно.
SMS через API
Для дійсно критичних подій (недоступність платіжного шлюзу, зламні спроби) — SMS через SMSC.ru або SMS.ru. Ті самі HttpClient + API-ключ. Вартість одного повідомлення — 2–5 грн, що виправдано при ризику втрати замовлення.
Push-сповіщення в браузер
Для сповіщень, коли адміністратор в адміністративній панелі — через системний Bitrix Push Server (push.1c-bitrix.ru) або через Web Push API з VAPID-ключами.
| Канал | Швидкість доставки | Надійність при падінні сайту | Вартість |
|---|---|---|---|
| від 1 секунди до 5 хвилин | низька (залежить від SMTP) | безкоштовно (через свій сервер) | |
| Telegram | 0.5–2 секунди | низька (без інтернету не працює) | безкоштовно |
| SMS | 1–10 секунд | висока (через мобільну мережу) | 2–5 грн за повідомлення |
| Push (адмінка) | миттєво | середня (тільки коли адмін відкрито) | безкоштовно (Bitrix Push Server) |
Що входить у розробку системи сповіщень
- Аналіз сценаріїв: виявляємо всі критичні події вашого проекту.
- Проектування: архітектура каналів, пріоритети, дайджести.
- Реалізація: кастомний модуль на інфоблоках v2.0, події, агенти.
- Налаштування каналів: Telegram-бот, SMS-шлюз, push-сповіщення.
- Інтеграція з REST API для зовнішніх сервісів.
- Центр сповіщень в адмінці з фільтрацією та лічильниками.
- Тестування: навантажувальне, відмовостійкість.
- Документація: опис подій, налаштування каналів.
- Підтримка: супровід протягом місяця після впровадження.
Орієнтовні терміни
| Етап | Термін |
|---|---|
| Аналіз та проектування | 1–2 дні |
| Розробка модуля | 3–5 днів |
| Налаштування каналів | 1–2 дні |
| Тестування та документи | 1–2 дні |
| Разом | 5–10 днів |
Типові помилки при проектуванні сповіщень
Часті проблеми та як їх уникнути
- Відправляти всі події у всі канали — створює інформаційний шум. Призначайте пріоритети.
- Зберігати токени в коді — використовуйте
COptionабо.settings.php. - Ігнорувати очищення таблиці
b_event_log— через місяць база може вирости на гігабайти на активному сайті. Налаштуйте агента для видалення записів старше 30 днів. - Не тестувати падіння сайту — зовнішній моніторинг (UptimeRobot, Zabbix) обов'язковий, оскільки при падінні сервера внутрішні агенти не спрацюють.
Ми розробляємо системи сповіщень понад 8 років, реалізували більше 30 проектів для інтернет-магазинів на Бітрікс. Замовте розробку системи сповіщень, і ми налаштуємо всі канали під ваш проект. Оцінимо ваш проект за 2 дні — зв'яжіться з нами.







