# ADR-045: Пуш адресован получателю Уточняет [ADR-023](023-push-and-service-worker.md). ## Контекст ADR-023 задаёт правило отправки: пуш уходит при постановке сообщения в очередь устройства, если устройство не подключено по SSE и неотработанного пуша у него нет. Но конверт кладётся в очередь и другим устройствам отправителя (ADR-017) — по букве правила молчащий второй телефон автора получал бы пуш о собственном сообщении. Полезная нагрузка от этого рассыпается. Заголовок — `@nick` отправителя, адрес чата — `dm:`: и то и другое собрано с точки зрения получателя. У отправителя тот же чат называется именем собеседника, а уведомление «@marta: новое сообщение» на телефоне самой marta не значит ничего. Тексты уведомления при этом живут в ADR-023, а не в `docs/ui.md`, где место всему, что видит человек. ## Решение - Пуш уходит только устройствам получателей. Устройства отправителя — и то, с которого он писал, и все остальные — пуша не получают; сообщение они забирают очередью, как и раньше. - Заголовок и адрес чата собираются для получателя: `@nick` отправителя и `dm:` в личном чате, `#имя комнаты` и `room:` в комнате. В комнате адресация одна для всех получателей, в личном чате получатель один — значит, у сообщения одна нагрузка на всех. - Тексты уведомления записаны в `docs/ui.md`, «Уведомления». ## Следствия - Правило ADR-023 читается как «пуш уходит устройствам получателей, если …». Одно молчащее устройство получателя — один пуш. - Сервер собирает пуш из того, что и так знает: ник отправителя, имя комнаты, идентификатор чата. Плейнтекста он не знает, шифротекст не пересылает — в пуше нет ни того ни другого. - Автор, отошедший от одного своего устройства к другому, узнаёт о собственном сообщении не пушем, а очередью при открытии. Осознанно.