Доказательство согласия на уведомления: модель согласия по каналам
Настройте доказательство оформления согласия на уведомления по каналам, храните прозрачные доказательства и обрабатывайте изменения и аудиты без путаницы для пользователей и команды.

Что на самом деле означают согласие и доказательство оформления согласия
Согласие означает, что человек ясно согласился получать конкретный вид сообщения по конкретному каналу. Это различие важно, потому что email, SMS и push-уведомления воспринимаются по-разному пользователями, операторами, платформами приложений и законами о конфиденциальности. Кто‑то может быть рад уведомлению о доставке по электронной почте, но почувствовать себя застигнутым врасплох от маркетингового SMS.
Доказательство — это то, что вы можете показать позже, когда кто‑то спросит: «Почему вы мне писали?» Доказательство оформления согласия — это не скриншот формы и не расплывчатая пометка вроде «пользователь подписался». Это запись, которая позволяет отследить, кто согласился, на что согласился, когда это произошло и как это было зафиксировано.
Когда записи слабые, проблемы проявляются быстро. Служба поддержки не может объяснить неожиданные сообщения, растёт количество возвратов, и пользователи теряют доверие. Если жалоба эскалирует, вам может быть трудно показать, что согласие существовало в момент отправки — а это часто ключевой момент.
Согласие — это больше, чем всплывашка
Многие команды сосредотачиваются на UI‑запросе (чекбоксы, переключатели, системные диалоги) и забывают про аудит‑трейл за ним. Реальная цель — доверие и прослеживаемость. Чёткая модель согласия упрощает принятие правильных решений каждый раз, даже когда меняется команда, мигрируют системы или пользователь передумает.
Практичная запись согласия отвечает на несколько простых вопросов:
- Кто согласился (идентификатор пользователя и, если релевантно, адрес назначения, например email или номер телефона)
- Что он согласился (канал и тип сообщения или цель)
- Когда это произошло (метка времени в UTC или метка времени плюс часовой пояс)
- Как это произошло (где был показан запрос и что видел пользователь, включая версию и язык)
- Контекст, который помогает разрешать споры при необходимости (например, информация об устройстве/приложении или IP‑адрес)
Почему это укрепляет доверие
Пользователи судят о вас по моментам, которые кажутся навязчивыми: ночное push‑уведомление, неожиданный платный SMS или письмо, о котором они не помнят, что подписывались. Если вы можете найти точное событие согласия и объяснить его простым языком, можно спокойно и последовательно решать тикеты.
Если вы строите продукт на платформе вроде AppMaster, полезно считать согласие первоклассной сущностью с самого начала: структурированным, доступным для поиска и защищённым от случайной перезаписи.
Виды уведомлений и почему правила отличаются
Не все уведомления равны, потому что они служат разным целям и доходят до людей в разных местах. Если вы хотите надёжное доказательство оформления согласия на уведомления, начните с маркировки сообщений по целям и по каналу.
Транзакционные vs маркетинговые (в простых словах)
Транзакционные сообщения запускаются чем‑то, что сделал пользователь, или содержат информацию, необходимую для использования сервиса. Подумайте о сбросе пароля, чеке, оповещении о безопасности или изменении статуса аккаунта. Люди ожидают такие сообщения, и блокировка их может нарушить работу продукта.
Маркетинговые сообщения носят промо‑характер: рассылки, предложения, кампании по возврату пользователей или информационные рассылки о новинках. Они должны быть опциональными, и пользователь должен иметь возможность сказать «нет», не теряя доступа к базовым функциям.
Практическое правило: если сообщение нужно для выполнения того, что запросил пользователь, скорее всего, это транзакционное. Если цель — повысить вовлечённость или продажи — это маркетинг.
Каналы: email, SMS, push и in‑app
Каналы ведут себя по‑разному, поэтому согласие и доказательства обычно отслеживаются по каждому каналу отдельно, а не одним глобальным флажком.
Email часто используется и для транзакционных, и для маркетинговых сообщений. Многие продукты считают транзакционные письма частью базовой доставки сервиса, тогда как маркетинговые письма обычно требуют явного «да» и простого способа остановиться.
SMS воспринимается как более навязчивый канал, в некоторых настройках может требовать оплаты и сопровождается строгими правилами операторов и провайдеров. Обращайтесь с согласием на SMS как с отдельным решением.
Push‑уведомления контролируются системным запросом ОС и настройками пользователя. У вас может быть device token, но пользователь может в любой момент отключить push. Это меняет то, что вы можете отправлять.
In‑app сообщения появляются внутри продукта. Они чаще подчиняются UX‑правилам продукта, а не телеком‑правилам, но пользователи всё равно ожидают контроля, особенно для промо‑баннеров.
Поскольку требования зависят от страны и правил провайдеров, многие команды выбирают простой базовый подход: явное согласие для маркетинга по каждому каналу и внимательная документация для всего, что может быть оспорено.
«Мягкий opt‑in» (soft opt‑in) — распространённая серая зона. На практике это обычно означает, что вы пишете кому‑то из существующих клиентов без отдельного чекбокса на маркетинг (например, потому что у вас уже есть отношения). Даже в этом случае документация важна: какая была связь, что вы отправляли и как человек может отписаться.
Если вы строите это в AppMaster, держите модель простой: пользователь может подписаться на маркетинговые email и отказаться от SMS, при этом по‑прежнему получая необходимые транзакционные оповещения. Такое разделение упрощает и соответствие требованиям, и поддержание доверия.
Как моделировать согласия по каналам (данные, которые нужно хранить)
Если вы хотите надёжное доказательство оформления согласия на уведомления, ваша модель данных должна быть конкретной. «Пользователь согласился» недостаточно. Согласие зависит от канала (email, SMS, push) и от цели (маркетинг, обновления продукта, оповещения о безопасности).
Практичный подход — считать согласие отдельной сущностью, а не чекбоксом, спрятанным в профиле пользователя. У одного пользователя может быть много записей согласия, и каждая запись должна соответствовать одному каналу и одной цели.
Минимальные поля, которые уберегут вас от проблем
Начните с записи Consent, сформированной как: user + channel + purpose + status. Затем добавьте детали, которые делают запись понятной позже.
Минимально большинству продуктов нужно:
- user_id
- channel (email, sms, push — держите в фиксированном списке)
- purpose (marketing, product_updates, account_security — держите в фиксированном списке)
- status (opted_in, opted_out, pending, unknown)
- opted_in_at / opted_out_at
Чтобы избежать догадок позже, также фиксируйте, где это произошло и когда в последний раз подтверждалось:
- source (signup_form, settings_page, checkout, support_action)
- last_confirmed_at (полезно после изменения политики)
Снимки текста согласия (чтобы доказать, что именно видели)
Согласие — это не просто клик. Это согласие с конкретными словами. Сохраняйте consent_text_version (или короткий snapshot_id), указывающий на точный текст, показанный в момент согласия.
Держите снимок простым: сообщение, язык/локаль и период, когда оно было активно. Если копия меняется, создавайте новую версию вместо правки старой.
Компактный пример выглядит так:
{
"user_id": "u_123",
"channel": "sms",
"purpose": "marketing",
"status": "opted_in",
"opted_in_at": "2026-01-25T10:15:00Z",
"source": "checkout",
"consent_text_version": "sms_mkt_v3",
"last_confirmed_at": "2026-01-25T10:15:00Z"
}
Если вы строите на AppMaster, это легко отображается в Data Designer (Consent плюс ConsentTextSnapshot) и в логике Business Process Editor. Главная цель — согласованность: каждый канал и каждая цель следуют одной структуре, чтобы отчётность и аудит не превращались в паническую метушню.
Что считается доказательством и что фиксировать
«Доказательство» — это всё, что позволяет позже ответить на два вопроса: на что пользователь согласился и как он согласился. Для доказательства оформления согласия на уведомления нужны записи, которые специфичны, с метками времени и привязаны к реальному действию пользователя (а не просто «consent = true»).
Начните с самого действия. Если согласие даётся через чекбокс, переключатель или ссылку двойного подтверждения, запишите взаимодействие и точный текст, который видел пользователь (или идентификатор версии этого текста). Скриншоты редко масштабируются; метка версии текста согласия масштабируется лучше.
Зафиксируйте достаточно деталей, чтобы момент можно было воспроизвести:
- тип действия (установлен флажок, включён переключатель, клик по ссылке подтверждения)
- метка времени в UTC
- канал и цель
- версия текста согласия или идентификатор политики/версии
- название страницы или экрана и язык
Добавляйте технический контекст осмотрительно. Он помогает решать споры, но увеличивает риски приватности. Для веба IP и user‑agent могут быть полезны при необходимости. Для мобильных — рассмотрите device ID, который уже есть в вашей модели идентичности, но избегайте лишних идентификаторов «на всякий случай».
Если вы отправляете через провайдеров, храните их идентификаторы. Идентификаторы отправлений провайдера (email, SMS, push) помогают показать, что конкретная запись согласия использовалась для конкретной отправки при расследовании жалоб или проблем с доставкой.
Наконец, решите, что не хранить. Хорошее доказательство не означает сбор всего подряд. Избегайте хранения полного содержания сообщений, если достаточно шаблонов, и не собирайте посторонние данные об устройстве. В AppMaster рассматривайте поля доказательств как чувствительные: делайте их согласованными и ограничьте доступ, чтобы только нужные роли видели аудит‑детали.
Пошагово: настройте поток согласия и доказательств
Начните с решения — что вы будете спрашивать. Согласие — это не просто «уведомления да/нет». Часто люди хотят получать чеки, но не маркетинг. Выпишите цели уведомлений простыми словами, затем сопоставьте каждую цель с каналами, которые вы планируете использовать.
Проектируйте экраны запроса согласия по каналам, а не один смешанный промпт. Каждый экран должен объяснять, что будет отправлено, и как это изменить позже. Формулируйте конкретно: «Квитанции по email» понятнее, чем «транзакционные сообщения».
Практичный поток выглядит так:
- определите цели и какие из них требуют opt‑in (например, маркетинг vs квитанции)
- спрашивайте в подходящий момент (checkout для квитанций, после онбординга для советов)
- выбирайте безопасные дефолты (маркетинг выключен; включено только то, что нужно для сервиса)
- когда пользователь меняет переключатель, сразу записывайте событие (кто, что изменилось, когда и где)
- ставьте проверки согласия в путь отправки, чтобы ничего не обходило их, включая инструменты админов и автоматические задания
Это событие — то, что позже доказывает согласие. Относитесь к нему как к банковской квитанции: добавляемое, и его тяжело изменить задним числом. В AppMaster команды часто держат таблицу текущего состояния для быстрых проверок и пишут события согласия через Business Process, чтобы каждое обновление создавалo соответствующую запись аудита.
Перед релизом тестируйте отписку и краевые случаи. Вы должны получать одинаковый результат, независимо от того, меняет пользователь настройки в вебе, на мобильном или через удаление аккаунта. Особое внимание уделите:
- отписке на одном устройстве при одновременной сессии на другом
- смене номера телефона или email
- переустановке приложения (push‑токены меняются)
- гостевому оформлению заказа против авторизованных пользователей
- удалённым или деактивированным аккаунтам (не отправлять, но хранить доказательства по требованиям)
Обработка отписок, изменений и жизненного цикла аккаунта
Согласие — это только половина задачи. Люди могут передумать, сменить устройство, потерять доступ к почте или попросить поддержку изменить настройки. Если отписаться сложно, пользователи быстро это заметят, и ваше «доказательство» начнёт выглядеть сомнительно.
Сделайте отписку такой же простой, как и подписку. Разместите её там, где люди ожидают: в настройках уведомлений, в подвале маркетинговых писем и с ясной инструкцией STOP для SMS, где требуется. Не прячьте это за «обратитесь в поддержку» или дополнительными шагами.
Когда вы отправляете подтверждающее сообщение, держите его минимальным и используйте только при необходимости (или когда того требует закон). Одно «Вы отписаны» по email бывает полезным. Повторные запросы вроде «Вы уверены?» могут восприниматься как спам. Для SMS часто ожидается одно подтверждение после STOP. Для push достаточно тихого изменения статуса в приложении.
Жизненный цикл аккаунта — место, где многие системы согласия ломаются. Планируйте эти случаи заранее:
- Вышедшие пользователи: если кто‑то отписывается по email, находясь вне сессии, фиксируйте это по email‑адресу, а не только по сессии.
- Удалённые аккаунты: уважайте запросы на удаление, но сохраняйте минимальную запись «не контактировать», если это разрешено, чтобы случайно не вернуть пользователя в рассылку.
- Слитые аккаунты: не переносите автоматически согласия; решайте конфликты в пользу более приватного варианта.
- Смена устройства: новый телефон создаёт новый push‑токен; рассматривайте токен как технические данные, а согласие на push — как управляющее правило.
Опишите правила хранения и применяйте их последовательно. Храните логи согласий достаточно долго, чтобы ответить на жалобы, аудиты или возвраты средств, но не храните больше персональных данных, чем нужно. Если нужно удалить данные, решите, что можно анонимизировать (например, хешировать email), оставив историю событий полезной.
Изменения, инициированные поддержкой, должны проходить по понятному внутреннему процессу. Ограничьте, кто может редактировать согласия, требуйте код причины (например, «пользователь запросил через чат») и фиксируйте, кто и когда вносил изменение. В AppMaster команды обычно моделируют это двумя таблицами: одна для событий согласия, вторая для действий поддержки, а потом используют Business Process для применения изменений и записи аудита при каждом обновлении.
Распространённые ошибки, которые разрушают доверие (и ваш аудит‑трейл)
Многие команды добавляют переключатель согласия, а потом тихо ломают его короткими путями. Результат предсказуем: пользователи чувствуют себя обманутыми, и записи согласия не выдерживают проверки.
Одна распространённая ошибка — рассматривать согласие как единый глобальный флаг. Email, SMS и push имеют разные ожидания и часто разные правовые правила. Одна глобальная метка вроде marketing_ok=true слишком упрощает и делает возможной отправку по каналу, на который пользователь не давал согласие.
Другой фактор — непонятный дизайн выбора. Предустановленные флажки, мелкие дисклеймеры или элементы управления, которые объединяют несколько целей (например, «Обновления продукта и предложения»), ведут к путанице. В базе может быть запись «согласился», но в саппорте будут поступать другие жалобы.
Ошибки, которые чаще всего ломают и доверие, и доказательства:
- хранение только текущего состояния и удаление истории
- не сохранение точного текста согласия (и его версии)
- логирование «пользователь подписался» без канала, метки времени и источника
- разрешение ручных кампаний, которые обходят проверки согласия
- «исправление» неверной настройки правкой базы данных, что стирает факты
Типичный провал выглядит так: пользователь включил push при онбординге, позже выключил маркетинговые SMS в настройках, а затем жалуется на нежелательный SMS. Если система перезаписала старую запись, вы не сможете показать, что пользователь видел и когда он отписался. Ещё хуже — вы не сможете доказать, что когда‑то было согласие на SMS.
Относитесь к согласию как к финансовой истории: храните текущее состояние для быстрых проверок, но не теряйте прошлое. Простые защитные механизмы: разделять согласия по каналам и целям, сохранять идентификатор текста согласия и локаль, заставлять каждый путь отправки проходить через одну и ту же проверку согласия и создавать новые события вместо редактирования старых.
Если вы строите в AppMaster, моделируйте события согласия как отдельную таблицу и принуждайте проверку в общей Business Process, чтобы автоматические уведомления и действия операторов следовали одинаковым правилам.
Быстрая проверка перед релизом
Перед отправкой реальных уведомлений протестируйте аудиторский след согласий так же, как вы тестируете платежи. Если вы не можете объяснить, кто подписался, по какому каналу и под какой формулировкой, вы полагаетесь на догадки.
Для каждого канала (email, SMS, push) убедитесь, что вы можете показать момент подписки и где это произошло. «Где» должно означать конкретный экран или имя формы, плюс был ли это signup, settings, checkout или support.
Также убедитесь, что вы можете воспроизвести формулировку согласия. Хранить «marketing=true» недостаточно. Храните версию текста (или ID шаблона) и язык, показанный пользователю. Если копия меняется позже, вам всё равно нужна старая формулировка для тех, кто согласился на неё.
Короткий чек‑лист перед релизом, который ловит большинство проблем:
- Вы можете показать метку времени, источник (web, iOS, Android) и UI‑локацию для каждого opt‑in.
- Вы можете получить точную формулировку согласия и язык, показанный в момент подписки.
- Последний opt‑out перекрывает всё и отражается везде (включая задания в очереди).
- Саппорт может ответить на «почему мне это пришло?» за менее чем 2 минуты из одного пользовательского представления.
- Логи согласий нельзя редактировать, и доступ к ним ограничен авторизованными ролями.
Проведите практику: пусть коллега подпишется на вебе, отписаться на мобильном, а затем спросите у поддержки объяснение. Если ответ требует копания по сырым таблицам или нескольким инструментам, пользователи почувствуют это как трение.
Если вы строите на AppMaster, рассматривайте доказательства согласия как отдельную модель данных и процесс, а не как побочный эффект. Отдельная сущность consent log и простой внутренний вид для поддержки и аудиторов очень помогают, особенно если ограничить, кто может экспортировать эти данные.
Пример сценария: один пользователь, три канала, меняющиеся выборы
Мина создаёт аккаунт на вашем сайте, чтобы отслеживать заказы. При регистрации она видит отдельные опции для email, SMS и push. Она соглашается на push‑уведомления для обновлений заказов (после установки приложения), оставляет маркетинговые email выключенными и не отмечает SMS.
Через неделю она устанавливает мобильное приложение и входит в аккаунт. Приложение запрашивает системное разрешение ОС для push, и она принимает. Здесь многие команды путаются: системное разрешение ОС — не то же самое, что ваше бизнес‑согласие. Нужно фиксировать оба состояния отдельно, чтобы доказательство согласия оставалось прозрачным при аудите.
Ниже история Мины и что саппорт должен увидеть как чистую временную шкалу.
Таймлайн и снимки доказательств
- Регистрация на вебе (День 1)
Вы сохраняете её выборы (или отсутствие выбора) на вебе, плюс контекст запроса.
- Установка на мобильное и системное разрешение push (День 8)
Вы сохраняете device token и результат разрешения ОС, привязанные к аккаунту Мины, плюс точную версию подсказки, показанную в приложении.
- Смена номера телефона (День 20)
Она добавляет новый номер для координации доставки. Рассматривайте это как новое SMS‑назначение и требуйте свежего согласия для SMS. Не переносите согласие с старого номера.
- Отписка от SMS (День 35)
Она отвечает STOP или выключает SMS в настройках. Вы фиксируете событие отписки и сразу прекращаете отправки.
Как может выглядеть запись аудита
[
{
"ts": "2026-01-02T10:14:22Z",
"user_id": "u_123",
"channel": "email",
"purpose": "marketing",
"action": "no_opt_in",
"capture": {"surface": "web_signup", "form_version": "signup_v3"},
"evidence": {"ip": "203.0.113.10", "user_agent": "Chrome"}
},
{
"ts": "2026-01-09T08:03:11Z",
"user_id": "u_123",
"channel": "push",
"purpose": "order_updates",
"action": "opt_in",
"capture": {"surface": "ios_app", "prompt_version": "push_prompt_v2"},
"evidence": {"device_id": "d_77", "os_permission": "granted", "push_token": "..."}
},
{
"ts": "2026-01-21T16:40:05Z",
"user_id": "u_123",
"channel": "sms",
"purpose": "delivery_updates",
"action": "opt_in",
"capture": {"surface": "account_settings", "form_version": "sms_optin_v1"},
"evidence": {"phone": "+15551234567", "verification": "code_confirmed"}
},
{
"ts": "2026-02-05T09:12:44Z",
"user_id": "u_123",
"channel": "sms",
"purpose": "delivery_updates",
"action": "opt_out",
"capture": {"surface": "sms_reply", "keyword": "STOP"},
"evidence": {"phone": "+15551234567"}
}
]
Если вы строите на платформе вроде AppMaster, моделируйте события согласия в Data Designer и добавляйте их через Business Process всякий раз, когда пользователь переключает тумблер, подтверждает код или приложение получает результат разрешения. Главное, чтобы саппорт мог ответить с датами, площадками и точными выборками, а не догадываться.
Следующие шаги: встроить это в рабочие процессы продукта
Относитесь к согласиям как к фиче продукта, а не к галочке. Проще всего сохранять доказательство оформления согласия, если встроить его в те же рабочие потоки, которые вы используете для отправки сообщений, работы со службой поддержки и аудитов.
Начните с минимальной модели, которая разделяет текущие предпочтения и исторические доказательства. Простая схема, подходящая большинству продуктов:
- Users (идентичность и статус аккаунта)
- ConsentPreferences (текущее вкл/выкл по каналу и по цели при необходимости)
- ConsentEvents (каждое изменение с метками времени и контекстом)
- MessageSends (каждая попытка отправки, включая решение по согласию в момент отправки)
Решите, кто что видит. Доказательства согласия могут содержать IP, user‑agent, номер телефона или другие чувствительные данные, поэтому ограничьте доступ на основе ролей. Саппорт часто нужен вид временной шкалы согласий, но экспортировать её должен лишь узкий круг.
Постройте небольшой внутренний вид, который быстро отвечает на вопрос: «Почему мы связались с этим пользователем?» Поиск по пользователю, фильтры по каналу и удобный экспорт временной шкалы при необходимости.
Затем делайте проверки согласия автоматическими. Каждая отправка должна вызывать одну и ту же логику: проверять последние ConsentPreferences, подтверждать наличие действительного ConsentEvent для данного канала и цели и записывать решение в MessageSends, даже если отправка была заблокирована.
Если вы уже используете AppMaster, практичная схема — держать таблицы согласий в Data Designer и поместить gate проверки согласия в общий Business Process, который запускается перед любой email, SMS или push‑отправкой. Тогда правила останутся едиными для веб‑приложений, фоновых задач и нативных мобильных приложений.
Простое правило выдерживает проверку временем: если кто‑то может отправить уведомление, не пройдя проверку согласия, рано или поздно появится баг.
Вопросы и ответы
Согласие означает, что человек ясно дал свое согласие получать определённый тип сообщения по определённому каналу. Доказательство оформления согласия (proof-of-opt-in) — это запись, которую вы можете показать позже: кто согласился, на что согласился, когда это произошло и как это было зафиксировано.
Отслеживайте согласия отдельно для каждого канала и для каждой цели, потому что ожидания и правила различаются. Простая модель — по одной записи согласия на пользователя, на канал и на цель, с явным статусом и метками времени.
Базовая запись согласия должна включать идентификатор пользователя, адрес назначения при необходимости (email или телефон), канал, цель, текущий статус и время изменения статуса. Добавьте источник захвата и версию текста согласия, чтобы позже объяснить решение без догадок.
Храните версию текста согласия или идентификатор снимка (snapshot), привязанный к точной формулировке и языку, показанным пользователю в момент согласия. Когда текст меняется, создавайте новую версию вместо редактирования старой, чтобы старые согласия оставались понятными.
Разрешение ОС показывает только, что устройство разрешило уведомления; это не означает автоматически, что пользователь согласился с конкретными целями ваших сообщений. Фиксируйте разрешение ОС как техническое состояние и храните своё бизнес-согласие для таких целей, как маркетинг или уведомления о заказах.
Лучше всего по умолчанию отключать маркетинговые уведомления и запрашивать согласие в подходящий момент (например, после онбординга или в настройках), а не прятать это в процессе регистрации. Объясняйте просто и конкретно, чтобы пользователи понимали, что получат и как отписаться.
Сразу записывайте событие отписки и делайте проверку перед отправкой любого сообщения, включая те, что в очереди. Сделайте процесс простым, чтобы пользователи могли отписаться без обращения в поддержку, а поддержка видела ясную временную шкалу.
Новый email или номер телефона рассматривайте как новое назначение и требуйте нового согласия для таких каналов, как SMS. Не переносите согласие с прежнего значения, потому что доказательство должно соответствовать конкретному адресу или номеру, на который вы отправляете.
Держите таблицу текущих предпочтений для быстрых проверок, но также ведите добавляемый лог событий, который фиксирует каждое изменение с метками времени и контекстом. Избегайте редактирования или удаления прошлых событий — это ломает способность объяснить «почему мне это пришло?» в будущем.
Моделируйте согласие как структурированные данные и записывайте каждое изменение переключателя через единый бэкенд-поток, который всегда создаёт аудит-событие. В AppMaster команды обычно строят Consent, ConsentTextSnapshot и ConsentEvents в Data Designer и принуждают проверку согласия в общей Business Process перед любой отправкой email, SMS или push.


