Матрица уведомлений
Актуально для: SimpleTwo 0.9.x · Проверено: 20.09.2026
Два вопроса, которые стоит держать раздельно: придёт ли уведомление вообще и что в нём написано. Ниже оба, и первый — в виде таблицы, каждая строка которой подтверждена тестом: строка, изменённая в продукте и не изменённая здесь, — это дефект в том, что не изменили.
1. Порядок правил
Правила применяются сверху вниз, выигрывает первое. Этот порядок и есть политика.
- Вы сами это написали → ничего.
- Беседа или тред приглушены → ничего. Приглушение сильнее любых отношений, включая руководителя: переключатель, который человек видит, не может делать меньше, чем тот, которого он не видит.
- Приложение подключено и не спит → ничего: сообщение уже доставлено сокетом. Только для сообщений — звонок сокет не спрашивает вовсе. «Не спит» — это утверждение самого клиента, а не факт наличия соединения: свёрнутое приложение держит сокет и не будит никого.
- Уровень уведомлений говорит «нет» → ничего.
- «Не беспокоить» → только то, что адресовано лично вам, и только от того, кто проходит гейт (см. §3).
- Иначе — приходит.
2. Таблица
Получатель доступен, если в строке не сказано иное.
| Что произошло | Отправитель | Состояние получателя | Придёт? | Как |
|---|---|---|---|---|
| Личное сообщение | любой | доступен | да | баннер со звуком |
| Личное сообщение | любой | DND, гейт «избранные» (умолчание) | нет | придержано |
| Личное сообщение | избранный | DND | да | важное, в подзаголовке «★ Избранный» |
| Личное сообщение | руководитель | DND | да | важное, в подзаголовке «★ Ваш руководитель» |
| Личное сообщение | руководитель | DND, гейт «никто» | нет | придержано — явное «никто» уважается |
| Упоминание в группе | любой | доступен | да | важное, «↗︎ Вас упомянули» |
| Упоминание в группе | руководитель / избранный | DND | да | прорыв |
| Упоминание в группе | остальные | DND | нет | придержано |
| Упоминание в группе | любой | уровень «никаких» | нет | «никаких» значит никаких |
| Ответ на ваше сообщение | любой | уровень «все» | да | баннер, «↩︎ Ответ вам» |
| Сообщение в треде, за которым вы следите | любой | уровень «упоминания» | да | баннер |
| Сообщение в треде, за которым вы следите | руководитель | DND | нет | следить — не значит быть адресатом |
| Обычное сообщение в комнате | любой | уровень «все» | да | баннер |
| Обычное сообщение в комнате | любой | уровень «упоминания» | нет | придержано |
| Обычное сообщение в комнате | руководитель | DND | нет | шумная комната — это ровно то, от чего DND |
| Что угодно | любой | беседа или тред приглушены | нет | кто бы ни отправил |
| Публикация в канале | любой | уровень «все» | да | баннер пониже приоритетом: лента не должна перекрикивать коллегу |
| Звонок | любой | iPhone | звонит | VoIP-пуш → системный экран вызова |
| Звонок | любой | Android | звонит | высокоприоритетный пуш → полноэкранный вызов |
| Звонок | любой | Mac | баннер со звуком | «Ответить / Отклонить»; на macOS это не звонок в системном смысле |
| Звонок | избранный / руководитель | DND | звонит | тот же гейт, что у сообщений |
| Звонок | остальные | DND | не звонит | остаётся след о пропущенном |
| Звонок | любой | участник по пропуску: он в звонке, но не в беседе | звонит | он входит в круг адресатов сигнала |
| Отмена звонка | звонивший | устройство, которое звонило | гасит звонок | второй пуш тем же путём |
| Отмена звонка | звонивший | устройство, которое не звонило | ничего | отмена «незвонившему» сама была бы звонком |
| Отмена звонка | звонивший | Mac | ничего | баннер остаётся, пока его не закроют |
| Прочие шаги звонка | любой | любое | ничего | вход, завершение, отказ, удержание — это не уведомления |
| Изменение присутствия | тот, на кого подписаны | доступен | да | тихо, без звука, сворачивается по человеку |
| Изменение присутствия | тот, на кого подписаны | DND | нет | придержано |
3. Гейт «Не беспокоить»
Получатель выбирает самый широкий круг, который всё ещё принимает в режиме «Не беспокоить»; каждый уровень включает все уровни ниже:
| Гейт | Кто проходит |
|---|---|
org | любой в организации |
favorites | избранные, приоритетные контакты, ваш руководитель |
priority | приоритетные контакты и руководитель |
manager | только руководитель |
none | никто |
Умолчание — favorites, и сегодня все на нём: персональной настройки ещё нет, как нет и
списка приоритетных контактов. Тот, кто ждёт от priority осмысленного поведения, получил бы
«только руководитель», поэтому умолчание останется на favorites до появления списка.
4. Откуда берётся руководитель
Из атрибута каталога, который приходит claim'ом при входе. Сопоставление идёт по DN: distinguished name руководителя из одной учётной записи совпадает с DN сотрудника в другой.
Почтовый адрес в этом поле не сопоставляется ни с кем и пишется в аудит
(directory.manager_unresolved). Это важно именно здесь: неверно настроенный руководитель не
ломает вход и ничего не показывает красным — он просто никогда не прорывается через «Не
беспокоить», и выглядит это как «прорыв не работает». Как настроить —
ADFS.
5. Что написано в уведомлении
| Элемент | Правило |
|---|---|
| Заголовок | название комнаты; для личной переписки — человек |
| Подзаголовок | почему вам это говорят, затем кто, затем по какому поводу |
| Текст | само сообщение, обрезанное до 240 символов |
| Структурные сообщения | 📍 геопозиция · 👤 контакт · 📎 вложение · 📌 закреплено — никогда не сырой JSON |
| Секретные чаты | 🔒 зашифрованное сообщение: видно, что пришло и от кого, но не что написано |
| Группировка | одна стопка на беседу, внутри — по темам |
| Прорыв | всегда называет отношение, которое его пропустило: необъяснённый баннер в DND читается как сломанная настройка |
Текст составляют обе стороны: сервер собирает полное уведомление и знает людей по логинам, устройство переписывает его перед показом — подставляет имена из своего кеша каталога и язык приложения. Серверная версия не запасная: именно она показывается, когда расширение на устройстве не отработало. Правило переписывания одно — никогда не сделать уведомление хуже: незнакомое поле, пустой кеш или payload от старой службы возвращают серверный текст нетронутым.
6. Чего пока нет
- персональной настройки гейта и списка приоритетных контактов (§3);
- действий прямо в уведомлении (ответить, отметить прочитанным) — payload к ним готов;
- содержимого секретных чатов на экране блокировки: расширение тоже не может их расшифровать, ключ лежит в связке самого приложения.