Направление работ: AdmLk Код раздела: 3.5 Раздел: Управление > Рассылки Статус: черновик Ответственный: Панкова Л.А. Версия: 0.1 Обновлено: 27.07.26
1. Назначение
Данный раздел обеспечивает сотруднику сервисного кабинета интерфейс для управления почтовыми рассылками.
Сотрудник просматривает и фильтрует список рассылок, создает новую рассылку, настраивает немедленную или отложенную отправку, редактирует рассылки с учетом их состояния, архивирует и восстанавливает их.
Интерфейс также показывает ход отправки писем по адресатам и результат каждой попытки.
Раздел зависит от Back: 7.3 Уведомления > Рассылки, а выбор шаблона и процесс доставки связаны с Back: 7.1 Уведомления > Шаблоны уведомлений и список событий и Back: 7.2 Уведомления > Процессинг и каналы доставки уведомлений.
2. Ключевые понятия
Рассылка — почтовая отправка по заданному списку адресов, которой сотрудник управляет в разделе AdmLk 3.5.
Шаблон уведомления — заранее подготовленный шаблон, который сотрудник выбирает для рассылки.
Процесс отправки — выполнение отправки писем адресатам с отображением результата каждой попытки в интерфейсе.
Отложенная рассылка — рассылка, для которой заданы дата и время начала отправки.
Отправленная рассылка — рассылка, по которой процесс отправки уже начался.
Архивная рассылка — рассылка с включенным признаком «Архив».
Состояние рассылки — неизменяемый признак того, была ли рассылка проведена.
Статус рассылки — признак архивности рассылки.
Статус письма — отображаемый результат отправки письма отдельному адресату, например «Доставлено», «Ожидает отправки» или «Ошибка».
3. Scope
Входит
S1: Просмотр и фильтрация рассылок
S2: Создание рассылки
S3: Редактирование отправленной рассылки
S4: Редактирование неотправленной рассылки
S5: Архивация рассылки
S6: Восстановление рассылки
S7: Адаптивное отображение раздела
Не входит
- Back 7.1 Уведомления > Шаблоны уведомлений и список событий — создание и редактирование содержимого шаблонов.
- Back 7.2 Уведомления > Процессинг и каналы доставки уведомлений — внутренняя обработка очереди, каналов доставки и повторных попыток.
4. BR
Указаны в пункте 4 раздела Back: 7.3 Уведомления > Рассылки.
5. Функциональные требования (UC + FR)
| ID | Сценарий | Функциональное требование | BR | Вес | Статус |
|---|---|---|---|---|---|
| S1: FR3.5-1 | Сотрудник открывает раздел «Рассылки» | Интерфейс показывает заголовок «Рассылки», панель поиска и фильтров, действие добавления и таблицу ранее созданных рассылок. | 1 | Реализовано | |
| S1: FR3.5-2 | Сотрудник просматривает список рассылок | Интерфейс показывает для каждой рассылки колонки «Название», «Шаблон», «Старт», «Состояние», «Ок», «Ошибки» и «Статус». В колонке «Состояние» отображается неизменяемый признак того, была ли рассылка проведена, а в колонке «Статус» — признак архивности. | 1 | Реализовано | |
| S1: FR3.5-3 | Сотрудник ищет рассылку | Интерфейс позволяет найти рассылку через поле «Найти» и обновляет таблицу по введенному значению. | 1 | Частично #[OQ3.5-2] | |
| S1: FR3.5-4 | Сотрудник фильтрует рассылки по дате старта | Интерфейс позволяет задать начало и окончание периода через поля «С» и «До» и показывает рассылки, соответствующие выбранному периоду. | 2 | Частично #[OQ3.5-2] | |
| S1: FR3.5-7 | Список рассылок загружается | Интерфейс показывает состояние загрузки в области поиска, фильтров и таблицы до получения данных. | 2 | Реализовано | |
| S1: FR3.5-8 | Сотрудник открывает рассылку | Интерфейс открывает страницу «Редактирование рассылки» с данными выбранной рассылки и таблицей отправки писем. | 1 | Частично #[OQ3.5-2] | |
| S1: FR3.5-9 | Сотрудник просматривает отправку писем | После начала отправки интерфейс заполняет таблицу с колонками «Статус», «Дата», «Попыток» и «Email» результатами по адресатам, включая «Доставлено», «Ожидает отправки» и «Ошибка». | 1 | Частично #[OQ3.5-2] #[OQ3.5-3] | |
| S1: FR3.5-10 | Сотрудник ищет и фильтрует результаты отправки | После начала отправки интерфейс позволяет искать записи в таблице и фильтровать их через поле «Статус письма». До начала отправки эти действия недоступны. | 2 | Частично #[OQ3.5-2] | |
| S1: FR3.5-5 | Сотрудник фильтрует письма по статусу | Интерфейс позволяет выбрать в фильтре «Статус письма» значение «Все», «Доставлено», «Ожидает отправки» или «Ошибка» и обновляет таблицу согласно выбранному значению. | 2 | Частично #[OQ3.5-2] | |
| S1: FR3.5-6 | Сотрудник фильтрует письма по статусу «Отменено» (на будущую реализацию) | Интерфейс показывает значение «Отменено» в фильтре «Статус письма» и позволяет отобрать соответствующие рассылки. | 3 | Не реализовано #[OQ3.5-5] | |
| S2: FR3.5-11 | Сотрудник инициирует создание рассылки | Интерфейс открывает страницу «Создание рассылки» по действию добавления в списке рассылок. | 1 | Реализовано | |
| S2: FR3.5-12 | Сотрудник заполняет данные рассылки | Интерфейс позволяет указать «Название», выбрать «Шаблон», задать дату «Старт с» и «Время», а также заполнить список «Почтовые адреса». | 1 | Реализовано | |
| S2: FR3.5-13 | Сотрудник очищает дату и время старта | Интерфейс позволяет сбросить ранее выбранные значения в полях «Старт с» и «Время». | 2 | Реализовано | |
| S2: FR3.5-14 | Сотрудник заполняет обязательные данные | Интерфейс оставляет действия «Сохранить» и «Разослать» недоступными, пока не заполнены обязательные поля, и активирует применимое действие после корректного заполнения. | 1 | Реализовано | |
| S2: FR3.5-15 | Сотрудник создает отложенную рассылку | Если заполнены дата и время старта, интерфейс делает действие «Разослать» недоступным и позволяет сохранить рассылку для отправки по заданному таймеру. | 1 | Частично #[OQ3.5-2] | |
| S2: FR3.5-16 | Сотрудник сохраняет или отправляет рассылку без даты старта | Если дата и время старта не заданы, интерфейс позволяет выполнить действие «Сохранить» без запуска отправки или действие «Разослать» для немедленного начала отправки. | 1 | Частично #[OQ3.5-2] | |
| S2: FR3.5-17 | Отправка писем начинается | Интерфейс наполняет таблицу результатами отправки по адресатам и добавляет новую рассылку в общую таблицу раздела. | 1 | Частично #[OQ3.5-2] #[OQ3.5-3] | |
| S2: FR3.5-18 | Сотрудник отменяет рассылку (на будущую реализацию) | Интерфейс позволяет выполнить действие «Отменить» и отображает рассылку со статусом «Отменено». | 3 | Не реализовано #[OQ3.5-5] | |
| S3: FR3.5-19 | Сотрудник открывает отправленную рассылку | Интерфейс открывает данные отправленной рассылки и показывает заполненную таблицу результатов по адресатам. | 1 | Частично #[OQ3.5-2] | |
| S3: FR3.5-20 | Сотрудник редактирует отправленную рассылку | Интерфейс позволяет изменить «Название» и признак «Архив», а поля «Шаблон», «Старт с», «Время» и «Почтовые адреса» оставляет недоступными для редактирования. | 1 | Реализовано | |
| S3: FR3.5-21 | Сотрудник копирует почтовые адреса отправленной рассылки | Интерфейс позволяет скопировать отображаемые значения из списка «Почтовые адреса». | 3 | Не реализовано #[OQ3.5-4] | |
| S3: FR3.5-22 | Сотрудник сохраняет изменения отправленной рассылки | Интерфейс активирует действие «Сохранить» после изменения доступных данных и сохраняет внесенные изменения. | 1 | Частично #[OQ3.5-2] | |
| S4: FR3.5-23 | Сотрудник открывает неотправленную рассылку | Интерфейс открывает данные рассылки, процесс отправки которой еще не начался, и показывает пустую таблицу результатов по адресатам. | 1 | Частично #[OQ3.5-2] | |
| S4: FR3.5-24 | Сотрудник редактирует неотправленную рассылку | Интерфейс позволяет изменить «Название», «Шаблон», дату «Старт с», «Время» и список «Почтовые адреса». | 1 | Реализовано | |
| S4: FR3.5-25 | Сотрудник изменяет способ старта неотправленной рассылки | Интерфейс применяет доступность действий «Сохранить» и «Разослать» согласно наличию или отсутствию даты и времени старта. | 1 | Реализовано | |
| S4: FR3.5-26 | Сотрудник сохраняет неотправленную рассылку | Интерфейс активирует действие «Сохранить» после изменения данных и сохраняет внесенные изменения. | 1 | Частично #[OQ3.5-2] | |
| S5: FR3.5-27 | Сотрудник открывает рассылку для архивации | Интерфейс показывает в форме редактирования выключенный переключатель «Архив» для неархивной рассылки. | 1 | Частично #[OQ3.5-2] | |
| S5: FR3.5-28 | Сотрудник архивирует рассылку | Интерфейс позволяет включить переключатель «Архив» и активирует действие «Сохранить». | 1 | Реализовано | |
| S5: FR3.5-29 | Архивация сохранена | После сохранения интерфейс возвращает сотрудника к списку и отображает рассылку как архивную в колонке «Статус». | 1 | Частично #[OQ3.5-2] | |
| S6: FR3.5-30 | Сотрудник открывает архивную рассылку | Интерфейс позволяет открыть архивную рассылку из списка и показывает включенный переключатель «Архив». | 1 | Частично #[OQ3.5-2] | |
| S6: FR3.5-31 | Сотрудник восстанавливает рассылку | Интерфейс позволяет выключить переключатель «Архив» и активирует действие «Сохранить». | 1 | Реализовано | |
| S6: FR3.5-32 | Восстановление сохранено | После сохранения интерфейс возвращает сотрудника к списку и отображает рассылку как неархивную в колонке «Статус». | 1 | Частично #[OQ3.5-2] | |
| S7: FR3.5-33 | Сотрудник использует раздел на разных ширинах экрана | Интерфейс адаптирует страницу раздела рассылок, карточки, связанные блоки, формы редактирования и таблицы для desktop, laptop и tablet. | 2 | Реализовано |
6. Открытые вопросы
Контекст сверки. BRD версия 0.1 (обновлено 27.07.26). Репозиторий:
musbooking.weblk.adminpanel, commit3a107bd5278c71559b98c4701a1b47aa8b7ab0e0(origin/main, 2026-09-06). Кросс-слой проверялся вbooking-monorepo, commit82359296(2026-09-07). Дата сверки: 2026-09-08. Якорь в коде:widgets/mailing/**,entities/mailing/**,features/mailing-form/**,features/mailing-drawer/**,features/mailing-list/**,pages/management/mailing/**,shared/api-contracts/mailings/mailings.schema.ts,shared/api/MailingsService.ts; на бэке —src/services/booking.notifications/src/Booking.Notifications/Features/Mailing/**,Database/Models/Mailing.cs,Database/Models/EmailNotification.cs,BaseServiceImplementation.cs. Первая полная сверка — колонка «Статус» была пустой у всех 33 требований. Гайдбук не передавался — маршрутизация вопросов без сверки с гайдбуком.
| ID | Источник | Вопрос | Кому | Статус | Рекомендации | Итоговое решение |
|---|---|---|---|---|---|---|
| OQ3.5-1 | FR3.5-1 – FR3.5-33 (весь раздел) / Back 7.3 Уведомления > Рассылки | Требование говорит: сотрудник создаёт разовую рассылку по явному списку почтовых адресов, с немедленной либо однократной отложенной отправкой (дата+время «Старт с» / «Время»), и видит результат доставки по каждому адресату («Доставлено» / «Ожидает отправки» / «Ошибка»). В коде бэкенда (Booking.Notifications) модель рассылки — принципиально другая: Mailing/MailingSetting описывают периодическую рассылку по расписанию (Frequency, TimeFrom/TimeTo, DateFrom/DateTo), без списка email-адресов и без единого «результата отправки» на саму рассылку — src/services/booking.notifications/src/Booking.Notifications/Database/Models/Mailing.cs:8-58. Команды CreateMailingCommand/UpdateMailingCommand не содержат полей Emails, StartAt, SendImmediately, IsSent — Features/Mailing/Create/CreateMailingCommand.cs:8-16, Features/Mailing/Update/UpdateMailingCommand.cs:8-16. | Бизнес | Open | Подтвердить с продуктом/аналитиком целевую модель рассылки: разовая по явному списку адресов (как в BRD AdmLk 3.5 и в текущем фронте) или периодическая по расписанию (как в текущей структуре БД бэкенда). От решения зависит объём доработки: переписывать backend-модель рассылок под контракт фронта или наоборот. | |
| OQ3.5-2 | FR3.5-3, FR3.5-4, FR3.5-5, FR3.5-8, FR3.5-9, FR3.5-10, FR3.5-15, FR3.5-16, FR3.5-17, FR3.5-19, FR3.5-22, FR3.5-23, FR3.5-26, FR3.5-27, FR3.5-29, FR3.5-30, FR3.5-32 | Требование говорит: список рассылок загружается и фильтруется, карточка рассылки открывается с реальными данными, создание/редактирование/отправка/архивация сохраняются на сервере. В коде фронта это реализовано через вызовы GetMailingsService, GetMailingByIdService, CreateMailingService, UpdateMailingService сервиса NotificationService — shared/api/MailingsService.ts:19-86; сам файл прямо фиксирует состояние: «Методов в swagger пока нет — вызовы будут падать до готовности бэка» (shared/api/MailingsService.ts:1-3). В коде бэкенда ни один из этих 4 методов не зарегистрирован: в Features/Mailing/ есть только подпапки Create/, Update/ и Services/ (нет Get/List), а сами команды CreateMailingCommand.cs и UpdateMailingCommand.cs не помечены атрибутом [RpcMethod(...)] — для сравнения, рабочий метод шаблонов помечен явно: Features/Template/Create/CreateTemplateCommand.cs:10 → [RpcMethod("CreateTemplateService")]. Диспетчер BaseServiceImplementation.BuildHandlers() (BaseServiceImplementation.cs:52-68) регистрирует обработчик метода только по наличию атрибута RpcMethodAttribute — соответственно любой из 4 вызовов рассылок вернёт ошибку «метод не найден». | Разработка | Open | Завести тикет в Bitrix на реализацию и регистрацию ([RpcMethod]) методов GetMailingsService, GetMailingByIdService, CreateMailingService, UpdateMailingService в Booking.Notifications — после решения по OQ3.5-1, так как текущая модель БД под контракт фронта не подходит и потребует миграции схемы (emails, startAt, sendImmediately, isSent, получатели). | |
| OQ3.5-3 | FR3.5-9, FR3.5-17 | Требование говорит: после отправки рассылки интерфейс показывает по каждому адресату статус доставки («Доставлено» / «Ожидает отправки» / «Ошибка»), дату и число попыток. В коде бэкенда job, который должен выполнять фактическую отправку и фиксировать результат по адресату, — пустая заглушка: SendMailingJob.Execute только пишет пустую строку в консоль и ничего не делает — Features/Mailing/Services/SendMailingJob.cs:8-11. Таблица email_notification (Database/Models/EmailNotification.cs:8-38) технически содержит нужные поля (RecipientEmail, Attempts, Status, MailingId), но ничем не заполняется для рассылок. | Разработка | Open | Реализовать логику SendMailingJob (реальная отправка + запись результата в email_notification по каждому адресату) как часть работ по OQ3.5-2 — без неё таблица результатов отправки останется пустой даже после появления RPC-методов. | |
| OQ3.5-4 | FR3.5-21 | Требование говорит: сотрудник может скопировать отображаемые почтовые адреса отправленной рассылки. В коде такого действия нет: в features/mailing-drawer/ui/MailingDrawer.vue поле «Почтовые адреса» — обычное readonly-текстовое поле без кнопки/иконки копирования (features/mailing-drawer/ui/MailingDrawer.vue:86-99), и по всему разделу (widgets/mailing, features/mailing-form, features/mailing-list, features/mailing-drawer, entities/mailing) не встречается ни одного упоминания copy/clipboard/«скопир». | Разработка | Open | В отличие от FR3.5-6/FR3.5-18, это требование НЕ помечено в BRD как «на будущую реализацию» — похоже на пропущенный кусок скоупа, а не осознанное решение. Уточнить у разработки, планировалась ли кнопка копирования, и завести тикет при подтверждении. | |
| OQ3.5-5 | FR3.5-6, FR3.5-18 | Что подтверждено: оба требования в самом BRD помечены «(на будущую реализацию)». Код это подтверждает: статус «Отменено» / Cancelled отсутствует в перечислении статусов письма (features/mailing-form/model/mailingRecipientStatus.ts:7-11,20-25, shared/api-contracts/mailings/mailings.schema.ts:8); действия «Отменить» нет ни в features/mailing-drawer/ui/MailingDrawer.vue (кнопки только «Сохранить» / «Разослать», :112-134), ни в features/mailing-form/ui/MailingForm.vue. | Разработка | Подтверждено | Действий не требуется — расхождения с BRD нет, реализация сознательно отложена. | — |