CRM-аналитика
Push пришёл после окончания акции: как ограничить срок жизни сообщения
Время чтения: 5 мин
Уровень материала: Для экспертов
Содержание
Распродажа закончилась в 20:00, а клиент увидел push в 21:30, когда телефон вернулся в сеть. По нажатию открылась страница с обычной ценой. Маркетолог отправил сообщение вовремя, но не ограничил, сколько оно может ждать доставки.
TTL, или time to live, — срок жизни сообщения в очереди доставки. Для промо он должен быть связан с моментом, когда предложение перестаёт действовать. Отдельно существует срок актуальности содержания в приложении: уже доставленное уведомление тоже может быть открыто позднее.
Разделите четыре момента
В цепочке есть создание задания в CRM, передача провайдеру, доставка на устройство и действие человека. Между ними возможны задержки. Успешный ответ провайдера подтверждает приём, но не обязательно доставку и тем более прочтение.
FCM, сервис доставки push от Google, позволяет задавать срок хранения и попыток доставки для Android и Web. Без явного значения сообщения могут сохраняться до четырёх недель; нулевой TTL означает отказ от хранения, если немедленная доставка невозможна. Для iOS используется соответствующая настройка APNs, сервиса push Apple, включая apns-expiration.
Эти параметры управляют доставкой. Они не гарантируют автоматическое исчезновение уже показанного уведомления из центра уведомлений телефона.
Передавайте абсолютный срок предложения
В событии кампании полезно хранить expires_at — конкретный момент окончания предложения с однозначной временной зоной. Перед каждой попыткой отправки система вычисляет оставшийся срок и решает, есть ли ещё смысл передавать сообщение.
Если осталось слишком мало времени для полезного действия, можно отменить отправку раньше формального окончания. Такой запас является бизнес-правилом: например, предложение требует нескольких минут на оформление. Его нужно определить явно, а не прятать внутри интеграции.
| Участок | Какая проверка нужна | Что фиксировать |
|---|---|---|
| Очередь CRM | Предложение ещё актуально | Время и причина допуска |
| Передача провайдеру | TTL не длиннее допустимого остатка | Параметры запроса |
| Повторная попытка | Остаток пересчитан заново | Связь с исходным заданием |
| Обработка в приложении | Содержание не устарело | Доступный способ подавления или замены |
| Открытие ссылки | Условия ещё действуют | Понятный результат для клиента |
Условный пример: повтор не должен продлевать акцию
Акция заканчивается в 20:00 UTC. Первая передача происходит в 19:40; максимальный остаток — 20 минут, или 1200 секунд. При повторной попытке в 19:55 остаётся пять минут, то есть 300 секунд.
Если интеграция снова задаст 1200 секунд, срок ожидания выйдет за пределы акции. Поэтому повтор использует исходный expires_at и заново рассчитывает остаток. В 20:00 и позже новое промосообщение уже не передаётся.
Числа условные. Реальная настройка также учитывает возможности канала, допустимый запас на обработку и синхронизацию часов. Значение TTL=0 не означает «показывать только сейчас и затем удалить с экрана» — оно касается хранения до доставки.
Учитывайте тихие часы и повторные очереди
Если сообщение перенесено из-за тихих часов, срок предложения не должен сдвигаться вместе с ним. Сначала выбирается допустимое время, затем проверяется остаточная полезность. Иначе утреннее уведомление будет рекламировать вчерашнюю скидку.
Проверьте все очереди: CRM, интеграционный сервис и провайдера. Ограничение только последнего участка не отменяет задание, которое сутки ждало до обращения к нему. Полезно передавать один исходный срок по всей цепочке.
Механизм объединения ожидающих push, иногда называемый collapse, решает другую задачу — замещение части сообщений. Он не заменяет проверку актуальности предложения и может иметь разные правила на платформах.
Подготовьте правильный экран после открытия
Deep link ведёт сразу к нужному содержимому приложения. Если акция закончилась, ссылка должна открыть понятное состояние: предложение завершено, вот текущие условия или доступная альтернатива. Не показывайте молча другую цену так, будто обещанной скидки не было.
Для сообщений с ограниченным сроком приложение и сервер должны проверять актуальность независимо от текста push. Клиент может сохранить уведомление и открыть его завтра. Права на предложение и цена также проверяются на сервере: параметр ссылки не является разрешением купить по любым условиям.
Испытания перед запуском
Проверьте устройство онлайн, офлайн до окончания, офлайн после окончания, повторную передачу, позднее нажатие и старую версию приложения. Укажите тип сообщения: часть уведомлений отображает сама система, и приложение не всегда может перехватить показ одинаковым способом.
В тестовом отчёте различайте «не передано», «принято провайдером», «не доставлено из-за истечения» и «открыто после окончания». Не все платформы дают полное подтверждение каждого этапа; отсутствие события не следует выдавать за доказанную недоставку.
Рабочая схема защищает два обещания: не доставлять заведомо устаревшую рекламу и корректно обработать позднее действие человека. Одного короткого TTL для этого недостаточно, но без него очередь способна жить дольше самого предложения.
Источники
Google Firebase. Set the lifespan of a message. Firebase Cloud Messaging Documentation. Проверено 22.09.2026.