Инструкция по работе связки Event Bus + Notification Center
Система позволяет отправлять уведомления пользователям, просто публикуя событие в коде. Модуль событий сам перехватывает их и передает в центр уведомлений.
Основные принципы работы
1. Краткие условия для работы (Чек-лист)
Чтобы уведомление ушло, должны быть выполнены все следующие условия:
В модуле событий (erp208):
- В таблице
erp_208_event_subscribersесть запись с вашимevent_name - У этой записи флаг
is_notification = 1иis_active = 1
В центре уведомлений (erp217):
- Подписка: В таблице
erp217_subscriptionsконкретный пользователь подписан на этот тип события (event_type) и канал (email/telegram) - Шаблон: В таблице
erp217_templatesсоздан текст письма/сообщения для этого события и канала - Данные: У пользователя в профиле заполнен email или telegram_id (в зависимости от канала)
2. Как это работает (Алгоритм)
Вызов: Вы пишете в коде EventBus::instance()->publish('order_ready', $data, $user_id)
Перехват: EventBus видит в БД, что на order_ready стоит флаг is_notification
Передача: EventBus вызывает метод _proxy_to_notification_center, который отправляет данные в Service_Erp217_Bus
Очередь: Центр уведомлений проверяет подписки пользователя, рендерит шаблон (заменяя {{переменные}} на данные из $data) и кладет готовое сообщение в таблицу erp217_queue
Отправка: Cron (планировщик) раз в минуту берет записи из очереди и физически отправляет их через SMTP или API мессенджеров
3. Как это выглядит для пользователя
Для разработчика
Это одна строчка кода. Не нужно заботиться о том, как отправить письмо или проверить настройки пользователя.
Для администратора
В админке модуля 208 он просто ставит галочку "Отправлять в уведомления" для нужного события. В модуле 217 он правит текст шаблона.
Для конечного пользователя
Он получает письмо или сообщение в Telegram только по тем событиям, которые он сам разрешил в своем личном кабинете (настройках уведомлений).
4. Пример настройки нового уведомления
Если вы добавили в систему событие "Новый комментарий" (new_comment):
БД (208): Добавьте строку в erp_208_event_subscribers:
is_notification=1
БД (217): Создайте шаблон в erp217_templates:
subject='Новый комментарий'
body='Вам написали: {{comment_text}}'
Код:
'comment_text' => 'Привет, как дела?',
'target_user_id' => 10 // ID получателя
], $author_id);
Сложно ли это?
Нет. Основная сложность (логика проверки, рендеринга и очередей) скрыта внутри сервисов. Для расширения системы достаточно добавлять записи в таблицы БД, не меняя программный код модулей.
Принципы работы
Системная архитектура
- Event Bus - центральный модуль событий
- Notification Center - система уведомлений
- БД для хранения событий и шаблонов
Преимущества
- Простота реализации
- Автоматическая обработка уведомлений
- Расширяемость системы