Adset.ProAdset.ProKnowledge base
Home/Обучающие материалы/Как работает роутинг трафика в кампаниях

Как работает роутинг трафика в кампаниях

Что такое роутинг и зачем он нужен

Роутинг — это механизм, который решает, что показать каждому конкретному пользователю, кликнувшему по трекинговой ссылке.

Бизнес-задачи роутинга:

  • Гео-распределение: льёшь из FB на EU и LATAM — нужно европейский трафик слать на оффер 1win, а LATAM — на mostbet

  • A/B тестирование: два креатива или два PWA-дизайна — нужно 50/50 split и Sticky Flow чтобы один пользователь не видел оба варианта

  • Защита от модерации: модераторы FB/Instagram кликают по объявлениям — их нужно отправить на безобидный White Page

  • Оптимизация по устройствам: Android → PWA с установкой, iOS → отдельная воронка (или external PWA / iOS App)

  • Бот-фильтрация: отсечь ботов и прокси ещё до передачи click_id партнёрке

Пример: Запускаешь кампанию из FB. Создал два Stream Set: первый — для мобильного Android трафика из целевых GEO (PWA + оффер 1win), второй — для десктопа (лендинг + оффер parimatch). Всё остальное (боты, модераторы, нецелевые страны) уходит на White Page.


Архитектура кампании

Кампания в Adset.Pro состоит из нескольких уровней:

Кампания (Campaign)
    ├─ Трекинговая ссылка: https://domain.com/track/{campaignId}
    ├─ Sticky Flow (on/off)
    ├─ White Page (none / url / system)
    │
    └─ Stream Set #1 (набор фильтров + потоки)
    │   ├─ Фильтры (applyMode: AND / OR)
    │   │   ├─ user_device = mobile
    │   │   ├─ user_os = Android
    │   │   └─ user_country IN [UA, KZ, UZ]
    │   ├─ Пиксели (FB CAPI, TikTok)
    │   └─ Потоки (Flows):
    │       ├─ Flow 1 (вес 70) → PWA-1 → CPA-1 → Оффер-А
    │       └─ Flow 2 (вес 30) → PWA-2 → CPA-2 → Оффер-Б
    │
    └─ Stream Set #2 (другие фильтры)
        ├─ Фильтры: user_device = desktop
        └─ Потоки:
            └─ Flow 1 (вес 100) → Landing → CPA-3 → Оффер-В

Трекинговая ссылка кампании — единый URL для источника трафика. Трекер сам решает, в какой flow направить каждый клик.


Stream Sets: наборы правил

Stream Set — набор фильтров + список потоков. Кампания может содержать несколько Stream Sets.

Когда приходит клик, трекер проверяет Stream Sets сверху вниз (по приоритету) и применяет первый подходящий. Если ни один Stream Set не подошёл — клик уходит на White Page.

Режимы работы фильтров

Режим

Логика

Когда использовать

AND

Все условия должны совпасть

Точный таргетинг (страна И устройство И источник)

OR

Достаточно одного условия

Широкий охват (любая из перечисленных стран)

Типы фильтров

Тип

Что фильтрует

Примеры ключей

EVENT

Параметры события трекера

user_country, user_device, user_os, user_browser, user_lang, user_bot

HEADERS

HTTP-заголовки запроса

accept-language, user-agent (сырые значения)

QUERY

GET-параметры URL

utm_source, utm_campaign, fbclid, sub1..10, ext_click_id

DATE

Время и дата клика

Дни недели, часы (временное расписание)

DATA

Данные из внешних источников

IP, регион, ASN-организация, прокси-тип

Операторы фильтров

Оператор

Логика

Пример

IN

Значение входит в список

user_country IN [UA, KZ, UZ]

NOT_IN

Значение НЕ входит в список

user_country NOT_IN [US, GB]

BETWEEN

В диапазоне (для чисел/времени)

hour BETWEEN [9, 21]

EXIST

Поле существует и не пустое

fbclid EXIST (есть метка от FB)

NOT_EXIST

Поле отсутствует

fbclid NOT_EXIST

Практические примеры фильтров

Только мобильный Android трафик:

applyMode: AND
├─ user_device IN [mobile]
└─ user_os IN [Android]

Исключить ботов:

applyMode: AND
└─ user_bot IN [0]

Значение user_bot = "0" для людей, "1" для ботов. Важно: именно строка "0", не false.

Только FB трафик (есть fbclid):

applyMode: AND
└─ fbclid EXIST

Трафик из конкретных стран (OR):

applyMode: OR
├─ user_country IN [UA]
├─ user_country IN [KZ]
└─ user_country IN [UZ]

White Page: редирект для нецелевых кликов

White Page — специальный URL или встроенный сайт, на который перенаправляются клики, не прошедшие ни один из Stream Sets.

Зачем это нужно

  • Модераторы рекламных сетей (FB, TikTok) кликают по объявлениям при проверке → их нужно отправить на безобидный сайт

  • Боты и автоматические сканеры → White Page

  • Трафик из запрещённых регионов → White Page

  • Нецелевой трафик (десктоп когда нужна только мобилка) → White Page

Типы White Page в Adset.Pro

Тип

Как работает

Когда использовать

NONE

Клик без роутинга получает 404

Когда нет необходимости в фильтрации

URL

Редирект 302 на внешний URL

Простой вариант: ссылка на нейтральный сайт

SYSTEM

HTML отдаётся inline с того же домена (через S3 + nginx)

Для модерации: URL не меняется, страница выглядит как обычный сайт

Опция disableTrackWhiteList: Если включена — события SOURCE_FILTER для кликов, ушедших на White Page, не записываются в ClickHouse. Полезно когда нужно исключить мусорный трафик из статистики.

Bridge Page: Для трафика из in-app WebView (FB/Instagram/TikTok/Telegram) трекер автоматически определяет WebView и отдаёт Bridge Page вместо PWA. Bridge Page кикает пользователя во внешний браузер:

  • Android → intent:// scheme → Chrome

  • iOS → x-safari-https:// → Safari

Это нужно потому, что in-app WebView видит DOM/redirect-цепочку PWA, что может триггернуть блокировку.


Потоки (Flows) и веса

Внутри Stream Set каждому потоку (Flow) назначается вес — число, определяющее долю трафика. По умолчанию вес = 100.

Пример:

Flow А — "1win оффер"   — вес 70  → получает 70% кликов
Flow Б — "parimatch"    — вес 30  → получает 30% кликов

Веса могут быть любыми числами — трекер автоматически нормализует их в проценты. Выбор Flow происходит случайно с учётом весов (pickWeighted).

Структура Flow

Каждый Flow содержит:

Параметр

Описание

cpa

Привязанная CPA-сеть (обязательно)

offer

Оффер внутри CPA-сети (обязательно)

flow

Поток (Flow) в CPA-сети — URL оффера

pwa

Привязанное PWA (опционально)

pwaType

Тип PWA: internal (конструктор Adset.Pro) / external (внешний сервис) / ios_app

landing

Привязанный лендинг (опционально)

landingAsPwa

Использовать лендинг в режиме PWA (без отдельной PWA-страницы)

postlanding

Страница после PWA-подписки, перед редиректом на оффер

weight

Вес потока (default 100)

isActive

Активен ли поток (default true)

Sticky Flow (прилипающий поток)

Sticky Flow решает важную проблему A/B тестирования: один пользователь не должен видеть два разных варианта.

Как работает:

  • При первом визите трекер выбирает Flow (по фильтрам и весам)

  • Выбор сохраняется в cookie sf_{campaignId} (формат: setId:flowId[:clickId])

  • При повторном визите трекер читает cookie и отдаёт тот же Flow

  • Cookie имеет практически бесконечный срок жизни

Настройки Sticky Flow:

Параметр

Что делает

stickyFlow

Включает/выключает Sticky Flow

stickyFlowKeepClickId

Сохраняет исходный clickId в cookie — повторный визит получает тот же clickId для атрибуции

stickyFlowSkipInactive

Если true — использует сохранённый Flow даже если он деактивирован (isActive = false). Если false — сбросит cookie и пересчитает Flow

Когда включать:

  • A/B тест двух PWA-дизайнов — один пользователь не должен видеть оба

  • Тест двух офферов — чтобы корректно сравнивать LTV

  • Когда важна консистентность опыта пользователя


A/B тестирование

Пошаговый сценарий A/B теста двух PWA:

  1. Создай кампанию с одним Stream Set

  2. Добавь два Flow с весами 50/50 (вес 100 и 100):

    • Flow А → PWA-1 (дизайн «бонус») → CPA-1 → Оффер-1

    • Flow В → PWA-2 (дизайн «игры») → CPA-2 → Оффер-2

  3. Включи Sticky Flow — чтобы пользователь видел только один вариант

  4. Запусти трафик из одного источника

  5. Жди минимум 100+ установок на каждый Flow (чем больше — тем точнее результат)

  6. Сравни метрики в статистике с group by cmp_flow:

    • click_to_instal_rate — какой PWA лучше конвертирует

    • cpa_accept — где больше депозитов

    • ltv_per_ftd — где пользователи приносят больше в долгосроке

Сколько тестировать:

  • Минимум 3-5 дней (чтобы захватить разные дни недели)

  • Минимум 100 установок на каждый вариант для базовой статистики

  • Для LTV-сравнения — минимум 2-4 недели (иначе D1-7 будет неполным)


Пиксели в Stream Sets

К каждому Stream Set можно привязать пиксели (Facebook CAPI, TikTok Events API, HTTP Get):

  • Пиксель срабатывает на определённые события (установка PWA, регистрация, депозит)

  • Поддерживаемые события: LAND_VIEW, LAND_CLICK, PWA_VIEW, PWA_INSTALL, NOTIFICATION_SUBSCRIBE, CPA_HOLD, CPA_ACCEPT, CPA_REDEP, CPA_DECLINE, CPA_TRASH

  • Настраивается маппинг: событие трекера → событие пикселя

Почему привязка на уровне Stream Set:

  • Разные источники трафика требуют разных пикселей (FB CAPI для FB-трафика, TikTok Events API для TikTok)

  • Один Stream Set = один источник = один пиксель — чисто и не конфликтует

Pixel Override через URL: Если в трекинговую ссылку добавить ?pixel=fb_pixel_id,tiktok_pixel_id, эти пиксели переопределят пиксели из настроек Stream Set. Полезно для динамической привязки пикселей без изменения кампании.


Как трекер обрабатывает клик: шаг за шагом

  1. Приходит клик по трекинговой ссылке кампании

  2. Трекер генерирует event_click_id (UUID), определяет параметры: страна, устройство, user-agent, IP, ASN, прокси

  3. In-app WebView check: Если клик из WebView (FB/Instagram/TikTok/Telegram) — отдаёт Bridge Page для кика во внешний браузер

  4. Проверяет Sticky Flow cookie (sf_{campaignId}):

    • Cookie есть → восстанавливает сохранённый Flow (и clickId если stickyFlowKeepClickId)

    • Cookie нет → переходит к фильтрам

  5. Применяет bot-фильтрацию

  6. Последовательно проверяет Stream Sets сверху вниз (applySetFilters)

  7. Находит первый подходящий Stream Set (все фильтры совпали по режиму AND/OR)

  8. Внутри Stream Set выбирает Flow по весам (pickWeighted)

  9. Сохраняет Sticky Flow cookie (если включён)

  10. Фиксирует событие SOURCE_CLICK с полными параметрами кампании

  11. Редиректит пользователя: Лендинг → PWA → URL оффера (с paramTemplate)

Если ни один Stream Set не подошёл:

  • Фиксируется SOURCE_FILTER (если disableTrackWhiteList = false)

  • Пользователь перенаправляется на White Page


Рекомендованные фильтры

Для Facebook-трафика

Stream Set #1 (основной):
applyMode: AND
├─ user_bot IN [0]           ← исключить ботов
├─ user_device IN [mobile]   ← только мобильный
├─ user_os IN [Android]      ← Android (iOS обычно отдельной кампанией)
└─ fbclid EXIST              ← только трафик с FB (есть fbclid)

Для TikTok-трафика

Stream Set #1:
applyMode: AND
├─ user_bot IN [0]
├─ user_device IN [mobile]
└─ ext_click_id EXIST        ← есть внешний click_id от TikTok

Универсальный (anti-fraud)

Любой Stream Set:
├─ user_bot IN [0]           ← люди
├─ user_proxy IN [0]         ← без прокси (опционально)
└─ user_device IN [mobile]   ← мобилка

Частые вопросы

Q: Почему один клик попал в "не тот" поток?

Если Sticky Flow выключен — это нормально. Распределение по весам — случайное. При весах 50/50 конкретный клик с равной вероятностью попадёт в любой Flow. Чтобы пользователь всегда попадал в один Flow — включи Sticky Flow. Проверить распределение можно через статистику с group by cmp_flow.

Q: Можно ли изменить веса потоков без остановки кампании?

Да. Изменения в Stream Sets применяются мгновенно — новые клики будут использовать обновлённые веса. Уже записанные события не меняются. Изменения делаются в настройках кампании → Stream Set → редактирование весов Flow.

Q: Почему трафик идёт на White Page, хотя я создал Stream Set для этого трафика?

Типичные причины:

  1. Порядок Stream Sets — другой Stream Set выше по списку перехватывает трафик (проверь приоритет)

  2. Режим AND не совпадает — одно из условий AND не выполнено. Пример: фильтр требует user_device = mobile, а пришёл десктоп

  3. Неправильные значения — фильтр user_country IN [UK] не сработает для GB (ISO-код Великобритании = GB, не UK)

  4. Фильтр EXIST не сработал — например fbclid EXIST, а трафик не из FB

Q: Как сделать так чтобы бот не попал на оффер?

Добавь фильтр user_bot IN [0] (значение обязательно строка "0") во все Stream Sets. Adset.Pro определяет ботов через MaxMind + User-Agent анализ. Бот-клики будут уходить на White Page.

Q: Что такое landingAsPwa и когда использовать?

Если landingAsPwa = true, лендинг используется как PWA-страница — без отдельной PWA-конструкции. Пользователь видит лендинг, ему предлагается «Add to Home Screen», и после установки click_id передаётся на оффер. Удобно для быстрого запуска без создания отдельного PWA.