Опишите доработку или сценарий — обсудим вместе с другими клиентами.
Оповещения об ошибках на почту, по СМС и в мессенджеры
Технические данные
Совместимые редакции
- Программа для ЭВМ "1С-Битрикс: Управление сайтом". Лицензия Старт
- Программа для ЭВМ "1С-Битрикс: Управление сайтом". Лицензия Стандарт
- Программа для ЭВМ "1С-Битрикс: Управление сайтом". Лицензия Малый бизнес
- Программа для ЭВМ "1С-Битрикс24". Лицензия Стандартный (12 мес.)
- Программа для ЭВМ "1С-Битрикс: Управление сайтом". Лицензия Бизнес
- Программа для ЭВМ "1С-Битрикс24". Лицензия Интернет-магазин + CRM (12 мес.)
Описание
Коротко: модуль подключается к штатному обработчику исключений Bitrix и присылает администратору уведомление о необработанных ошибках и fatal error — по почте или SMS/мессенджер, — используя уже настроенные на сайте почтовые события и SMS-провайдер. Тот же механизм доступен вашему коду: из модуля или скрипта можно отправить собственное оповещение в свой канал.
Что делает модульRover Notifier не подменяет системный лог ошибок Bitrix, а дополняет его: регистрируется как ещё один обработчик в exception_handling.value.log и при каждом необработанном исключении или критической ошибке формирует и отправляет уведомление через стандартные события Bitrix (CEvent, SMS-событие модуля messageservice). Сам модуль писем не рассылает — он лишь инициирует штатное событие, поэтому канал доставки полностью зависит от того, что уже настроено на сайте: почтовый шаблон, SMS-шлюз, интеграция с мессенджером через messageservice.
Возможности- Уведомления по email и SMS/мессенджерам — два независимых события (почтовое и SMS), каждое можно включать, выключать и настраивать отдельно, стандартными средствами Bitrix. Через SMS-событие доставка настраивается и в Telegram, WhatsApp, MAX — в зависимости от установленных коннекторов модуля «Сервис уведомлений».
- Группировка одинаковых ошибок — повторяющиеся ошибки не заваливают почту дублями, а копятся в очереди и раз в заданный интервал (по умолчанию — раз в час) отправляются одним письмом со счётчиком повторений. Одинаковыми считаются ошибки, совпадающие по классу, тексту, коду, файлу, строке, типу, источнику и набору дополнительных полей, — одна и та же ошибка из разных модулей не сливается в одну запись.
- Критичные ошибки — без задержки — Fatal error и необработанные исключения по умолчанию отправляются немедленно, минуя группировку, даже если она включена для остальных ошибок. Такое письмо уходит и мимо почтовой очереди, поэтому доходит, даже когда разбирающий очередь крон остановлен, — а в аварии это обычное дело.
- Настраиваемый интервал группировки — регулируется из административной панели модуля, без правки кода.
- Понятно, кто виноват — в уведомлении указывается источник ошибки: ядро, конкретный модуль (по его идентификатору) или код сайта. Модуль определяет это сам, по месту возникновения ошибки. Рядом — тип ошибки в читаемом виде (FATAL, UNCAUGHT_EXCEPTION и т.д.), а не служебный числовой код.
- Готов к работе сразу после установки — при установке автоматически создаются почтовый и SMS-типы событий и шаблоны с готовым набором плейсхолдеров (текст ошибки, источник, тип, файл, строка, стек, счётчик повторов); донастроить нужно только получателя SMS.
- Публичный API для разработчика — Rover\Notifier\Notifier::report() позволяет отправлять произвольные сообщения или исключения из кода сайта и других модулей теми же каналами, с любыми дополнительными полями для шаблона. Такие сообщения подчиняются общим настройкам модуля и участвуют в группировке наравне с перехваченными ошибками.
- Модуль как транспорт для своих оповещений — отдельная настройка разрешает отправку из кода, когда перехват ошибок сайта выключен. Это для тех, кому нужен только свой канал, а fatal error чужого кода получателям ни к чему.
- Свой канал: событие, шаблон, получатели — в контексте вызова можно указать собственное почтовое и SMS-событие и сайт (EVENT_NAME, SMS_EVENT_NAME, SITE_ID). Оповещения вашего модуля идут своим шаблоном своим адресатам и не смешиваются с ошибками сайта. Ключ IMMEDIATE отправляет сообщение немедленно — он нужен коду, который уже сгруппировал данные сам и прислал готовую сводку.
- Корректное удаление — при деинсталляции модуль аккуратно убирает себя из конфигурации обработчика исключений, удаляет агент, таблицу очереди и (по желанию) созданные события/шаблоны, либо оставляет их, если админ отметил соответствующую опцию.
- Модуль никогда не прерывает основной обработчик исключений: любая ошибка на стороне самого Rover Notifier (недоступна БД, не настроен SMS-шаблон и т.п.) перехватывается и гасится внутри модуля — сайт продолжает работать так, как будто уведомителя нет.
- Обработчик защищён от повторного входа. Подключение модуля само обращается к базе и управляемому кешу, а значит при их недоступности способно породить новую ошибку — и обработчик вызвал бы сам себя. Повторный вход блокируется флагом, запись в файловый лог при этом выполняется всегда: ей ни база, ни кеш не нужны.
- Очередь группировки хранится в отдельной таблице через ORM Bitrix, агент разбирает её по расписанию и чистит за собой. Дополнительные поля, переданные из кода вместе с сообщением, переживают очередь и доходят до шаблона в сводном уведомлении.
- Тип ошибки берётся из штатной классификации обработчика исключений Bitrix, а не из самодельной системы приоритетов, — поэтому «критичность» означает ровно то же, что и для самой платформы.
- Модуль не создаёт собственную инфраструктуру доставки сообщений — использует ту, что уже есть на проекте, поэтому не конфликтует с существующими интеграциями и легко встраивается в проекты любого масштаба.
Разработчикам и агентствам, сопровождающим коммерческие проекты, где важно узнавать о фатальных ошибках раньше, чем о них сообщит клиент, — но без риска «шторма» одинаковых писем при массовых сбоях и без изменения кода сайта после установки.
Авторам собственных модулей и интеграций — как готовый транспорт оповещений: не нужно заводить свои события, очередь и группировку, достаточно одного вызова из кода.
Требования- «1С-Битрикс: Управление сайтом» с модулем main; дополнительных лицензий на другие модули ядра не требуется.
- PHP 8.2 и выше.
- Для email — ничего дополнительно не нужно, используется штатный CEvent и уже настроенный на сайте почтовый транспорт.
- Для SMS или доставки в мессенджер (Telegram/WhatsApp/MAX и т.п.) — модуль «Сервис уведомлений» (messageservice) с настроенным провайдером; без него включена и работает только почта, ошибок это не вызывает.
- Агент группировки использует стандартный агентский механизм «Битрикс» — отдельный крон настраивать не нужно.
Модуль устанавливается стандартно. После установки откроется страница результата установки с кнопкой «Перейти к настройкам модуля» — нажмите её.
Страница настроек также доступна в административной части по адресу: Настройки → Настройки продукта → Настройки модулей → «Оповещения об ошибках на почту, по СМС и в мессенджеры».
На странице настроек:
- Перехват ошибок включён — включает перехват ошибок сайта. После включения и сохранения на email администратора (email сайта по умолчанию) уже будут приходить письма об ошибках без дополнительной настройки.
- Разрешить оповещения из кода (API) при выключенном перехвате — разрешает отправку сообщений через Notifier::report(), когда перехват ошибок выключен. Включайте, если модуль нужен только как транспорт для оповещений вашего кода, а fatal error и необработанные исключения сайта получателям не нужны. При включённом перехвате настройка ни на что не влияет: report() работает и так.
- Группировать одинаковые ошибки — если включить, повторяющиеся ошибки не отправляются каждая отдельным письмом, а копятся и раз в заданный интервал отправляются одним уведомлением со счётчиком повторов. Рядом с настройкой отображается количество ошибок в очереди (ссылка на служебную таблицу) и время следующей отправки.
- Интервал отправки группы, сек (например, 3600 = раз в час) — периодичность отправки накопленной группы ошибок. Поле активно только при включённой группировке.
- Критичные ошибки (Fatal error / необработанное исключение) отправлять сразу, минуя группировку — включено по умолчанию: даже при включённой группировке фатальные ошибки и необработанные исключения отправляются немедленно, не дожидаясь интервала. Такое письмо уходит и мимо почтовой очереди, поэтому доходит при остановленном кроне.
После изменения настроек нажмите «Сохранить» или «Применить».
SMS и мессенджеры (Telegram / WhatsApp / MAX)Для доставки уведомлений в SMS или в Telegram/WhatsApp/MAX необходим установленный модуль «Сервис уведомлений» (messageservice) с подходящим коннектором-отправителем.
Чтобы настроить отправку SMS или сообщений в мессенджер, перейдите по ссылке на SMS-шаблон для события «ROVER_NOTIFIER_ERROR_SMS» (ссылка расположена под настройками на этой же странице), откройте шаблон и укажите телефон или chat_id получателя вместо значения по умолчанию «+7XXXXXXXXXX», затем включите шаблон. Для отправки через Telegram/WhatsApp/MAX дополнительно настройте соответствующий коннектор-отправитель в модуле «Сервис уведомлений» (messageservice).
EmailПочтовый шаблон события «ROVER_NOTIFIER_ERROR» находится в разделе Настройки → Настройки продукта → Почтовые и СМС события → Почтовые шаблоны (или по ссылке под настройками модуля). В этом шаблоне при необходимости можно изменить получателя письма (по умолчанию — email сайта) и текст уведомления.
Типы событийТипы событий ROVER_NOTIFIER_ERROR и ROVER_NOTIFIER_ERROR_SMS расположены в разделе Настройки → Настройки продукта → Почтовые и СМС события → Типы событий (или по ссылкам под настройками модуля).
Отправка собственных уведомлений из кодаКроме автоматически перехваченных ошибок, модуль умеет отправлять уведомления по запросу из любого кода проекта — обработчика события, агента, скрипта импорта, другого модуля. Для этого служит единственный публичный метод Rover\Notifier\Notifier::report(). Никакой дополнительной настройки для него не требуется: используются те же события и шаблоны, что и для перехваченных ошибок.
Сообщение отправляется, когда включён перехват ошибок либо настройка «Разрешить оповещения из кода (API) при выключенном перехвате».
Перед вызовом нужно подключить модуль:
use Bitrix\Main\Loader;
use Rover\Notifier\Notifier;
Loader::includeModule('rover.notifier'); |
Отправить исключение
Код исключения, файл, строка и стек вызовов будут взяты из самого исключения:
try {
$this->syncOrder($order);
} catch (\Throwable $e) {
Notifier::report($e);
} |
Отправить произвольное сообщение
Первым аргументом можно передать обычную строку — например, когда ошибки как таковой нет, но о ситуации нужно узнать:
Notifier::report('Не удалось получить остатки от поставщика: сервис не ответил за 30 секунд'); |
Добавить свои поля в уведомление
Вторым аргументом передаётся массив дополнительных полей. Поля, которые модуль формирует сам (MESSAGE, MESSAGE_SHORT, CODE, FILE, LINE, TRACE, LOG_TYPE, SOURCE, HOST, COUNT, DATE), можно переопределить, а любые другие становятся дополнительными плейсхолдерами шаблона:
Notifier::report('Не отвечает внешний API', [
'CODE' => 504,
'FILE' => __FILE__,
'LINE' => __LINE__,
'ORDER_ID' => $order->getId(),
]); |
Переданный в примере ORDER_ID будет доступен в шаблоне письма как #ORDER_ID#. Чтобы он попал в уведомление, добавьте этот плейсхолдер в текст почтового или SMS-шаблона (раздел «Почтовые и СМС события») — стандартные шаблоны модуля о нём, разумеется, не знают. Дополнительные поля не теряются при группировке: они сохраняются вместе с ошибкой и доходят до шаблона в сводном уведомлении.
Поля, для которых значение не передано, подставляются в шаблон как «не указано» — в письме не остаётся пустых мест и нераскрытых плейсхолдеров.
Свой канал: своё событие, свой шаблон, свои получателиСлужебные ключи контекста задают адресацию сообщения и в плейсхолдеры шаблона не попадают:
| Ключ | Значение |
|---|---|
| EVENT_NAME | Имя почтового события вместо штатного ROVER_NOTIFIER_ERROR |
| SMS_EVENT_NAME | Имя SMS-события вместо штатного ROVER_NOTIFIER_ERROR_SMS |
| SITE_ID | Сайт, для которого отправляется событие. По умолчанию текущий, а если его нет (например, в агенте) — сайт по умолчанию |
| IMMEDIATE | «Y» — отправить сразу, минуя очередь группировки и почтовую очередь. Нужно, когда вызывающий код уже сгруппировал данные сам и прислал готовую сводку, или когда сообщение должно дойти и при остановленном кроне |
Notifier::report('Заказы не переданы в 1С', [
'EVENT_NAME' => 'MY_EXCHANGE_ERROR',
'SITE_ID' => 's2',
'ORDERS' => '272731, 272746',
]); |
Событие и шаблон под своё имя нужно создать самостоятельно, в разделе Настройки → Настройки продукта → Почтовые и СМС события. Служебные ключи входят в хэш группировки, поэтому один и тот же текст, отправленный в разные события или на разные сайты, в одну группу не слипается.
Важно: $context — доверенный канал. Не передавайте в него непроверенные данные посетителя (целиком $_POST, поля формы): это содержимое письма администратору. Имена событий и SITE_ID модуль проверяет сам и при неверном значении возвращается к штатным.
Кто прислал сообщениеПлейсхолдер #SOURCE# («Ядро», идентификатор модуля или «Код сайта») модуль определяет сам, по вызывающему коду — подписывать свои сообщения вручную не нужно. Если автоопределение не подходит, источник можно задать явно:
Notifier::report('Импорт остатков завершился с ошибками', [
'SOURCE' => 'Импорт остатков',
]); |
Общие правила
Сообщения, отправленные через report(), подчиняются настройкам модуля наравне с перехваченными ошибками:
- при выключенном перехвате и выключенной настройке «Разрешить оповещения из кода (API)» они не отправляются вовсе;
- при включённой группировке они копятся в очереди и уходят сводным уведомлением со счётчиком повторов, если не передан ключ IMMEDIATE.
Одинаковыми (и потому попадающими в одну группу) считаются сообщения, совпадающие по тексту, коду, файлу, строке, типу, источнику и набору дополнительных полей.
ДеинсталляцияПри удалении модуля можно отметить опцию «Оставить почтовые и SMS-события и шаблоны модуля» — тогда созданные и настроенные вами события и шаблоны сохранятся после удаления модуля.
Поддержка работает по будням с 10 до 18 МСК. Обращения обрабатываются в порядке очереди, поэтому время первой реакции может составлять до 2х рабочих дней, но обычно отвечаем заметно быстрее.
Если вопрос срочный, ответ можно получить вне очереди: приобретите купон спецобращения и укажите его код при создании обращения. По такому обращению мы отвечаем в течение 3 часов в рабочее время.
Авторская поддержка
Модуль разрабатывается и сопровождается автором лично — https://rover-it.me. Мы отвечаем на вопросы по установке и настройке, оперативно исправляем обращения по работе модуля и открыты к пожеланиям по развитию функциональности.
Если у вас нестандартный сценарий — напишите нам, обсудим индивидуальную доработку.
Установите этот модуль прямо сейчас!
Для этого укажите адрес сайта:
Подтвердите что сама лицензия у вас куплена
