Перейти к содержимому

Источник через авторизацию и оплату

При посещении рекламной ссылки сохраняются время контакта, канал, код ссылки и наблюдаемые UTM. Для веб-посетителя создаётся случайная защищённая cookie со сроком 30 дней. Публичный запрос не принимает произвольный ID пользователя и не выдаёт доступ к продукту.

После успешного входа посещение связывается с подтверждённым аккаунтом. Используются существующие проверки email-кода, пароля, magic link, OAuth и Telegram. Для email-кода и magic link контекст привязан к серверной операции подтверждения: ссылку можно открыть в другом браузере. Регистрация по приглашению сохраняет свои ограничения. Посещение, уже принадлежащее другому аккаунту, не переносится при смене пользователя.

Покупка получает снимок источника при создании заказа. По умолчанию выбирается последний контакт с известной кампанией за 30 дней; окно настраивается от 1 до 365 дней. Изменение окна действует на новые заказы. Контакт после оформления заказа, повторный webhook, исправление CSV или ручное сопоставление UTM не меняют созданный снимок.

Объединение аккаунтов переносит контакты и покупки, сохраняя исходные ID в истории. Первый источник выбирается по более ранней записи. Две прежние первые покупки не становятся двумя первыми покупками объединённого аккаунта.

Неизвестный код сохраняет обычный пользовательский сценарий без придуманного источника. UTM без кода попадают в Несопоставленные контакты. Администратор может создать правило для точного набора UTM; основание отмечается как ручное сопоставление.

Связанные темы: способы входа, работа без Telegram, источники и отчёты.

Модуль bot.services.advertising.audience предоставляет версионированный контракт AUDIENCE_CONTRACT_VERSION = 1 для расширений, которым нужен рекламный источник. audience_query(filters, now=..., namespace=...) возвращает параметризованный SQL выборки ID пользователей; расширение не должно воспроизводить схему рекламных таблиц. customer_contexts(session, user_ids) возвращает источники пакетом, а audience_options(session) — справочники кампаний и ссылок, включая исторические.

ad_model выбирает first_touch, last_touch или last_purchase. Первый и последний контакт относятся к сохранённой рекламной/UTM записи, а не к любой активности пользователя. Старый первый источник сохраняется как legacy_first_start. Последняя покупка означает успешный продуктовый заказ: ожидающая оплата и пополнение баланса её не заменяют. Возврат сохраняет историю источника.

Фильтры ad_campaign_id, ad_link_id, utm_source, utm_medium, utm_campaign, utm_content, utm_term применяются после выбора одной записи. Они не объединяют UTM одного перехода с кампанией другого. Значения UTM сравниваются точно, с учётом регистра, и передаются параметрами. namespace разделяет параметры при объединении нескольких запросов. Анонимные несопоставленные посещения в аудиторию не входят.

Атрибуция рекламы и последующей коммуникации независима: один заказ может попасть в оба отчёта. Их выручку нельзя складывать как выручку разных заказов.