Администратор Битрикс-сайта должен получать уведомления о критических событиях мгновенно: новый заказ, сбой оплаты, ошибка агента, превышение дискового лимита. Стандартные почтовые события покрывают базовые сценарии, но мы часто встречаем кейсы, когда их недостаточно: задержка отправки, отсутствие Telegram-канала, невозможность фильтрации по приоритету. Разрабатываем систему оповещений, которая объединяет Email, Telegram, SMS и внутренний журнал — под ключ с настройкой приоритетов и дайджестов. Например, при сбое оплаты через ЮKassa нужно немедленно оповестить администратора в Telegram, чтобы оперативно связаться с клиентом. Или при превышении дискового пространства агент может отправить SMS, если сайт критически важен. Каждая минута простоя обходится в среднем в $90–130, поэтому скорость уведомлений критична. Мы реализовали такие сценарии на 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-ключ. Стоимость одного сообщения — $1–1, что оправдано при риске потери заказа.
Push-уведомления в браузер
Для оповещений, когда администратор в административной панели — через системный Bitrix Push Server (push.1c-bitrix.ru) или через Web Push API с VAPID-ключами.
| Канал | Скорость доставки | Надёжность при падении сайта | Стоимость |
|---|---|---|---|
| от 1 секунды до 5 минут | низкая (зависит от SMTP) | бесплатно (через свой сервер) | |
| Telegram | 0.5–2 секунды | низкая (без интернета не работает) | бесплатно |
| SMS | 1–10 секунд | высокая (через мобильную сеть) | $1–1 за сообщение |
| 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 дня — свяжитесь с нами.







