Skip to main content
Полный перечень полей — в глоссарии.

Обзор

Эта страница описывает, как мобильное приложение регистрирует своё устройство для получения пуш-уведомлений и как оно отписывается от них. Пуш-токен устройства — это адрес, по которому облачная служба доставки пушей находит конкретный телефон сотрудника, чтобы показать ему уведомление даже при закрытом приложении. Механика проста по замыслу: приложение при входе присылает свой пуш-токен, система сохраняет его и держит «активным». Когда доставка на этот адрес перестаёт срабатывать, токен помечается как неактивный и в рассылку больше не попадает. Ниже разобраны модель данных, правила уникальности и очистки, а также два обращения к API — регистрация и отписка.
Каждый токен привязан одновременно к сотруднику и к компании. Один сотрудник может иметь несколько активных токенов — по одному на каждое устройство, с которого он заходит (например, личный и рабочий телефон).

Модель данных

Push-токен устройства хранит всё необходимое для адресной доставки пуша на одно физическое устройство.

Правило уникальности

Запись считается уникальной по связке из пяти значений: компания + пользователь + токен + идентификатор устройства + тип устройства. Это значит, что одна и та же комбинация не может быть заведена дважды — повторная регистрация с теми же значениями обновит существующую запись, а не создаст дубликат.
Идентификатор устройства и тип устройства входят в ключ уникальности. Поэтому одно и то же устройство, зарегистрированное как iOS и как Web, либо с заполненным и с пустым идентификатором устройства, будет представлено разными записями. Это осознанное поведение, а не ошибка.

Регистрация токена

Регистрация выполняется одним обращением к списку токенов. То же обращение возвращает уже сохранённые токены текущего сотрудника в рамках его компании, отсортированные от новых к старым.

Кто и что видит

  • Обращение доступно только авторизованному сотруднику.
  • В списке показываются только токены этого сотрудника в текущей компании — чужие устройства и устройства из других компаний не видны.

Что происходит при регистрации

Когда приложение присылает пуш-токен, платформу и (при наличии) идентификатор устройства, система выполняет два шага.
1

Освобождение устройства от прежних владельцев

Система ищет активные токены с тем же пуш-токеном, а если передан идентификатор устройства — то и с тем же идентификатором, в пределах текущей компании. Все такие токены, принадлежащие другим сотрудникам, деактивируются.Это защита от ситуации, когда одним телефоном пользуются по очереди разные сотрудники: пуши не должны приходить прежнему владельцу устройства. Токены других компаний этот шаг не затрагивает — освобождение устройства работает внутри одной компании.
2

Создание или обновление собственной записи

Затем система создаёт или обновляет запись текущего сотрудника по связке «компания + сотрудник + токен + идентификатор устройства + тип устройства» и принудительно ставит признак «активен». Если запись уже существовала (например, сотрудник переустановил приложение и снова прислал тот же токен), она просто снова включается, а не задваивается.
Часть полей при регистрации задаётся системой и не принимается от клиента: признак активности, время последнего использования, служебные даты и внутренний идентификатор. Даже если приложение пришлёт «активен = нет», токен всё равно будет создан активным — статус на этом шаге всегда выставляется системой.
Компания для новой записи берётся из контекста текущего запроса (той компании, в которой работает сотрудник), а не из присланных данных. Поэтому зарегистрировать токен «в чужую компанию» через это обращение нельзя.

Отписка устройства

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

Как токены выходят из оборота

У токена есть два способа перестать участвовать в рассылке.

Деактивация при недоставке

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

Очистка старых неактивных токенов

Неактивные токены не удаляются сразу. Отдельная фоновая процедура периодически убирает неактивные записи, которые не менялись дольше 30 дней (отсчёт ведётся по времени последнего обновления записи). Это не даёт таблице разрастаться, но при этом оставляет запас времени: если устройство вернётся в строй вскоре после деактивации, его запись ещё существует.

Как это используется

  • Мобильный push (служба доставки Expo). При рассылке уведомления система берёт из этого хранилища активные токены получателей в рамках их компании и отправляет пуш на каждое устройство. Неактивные токены в выборку не попадают.
  • Синхронизация владельца устройства. Логика «освобождения устройства» при регистрации гарантирует, что на конкретном телефоне активен токен только текущего вошедшего сотрудника.
  • Гигиена данных. Связка «деактивация при недоставке + периодическая очистка старше 30 дней» поддерживает актуальность списка адресов без ручного вмешательства.

Особенности поведения

  • При регистрации признак активности не принимается от клиента и всегда принудительно выставляется во «включён», даже если прислать обратное значение.
  • Идентификатор устройства и тип устройства входят в ключ уникальности, поэтому одно и то же физическое устройство с разным типом (iOS/Web) или с пустым и заполненным идентификатором даёт отдельные записи, а не одну.
  • При регистрации все активные токены с тем же пуш-токеном (или тем же идентификатором устройства) у других сотрудников этой же компании деактивируются — это осознанная передача устройства новому владельцу; на другие компании шаг не распространяется.
  • Отписка устройства выключает только токены самого сотрудника, сделавшего запрос, — пуши другим сотрудникам компании она не гасит.
  • Деактивация при недоставке снимает активность у всех записей с данным пуш-токеном независимо от владельца и компании, так как отбор идёт только по значению токена.
  • Деактивация при недоставке срабатывает не на любую ошибку рассылки, а только когда служба доставки сообщает о недействительном адресе или о том, что устройство больше не зарегистрировано.
  • Неактивные токены не удаляются сразу: очистка убирает их только когда запись не менялась дольше 30 дней (по времени последнего обновления).
  • Компания у нового токена берётся из контекста запроса, а поле компании в модели допускает пустое значение.
  • Рассылка пушей выбирает только активные токены получателей в пределах компании и отправляет их через службу доставки Expo.
  • Отдельный механизм обновления статуса токена описан в коде, но в обращениях регистрации и отписки не используется — доступны только список/создание и отписка.

Связанные страницы

Глоссарий: Push-токены устройств

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

Уведомления (доставка и доступ)

Обзорная страница модуля уведомлений: доставка, каналы и доступы.

Модель и веер доставки

Модели уведомления и его получателей, сигнал сохранения и разветвление доставки по каналам с учётом доступов.

Создание и группировка

Фоновые задачи создания уведомлений: одиночные, обновление по объекту и группировка в 30-минутном окне.

Каналы доставки

Транспортные задачи и сервис доставки: веб-канал, мобильный push с деактивацией мёртвых токенов и Telegram.

Чтение, архивация и список

Адреса списка, счётчика непрочитанных, отметки прочтения и архивации, включая логику «первый забрал».

Привязка Telegram

Привязка и отвязка аккаунта сотрудника к Telegram-боту по одноразовому коду верификации.

Доступ и настройки

Матрица доступов «источник × тема» на пользователя и массовое редактирование настроек уведомлений.