Инструкция по работе связки 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:

event_name='new_comment'
is_notification=1

БД (217): Создайте шаблон в erp217_templates:

event_alias='new_comment'
subject='Новый комментарий'
body='Вам написали: {{comment_text}}'

Код:

Service_Erp208_EventBus::instance()->publish('new_comment', [
  'comment_text' => 'Привет, как дела?',
  'target_user_id' => 10 // ID получателя
], $author_id);

Сложно ли это?

Нет. Основная сложность (логика проверки, рендеринга и очередей) скрыта внутри сервисов. Для расширения системы достаточно добавлять записи в таблицы БД, не меняя программный код модулей.

Принципы работы

Системная архитектура

  • Event Bus - центральный модуль событий
  • Notification Center - система уведомлений
  • БД для хранения событий и шаблонов

Преимущества

  • Простота реализации
  • Автоматическая обработка уведомлений
  • Расширяемость системы