Skip to content

Уведомления — колокольчик, почта и кто решает, что до вас дойдёт ​

Простыми словами: платформа сообщает, когда что-то произошло с вами — вас назначили на задачу, вам предложили выплату, администратор зашёл в ваш аккаунт. Приходит в колокольчик в шапке любой страницы, а также на почту, когда вас нет в приложении.

Правило, благодаря которому колокольчик остаётся стоящим открытия, намеренно узкое:

Уведомление создаётся, только если событие касается вас напрямую.

Всё остальное — каждая созданная кем-то задача, каждая правка проекта — остаётся в ленте активности, которая исчерпывающа по замыслу. Колокольчик — не уменьшенная лента, это другой вопрос. Если их слить, колокольчик превратится в то, что пролистывают не глядя, а это единственный отказ, обесценивающий всю затею.

О собственных действиях вам тоже никогда не сообщают.

Как сделать... ​

Свои уведомления и настройки ​

Посмотреть, что вы пропустили — колокольчик в правом верхнем углу любой страницы. Число на нём показывает, сколько уведомлений вы ещё не прочитали. Клик по уведомлению ведёт прямо к тому, о чём оно. Непрочитанные сгруппированы в сворачиваемое дерево по тому, куда они ведут (Задачи, Отделы, Проекты, Роли, ...), по умолчанию свёрнуто, так что открытие колокольчика никогда не показывает больше, чем заголовки групп, пока вы не раскроете нужную — счётчик у каждой группы настоящий общий, а не просто сколько успело загрузиться. Отметить прочитанным у строки стоит подальше от места клика для открытия, чтобы не перепутать одно с другим. Кнопка «отметить прочитанным» у самой группы закрывает все непрочитанные за ней, а не только то, что успело загрузиться в панель. Само открытие колокольчика ничего не отмечает прочитанным — только клик по строке или по кнопке.

Открыть полный список — колокольчик → Все уведомления, либо Мой аккаунт → Уведомления. Есть фильтры по статусу (прочитано/непрочитано) и по важности, а любое уведомление можно отметить прочитанным и обратно. То же дерево по группам доступно и здесь, за переключателем (по умолчанию выключен — см. Ваши уведомления ниже, почему тут безопаснее начинать с плоского вида).

Перестать получать какой-то вид уведомлений на почту — Мой аккаунт → Уведомления → вкладка Настройки → выключить Почту у нужной группы. В колокольчике она продолжит появляться, прекратятся только письма. См. описание полей.

Сменить язык писем — Мой аккаунт → Профиль → Язык, а не переключатель EN/RU/HY в меню аватара (2026-08-21 — полное разделение см. в IAM → Личный кабинет). Тот переключатель меняет только то, что видно в текущей сессии, и оказалось, что он же незаметно менял постоянный язык писем — именно поэтому их разделили; постоянным языком по умолчанию теперь служит только поле на странице профиля. Текст внутри самого приложения по-прежнему всегда следует тому языку, который открыт прямо сейчас — то есть переключателю из меню аватара, если ты им пользовалась в этой сессии, иначе — твоему языку по умолчанию из профиля.

Политика платформы (администраторам) ​

Изменить, что платформа отправляет — Управление платформой → Уведомления. Каждую группу можно выключить целиком, задать ей другую важность, включить или выключить почту по умолчанию и заблокировать, чтобы люди не могли менять её себе.

Приостановить всю исходящую почту — там же, переключатель сверху. Уведомления в приложении продолжают работать, а письма из очереди сохраняются и уйдут, когда переключатель вернут обратно — ничего не теряется.

Выяснить, почему человеку не приходит письмо — на той же странице видны его итоговые настройки, только на чтение. Изменить их за него нельзя, почему — см. Кто что решает.

Политика организации (Team Manager/Team Admin) ​

Изменить, что отправляют группы уведомлений этой организации — Настройки → Уведомления (доступно только организации, подписанной на продукт со своими группами уведомлений). Те же элементы управления «Включено/Важность/Почта по умолчанию/Может менять пользователь», что и в политике платформы выше, но для собственных групп этой организации — для P4P Internal это группы Team Management и Календаря. Кто может открыть эту страницу — см. Политика организации ниже.

Группы ​

Вы настраиваете группы, а не отдельные события. Событий заметно больше, чем групп, и это сознательно: экран настроек остаётся читаемым, а добавление нового события в существующую группу ничего не меняет в том, что вам придётся снова просматривать.

ГруппаЧто охватываетВажностьПочта по умолчанию
Безопасность аккаунтавход с нового устройства, смена пароля, работа администратора под вашей учётной записьюВажное 🔒вкл, выключить нельзя
Мои задачивас назначили, сняли, или задачу, над которой вы работаете, удалилиОбычноевкл
Статусы моих задачизменился статус задачи, над которой вы работаетеИнформационноевыкл
Комментарииновые комментарии к задаче или в обсуждении проекта, где вы участвуетеОбычноевкл
Выплатыпредложения, ответы на них и подтверждения полученияВажноевкл
Проекты, отделы и ролидобавили/убрали из проекта или отдела; платформенную роль назначили, отозвали, переименовали, удалилиОбычноевкл
Администрированиеновые заявки в HR-пул (только если вы можете их рассматривать)Обычноевкл
Приглашения в календареприглашения, переносы, отмены и ответы по событиям, где вы участвуетеОбычноевкл
Напоминания о событияхнапоминание незадолго до начала событияОбычноевыкл
Активность отделовсоздание, изменение и удаление отделов, а также изменения состава и проектов в вашихИнформационноевыкл
Активность проектовсоздание, изменение и удаление проектовИнформационноевыкл
Сотрудникикогда коллега присоединяется к команде или покидает еёИнформационноевыкл
Анонсыобщие объявления от администраторов P4PОбычноевкл
Запуски агентовфоновая или запланированная задача агента завершилась или упалаОбычноевыкл
Поддержкаваше обращение за помощью и ответы на него — или, если отвечаете вы, новое обращениеОбычноевкл
Отсутствиязаявка на отсутствие, ждущая вашего решения, решение по вашей, больничный или отмена отсутствия коллегиОбычноевкл
Права платформенной ролиу платформенной роли, которая у вас есть, добавили или убрали правоОбычноевыкл
Изменения подпискиу организации, которой вы администрируете, включилась или выключилась подписка на продуктОбычноевкл

Показываются только те группы, которые реально могут что-то прислать. Если администратор выключил какую-то, она исчезает из ваших настроек, а не остаётся переключателем над пустотой.

Три уровня важности ​

Важность — это не цвет. Она определяет, как уведомление до вас дойдёт и можете ли вы от него отказаться:

  • Важное — в приложении и на почту, всегда. Безопасность аккаунта отключить нельзя вовсе: вход в вашу учётную запись — не вопрос вкуса.
  • Обычное — в приложении всегда, почта включена, пока вы её не выключите.
  • Информационное — в приложении, почта только если вы её попросите.

В списке видимую отметку несёт только Важное. Если раскрасить все три уровня, окрашенной окажется каждая строка и не выделится ни одна.

Что происходит всегда, что бы вы ни настроили ​

  • В приложении отключить нельзя. Уведомление и есть запись о том, что событие произошло; если вы заглушили группу, вам всё равно нужно место, где найти заглушённое. «Почта или нет» — единственный настоящий вопрос, поэтому только его и задаёт экран настроек.
  • Повторы схлопываются. Три комментария к одной задаче — это одна строка с пометкой «×3», а не три, и одно письмо, а не три. Исключение — безопасность аккаунта: каждое такое событие отдельный инцидент и обязано сохраниться само по себе.
  • О собственных действиях вам не сообщают.
  • Изменение политики не переписывает прошлое. Уведомление сохраняет важность, с которой было создано.

Кто что решает ​

ВыАдминистратор платформы
Ваши настройки почты✅ меняете👁 только видит
Существует ли группа вообще—✅
Важность группы—✅
Могут ли люди менять группу—✅ (может заблокировать, но не разблокировать безопасность)
Приостановить всю почту—✅

Ваши личные настройки не может править никто — даже суперадмин. Всё, что администратору реально нужно, достижимо политикой: чтобы дошло до всех — он блокирует группу включённой; чтобы не дошло ни до кого — выключает её. Результат достигается без доступа, поэтому доступа и нет.

Видеть ваши итоговые настройки он может — иначе никто не смог бы ответить на вопрос «почему мне не приходит письмо», единственный, который эта система гарантированно порождает.

Чего политика не умеет:

  • Разблокировать безопасность аккаунта. Она может только ужесточать.
  • Отключить уведомления в приложении. См. выше.

Почта ​

Письмо отправляется после действия, фоновой задачей, и никогда внутри того запроса, который его вызвал. Поэтому задача не может не создаться из-за недоступного почтового сервера — письмо ждёт в очереди и уходит, когда сможет.

Что из этого следует на практике:

  • Письмо может прийти примерно на минуту позже самого события.
  • Пауза почты ничего не теряет, а откладывает.
  • Письма пишутся на языке, сохранённом в вашем профиле, а не на языке того, кто вызвал уведомление.
  • В каждом письме есть ссылка на ваши настройки уведомлений.

Ваши уведомления (/account/notifications) ​

Простыми словами: всё, что адресовано вам, и единственные настройки, которые вы меняете себе.

Две вкладки. Уведомления — список: фильтры по статусу и важности, переход к тому, где событие произошло, отметка прочитанным и обратно. Настройки — по строке на группу, с одним вопросом у каждой: должно ли это доходить ещё и до почты.

Прочитанные из списка не исчезают, а приглушаются. Прочитать — не значит выбросить, а список, удаляющий то, по чему вы только что кликнули, делает промах непоправимым.

Плоский вид или дерево (2026-08-13) — переключатель на панели инструментов переводит список между плоским (по умолчанию) и тем же деревом по группам, что и в колокольчике. Плоский вид здесь безопаснее по умолчанию: свёрнутая группа занимает почти нулевую высоту, и без этого триггер бесконечной подгрузки оказывался внутри видимой области без реальной прокрутки, молча подгружая всю историю целиком в момент открытия страницы. Переключение на дерево приостанавливает дальнейшую автоподгрузку, пока не раскрыта хотя бы одна группа; плоский вид этим никогда не затронут.

Настройки уведомлений — описание полей ​

Мой аккаунт → Уведомления → Настройки

  • Почта (у каждой группы) — доходит ли эта группа ещё и до почтового ящика. Уведомления в приложении в списке отсутствуют, потому что это не выбор.
  • Значок замка рядом с группой означает, что её зафиксировала политика платформы. Подсказка говорит, кем. Постоянно заблокирована только Безопасность аккаунта.
  • Группы, выключенные администратором, не показываются вовсе — как и группы продукта, к которому у вас нет доступа (2026-08-18): группы Team Management появляются, только если у вас есть право workspace:staffing:read, а обе группы Календаря — только с workspace:calendar:read (обе переименованы из platform:staffing:read/platform:calendar:read 2026-08-18, docs/staffing/ADR-002-org-rbac-migration.md, этап 8). Безопасность аккаунта — единственная группа, которую видят все.

Политика платформы (/platform/notifications) ​

Простыми словами: что платформа отправляет, кому и насколько громко — сразу для всех. С 2026-08-19 это ровно одна группа: Безопасность аккаунта, единственная, не привязанная ни к одному продукту. Политика каждой другой группы переехала в организацию, которой она реально принадлежит — см. Политику организации ниже.

Нужно право platform:notifications:read чтобы видеть и platform:notifications:manage чтобы менять. Всё здесь действует на уведомления, создаваемые с этого момента; уже отправленное не переписывается.

Сужена, 2026-08-19 — больше не затрагивает продукто-зависимые группы. До этой даты те же два права также управляли платформенным «потолком» над группами Team Management и группами Календаря — но при том, что подписана на этот продукт ровно одна организация (P4P Internal), администратор платформы, настраивающий то, что увидит только эта одна организация, был делом организации в костюме платформенного права (собственная датированная запись в docs/iam/PERMISSIONS_CATALOG.md). Политика каждой продукто-зависимой группы теперь целиком принадлежит своей организации; ничего сверху её больше не сужает и не переопределяет.

Политика платформы — описание полей ​

Управление платформой → Уведомления (platform:notifications:manage)

  • Включена — выключено означает, что группа не порождает ничего и ни для кого. Она также исчезает из личных настроек у всех.
  • Важность — см. выше. Действует на уведомления, создаваемые с этого момента.
  • Почта по умолчанию — что получает человек, пока он ничего не выбрал сам. Изменение доходит до всех, кто своей настройки не трогал, и не затрагивает тех, кто трогал.
  • Пользователь может менять — выключено фиксирует группу на значении выше. Безопасность аккаунта заблокирована постоянно и разблокировать её здесь нельзя — единственная оставшаяся на этой странице группа, так что на практике этот переключатель теперь всегда неактивен.
  • Метка по умолчанию — группа работает на встроенном значении, её никто не переопределял.
  • Приостановить всю исходящую почту — операционная пауза. Есть ещё отдельная переменная окружения NOTIFICATIONS_EMAIL_ENABLED, и отправка идёт, только если разрешают оба. Если блокирует переменная, страница прямо об этом говорит — иначе пауза без видимого эффекта осталась бы загадкой.

Политика организации (/org/[slug]/notifications) ​

Простыми словами: та же идея, что и Политика платформы выше, но ограничена продукто-зависимыми группами одной организации — для P4P Internal это группы Team Management и Календаря. Требует workspace:notifications:manage, которое выдаётся только собственным ролям Team Manager/Team Admin в P4P Internal (не общесистемным OWNER/ADMIN — то же правило, которому уже следуют workspace:staffing:*/workspace:calendar:*). Достижима только для организации, действительно подписанной на продукт с группами уведомлений; иначе пункт меню (и сама страница) попросту отсутствуют.

То же описание полей, что и у Политики платформы выше — Включена/Важность/Почта по умолчанию/Пользователь может менять, по каждой группе — этот экран полностью владеет своими группами, а не сужает платформенный потолок над собой (этого потолка для этих групп больше не существует, см. выше). Заменила собой дизайн из двух колонок «значение платформы рядом со значением организации, доступным только для сужения» в тот же день, когда он был выпущен (docs/staffing/ADR-003-product-scoped-team-management.md) — раз сверху больше не с чем сравнивать, одна полностью редактируемая таблица — вся история.

Откуда берутся уведомления ​

Ничего здесь не является отдельной функцией. Каждое уведомление порождается обычным действием где-то ещё на платформе, и каждая такая страница описывает, что она отправляет, в своём разделе Уведомления:

Уведомления ​

Сама эта страница ничего не отправляет. Здесь вы читаете и настраиваете всё остальное.

Изменение настройки действует сразу и только на уведомления, созданные после него — всё, что уже лежит в списке, сохраняет важность и каналы, с которыми было создано.

Тестирование этого модуля ​

Бэкенд за /platform/notifications — заморозка важности в момент отправки (не переписывается задним числом), отключённая группа не производит ничего, блокировка отбирает у пользователя его собственный выбор отказа и восстанавливает его в целости при разблокировке, блокировку безопасности аккаунта не может снять даже администратор, пауза почты и её взаимодействие с переменной окружения NOTIFICATIONS_EMAIL_ENABLED — тщательно проверен, только через API (без браузера), скриптом scripts/e2e/notifications/policy.mjs. У колокольчика/почтовой стороны системы (дедупликация, исключение автора, изоляция между пользователями, оповещения о новом устройстве/имперсонации/сбросе пароля, бейджи в сайдбаре) есть свой постоянный набор — см. собственный раздел notifications/ в scripts/e2e/README.md.

Реальный браузерный UI /platform/notifications до этого раунда никто вообще не гонял: apps/portal/pages/platform/notifications.test.ts (9 тестов) покрывает, что переключатели/селекты требуют platform:notifications:manage, чтобы быть вообще активными, контракт patch() «заменить строку ровно тем, что разрешил сервер» (никогда не отражать оптимистичное значение — слой политики может отказать в части запроса), оптимистичное обновление setPaused() с откатом при неудаче, предупреждение об отключённой среде, то, что переключатель userCanOverride для account security остаётся заблокированным даже С правом manage (в отличие от обычной группы), и что бейдж «default» показывается только для политики, которую никто не переопределял. scripts/e2e/menu/platform-admin.mjs дополнен живой проверкой рендера таблицы политики и обратимым циклом «переключить "Email by default" → восстановить».

Найдено и исправлено, 2026-08-19/20 (было: «найдено, не исправлено» — название middleware в той первоначальной записи само оказалось устаревшим к моменту написания, см. ниже): в definePageMeta страницы platform/notifications.vue отсутствовал middleware: 'platform-admin-access' — единственное, что есть у каждой другой страницы /platform/* и единственное, что заполняет profile/platformPermissions через useCurrentUser().ensureLoaded() при свежей загрузке. (Первоначальный отчёт об ошибке называл СТАРЫЙ middleware platform-access, заменённый на platform-admin-access ещё 2026-08-14 — тот старый файл к 2026-08-19 оказался полностью мёртвым кодом, на который не ссылалась ни одна страница, и был удалён в тот же день, когда здесь добавили правильный middleware.) Свежий переход сюда — закладка, обновление браузера, набор URL вручную, открытие в новой вкладке — раньше рендерил всю таблицу политики с полностью заблокированными элементами управления, даже для SUPER_ADMIN; работало только после того, как в той же сессии уже была посещена какая-то ДРУГАЯ страница /platform/* (чей собственный middleware прогрел это общее состояние) и переход сюда произошёл по внутренней ссылке — именно поэтому обычное ручное тестирование через сайдбар никогда это не выявляло. Постоянная e2e-проверка, которая раньше фиксировала именно баговое поведение, теперь проверяет исправленное.

/account/notifications (личная страница списка — не имела покрытия вообще, ни юнит, ни живого, до 2026-08-12) — механизм живого обновления колокольчика/бейджа уже основательно подтверждён в других местах (notifications/{in-app,badges}.mjs, два реальных аккаунта, использующих то же самое состояние composable, что и эта страница); scripts/e2e/menu/account.mjs (3-й раунд серии /account/*, 11 проверок всего) покрывает то, чего они не касаются — собственный UI вкладок/фильтров страницы и реальное переключение одной строки: страница загружается с реальной историей уведомлений (более ранние раунды этой же сессии уже оставили достаточно, без посева), переключение на Settings обновляет URL до ?tab=settings (собственное содержимое этой вкладки — раздел Settings выше, уже покрытый notifications/{groups,policy,security,email}.mjs), фильтр статуса «Unread» сужает до строк, предлагающих только «Mark as read» — СОБСТВЕННОЕ доступное ДЕЙСТВИЕ строки, а не «Mark as unread» (реальный нюанс, пойманный вживую: кнопка называет то, что СДЕЛАЕТ клик, так что непрочитанная строка гласит «Mark as read», что легко перепутать при написании проверки) — и реальный цикл переключения прочитано/непрочитано на одной строке, восстановленный после, чтобы прогон не менял историю. Сопутствующее юнит-покрытие, apps/portal/pages/account/notifications.test.ts (12 тестов) — переключение вкладки через URL, фильтр «unread», запускающий реальную серверную перезагрузку против «read»/важности, остающихся чисто клиентскими, activeFilterCount, считающий только важность (у статуса свой всегда видимый контрол, так что подсчёт его тоже показал бы число, которое ничто в меню фильтра не объясняет), три различных состояния пусто/ошибка, onActivate, помечающий строку прочитанной, но никогда не помечающий уже прочитанную непрочитанной снова, выбор, привязанный к текущим ОТФИЛЬТРОВАННЫМ строкам (не ко всему загруженному списку — «выбрать всё» под фильтром не может незаметно дотянуться дальше того, что на экране) и очищающийся при любом изменении фильтра, и реальный массовый вызов setReadMany. NotificationRow (общий с собственным поповером колокольчика) монтируется по-настоящему; NotificationSettings остаётся заглушкой, совпадая с разделением e2e выше.