Перейти к контенту
БОЛЬШИЕ·ПРОДАЖИ Пульт →
Все документы

Поток данных · где собираем что на каждом шаге

Визуальная карта: от клика по рекламе до сделки в amoCRM. На каждом туч-поинте — что фиксируется, где хранится, куда передаётся. Если непонятно «откуда у нас в Sheet оказался fbclid», ответ здесь.

Один взгляд на всё

 ┌─────────────────────────────────────────────────────────────────────┐
 │                       Meta Ads · KZ + KG                            │
 │       URL parameters: utm_source / utm_medium / utm_campaign /      │
 │                       utm_content / utm_term  (+ fbclid auto)       │
 └─────────────────────────────────────┬───────────────────────────────┘
                                       │ клик

            ┌──────────────────────────────────────────────┐
            │       Лендинг (8 вариантов × 2 региона)      │
            │   /  /vsl  /exclusive  /guide   /kg/*        │
            │                                              │
            │  ─── На загрузке страницы (1 раз) ───        │
            │  ◆ sessionStorage: utms × 5                  │
            │  ◆ sessionStorage: clickids (fb, g, y)       │
            │  ◆ sessionStorage: variant_id + experiment   │
            │  ◆ sessionStorage: session_id + landing_*    │
            │  ◆ localStorage: touch flag (first/return)   │
            │  ◆ GTM dataLayer: page_view + ab_variant     │
            │  ◆ Pixel: PageView (через GTM)               │
            │  ◆ Pixel: ViewContent (через GTM)            │
            └────────────────────┬─────────────────────────┘
                                 │ скролл, клики

       ┌─────────────────────────────────────────────────┐
       │            Поведенческие события                │
       │  ◆ GTM: section_view (когда блок в viewport)    │
       │  ◆ GTM: scroll_depth (опционально)              │
       │  ◆ GTM: video_play / video_progress (на VSL)    │
       │  ◆ GTM: whatsapp_click                          │
       └─────────────────────┬───────────────────────────┘
                             │ клик «Получить доступ»

       ┌─────────────────────────────────────────────────┐
       │         Открытие формы (click-pop modal)        │
       │  ◆ GTM: cta_click (cta_location, cta_label)     │
       │  ◆ GTM: form_view (форма попала во viewport)    │
       └─────────────────────┬───────────────────────────┘
                             │ начало заполнения

       ┌─────────────────────────────────────────────────┐
       │          Заполнение формы                       │
       │  ◆ GTM: form_start (первый focus на поле)       │
       │  ◆ GTM: form_step (для multi-step / application)│
       │  ◆ Валидация на стороне клиента (NAME_RE,       │
       │    EMAIL_RE, phone validator для +7/+996)       │
       │  ◆ Honeypot: hidden input `company_website`     │
       │  ◆ Cooldown check: 30 сек после прошлого submit │
       └─────────────────────┬───────────────────────────┘
                             │ submit

   ┌─────────────────────────────────────────────────────────┐
   │              ConversionForm.handleSubmit()              │
   │                                                         │
   │  1. scoreLead() для application — считает lead_score    │
   │  2. qualified = (lead_score >= threshold)               │
   │  3. storeOutcome() в sessionStorage (для /thank-you)    │
   │  4. buildLeadPayload() — собирает JSON со всем          │
   │  5. GTM: form_submit                                    │
   │  6. submitLead() → POST на Make webhook                 │
   │  7. storeLastSubmission() — для one-click апсейла       │
   │  8. GTM: form_success                                   │
   │  9. redirect → /thank-you?v=...&sid=...&m=...           │
   └────────────────────────┬────────────────────────────────┘
                            │ POST  https://hook.us1.make.com/...

   ┌─────────────────────────────────────────────────────────┐
   │            Make.com webhook (один URL)                   │
   │  Router branches by event_type:                          │
   │   ◆ default → Lead flow                                  │
   │   ◆ event_type == "upsell_click" → Upsell flow           │
   └────────────────────────┬────────────────────────────────┘
                            │ fan-out (параллельно)
        ┌───────────┬───────┴────────┬────────────┬───────────┐
        ▼           ▼                ▼            ▼           ▼
  ┌──────────┐ ┌─────────┐ ┌──────────────┐ ┌──────────┐ ┌────────────┐
  │ Google   │ │ Slack   │ │ FlowLeads    │ │ amoCRM   │ │ Meta CAPI  │
  │ Sheet    │ │ alert   │ │ relay        │ │ webhook  │ │ POST event │
  │ (Leads + │ │ (формат │ │ (HTTP)       │ │ (NEW)    │ │ (NEW)      │
  │ Upsells  │ │ зависит │ │              │ │          │ │ dedup by   │
  │ tabs)    │ │ от tier)│ │              │ │          │ │ event_id   │
  └──────────┘ └─────────┘ └──────────────┘ └──────────┘ └────────────┘


        Менеджер открывает Sheet или amoCRM →
        видит контекст лида → звонит
                            │ redirect

   ┌─────────────────────────────────────────────────────────┐
   │                   /thank-you                            │
   │  Reads sessionStorage:                                   │
   │   ◆ kbp_session, kbp_outcome, kbp_last_submission       │
   │   ◆ kbp_utms, kbp_clickids, kbp_experiment              │
   │                                                          │
   │  ◆ GTM: generate_lead (ключевая конверсия)              │
   │  ◆ Pixel: Lead event (через GTM)                        │
   │  ◆ Branching: показывает 1 из 5 блоков по mechanism +   │
   │    qualified flag                                        │
   │                                                          │
   │  Если quick-lead или registration:                       │
   │   → виден one-click upsell CTA                           │
   └────────────────────────┬────────────────────────────────┘
                            │ клик «Да, добавить VIP»

   ┌─────────────────────────────────────────────────────────┐
   │           src/scripts/upsell.ts                          │
   │  1. Читает kbp_last_submission (id + tier + name)       │
   │  2. Собирает payload с event_type:"upsell_click",       │
   │     original_submission_id, tier_from, tier_to,         │
   │     delta_amount, delta_currency                         │
   │  3. POST на тот же Make webhook                          │
   │  4. GTM: lead_upsell                                     │
   │  5. UI swap: кнопка → «✓ Принято, перезвоним»          │
   └─────────────────────────────────────────────────────────┘

Что фиксируется на каждом шаге (детально)

Шаг 1 · Клик по рекламе

ЧтоКто фиксируетГде
utm_source, utm_medium, utm_campaign, utm_content, utm_termURL-параметры (Meta подставляет авто)URL
fbclidMeta добавляет в URL автоматическиURL
gclidGoogle Ads (если будем)URL
yclidЯндекс Директ (если будем)URL

Где они оседают: в sessionStorage сайта при первой загрузке через src/conversion/attribution.tsinitAttribution().

Шаг 2 · Открытие лендинга (page_view)

ЧтоГде
variant_id (home / vsl / exclusive / guide / kg-*)вшит в страницу при сборке
experiment_id (karada-bp-2026q2)константа в src/config/experiment.ts
funnel_mechanism (quick-lead / registration / application / lead-magnet)свойство страницы
tier (standard / vip / exclusive / lead_magnet)вычисляется из variant_id
country (KZ / KG)вычисляется из variant_id (kg-* → KG)
session_id (UUID)генерится один раз за сессию
landing_path (/, /vsl…)window.location.pathname
referrerdocument.referrer
landing_timestamp (ISO)момент захода
touch (first-touch / second-touch)по флагу в localStorage

→ всё это идёт в sessionStorage одной транзакцией и в dataLayer для GTM.

Шаг 3 · Поведение на странице

СобытиеКогда
section_viewКогда секция (Hero, TrustBar, …) попадает в viewport
cta_clickЛюбой клик на CTA с data-cta или data-modal-open
whatsapp_clickКлик на WA-ссылку
video_play / video_progressНа /vsl если есть видео

Шаг 4 · Открытие формы

СобытиеКогда
cta_click (cta_location: “hero”)Клик на «Получить доступ» в hero
Modal <dialog>.showModal()Программно открывается
form_viewФорма попадает в viewport (внутри modal)

Шаг 5 · Заполнение формы

СобытиеКогда
form_startПервый focus на поле
form_step (только для multi-step)Переход на следующий шаг (для application)
Field validation (live)На blur + на submit
Honeypot triggerЕсли company_website field заполнен (бот)

Шаг 6 · Submit

Что попадает в payload (полный JSON для Make):

{
  "submission_id": "uuid-of-this-lead",
  "session_id": "uuid-of-session",
  "submitted_at": "2026-05-20T21:30:00.000Z",
  "form_key": "karada_bp_lead",
  "form_id": "modal",                    // или "hero" / "final" / "guide-modal"
  "funnel_mechanism": "quick-lead",      // или registration/application/lead-magnet
  "funnel_step_reached": 1,              // на каком шаге закончил
  "tier": "standard",                    // standard/vip/exclusive/lead_magnet
  "country": "KZ",                       // или KG
  
  "lead": {
    "name": "Иван Петров",
    "phone": "+7 700 123 4567",
    "email": "ivan@example.com",
    "tier_interest": "vip",              // если был выбор (registration)
    "qualified": true,                   // только для application
    "lead_score": 8                      // только для application
  },
  
  "answers": {                           // mechanism-специфичные ответы
    "niche": "Недвижимость",
    "team_size": "10+",
    "goal": "Удвоить продажи",
    "urgency": "В течение недели"
  },
  
  "attribution": {
    "experiment_id": "karada-bp-2026q2",
    "variant_id": "home",
    "tier": "standard",
    "country": "KZ",
    "utm_source": "facebook",
    "utm_medium": "paid_social",
    "utm_campaign": "120203456789",
    "utm_content": "120203456790",
    "utm_term": "120203456791",
    "gclid": "",
    "fbclid": "IwAR_actual_fbclid",
    "yclid": "",
    "landing_path": "/",
    "page_path": "/",
    "referrer": "https://www.instagram.com/",
    "landing_timestamp": "2026-05-20T21:25:00.000Z",
    "touch": "first-touch"
  },
  
  "meta": {
    "site": "karada-bp",
    "user_agent": "Mozilla/5.0 ...",
    "screen": "1920x1080",
    "honeypot_triggered": false
  }
}

→ Один POST → один Make webhook → fan-out на 3-5 систем параллельно.

Шаг 7 · /thank-you

ЧтоОткуда
generate_lead событие в GTMИз kbp_session + kbp_outcome
Pixel Lead eventЧерез GTM-тег на generate_lead
Pixel CompleteRegistrationЕсли mechanism = registration
Pixel SubmitApplicationЕсли mechanism = application
event_id для дедупа CAPI= submission_id
Branching блок на страницеПо funnel_mechanism + qualified
One-click upsell кнопкаЕсли mechanism = quick-lead или registration

Шаг 8 · Upsell click (опционально)

ЧтоОткуда
Чтение kbp_last_submissionsessionStorage
Новый submission_id для апсейл-событияcrypto.randomUUID()
original_submission_idиз kbp_last_submission.submission_id
Payload с event_type: "upsell_click"Собирается в upsell.ts
POST на тот же Make webhookMake ветвит по event_type → Upsells tab
lead_upsell event в GTMС tier_from, tier_to, delta_amount
Pixel InitiateCheckoutЧерез GTM
UI swap → confirmation pillКнопка disabled-ится, текст меняется

Где живёт каждый кусок данных (storage map)

StorageКлючСодержитСрок жизни
sessionStoragekbp_utms5 UTM-полейЗакрытие вкладки
sessionStoragekbp_clickidsgclid, fbclid, yclidЗакрытие вкладки
sessionStoragekbp_experimentexperiment_id, variant_id, funnel_mechanismЗакрытие вкладки
sessionStoragekbp_sessionsession_id, landing_path, referrer, landing_timestamp, touchЗакрытие вкладки
sessionStoragekbp_cooldowntimestamp последнего submitЗакрытие вкладки
sessionStoragekbp_outcomequalified, lead_score, funnel_mechanismЗакрытие вкладки
sessionStoragekbp_last_submissionsubmission_id, tier, name, phone (для апсейла)Закрытие вкладки
localStoragekbp_returningфлаг что был раньше (для touch)Постоянно
dataLayer(массив)Все события GTMЗагрузка страницы

Pixel + GTM events map (после твоей привязки Pixel в GTM)

Pixel eventКогда firesОткуда в GTM
PageViewКаждая загрузка страницыАвто от Meta Pixel
ViewContentКаждая загрузка страницыНа page_view событие
Lead/thank-you загрузилсяНа generate_lead событие
CompleteRegistration/thank-you + mechanism = registrationНа generate_lead + filter
SubmitApplication/thank-you + mechanism = applicationНа generate_lead + filter
InitiateCheckoutКлик на upsell кнопкуНа lead_upsell событие
Purchase (позже)После Продамус-оплатыНа сервер-событие из Продамус

Дедуп с CAPI: event_id == submission_id. Когда подключим CAPI через Make, оба источника (клиентский Pixel + серверный CAPI) шлют событие с одним event_id, Meta дедуплицирует.

Точки контроля (где можно посмотреть что данные дошли)

  1. DevTools → Application → Session Storage — все kbp_* ключи на сайте
  2. DevTools → Network — POST на hook.us1.make.com/... после submit
  3. Make execution history — каждая заявка как execution с полным payload
  4. Google Sheet → Leads tab — каждая заявка как строка
  5. Slack #karada-leads — каждая заявка как сообщение
  6. GTM Preview Mode — все события dataLayer + теги что сработали
  7. Meta Events Manager → Test Events — Pixel-события в реальном времени
  8. amoCRM → Сделки (когда подключим) — лиды с UTM в полях

Связанные документы

  • /docs/14-meta-ads-attribution — что прописать в Meta Ads
  • /team/15-test-scenarios — как протестировать каждую точку
  • /team/16-amocrm-integration — что нужно от тех-спеца Карада
  • /team/13-tracking-events — справочник событий