w-funnel/docs/SOULMATE_AB_QUICK_REFERENCE.md
2025-10-23 21:16:09 +02:00

179 lines
7.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ⚡ Быстрая справка: AB-тесты Soulmate
## 🧪 Два AB-теста
### 1⃣ `soulmate-onboarding-image`
```
┌──────────────────────────────────────────┐
│ Экран: onboarding (1-й экран) │
│ URL: /soulmate/onboarding │
│ Когда: Сразу при входе в воронку │
│ Timing: ~420ms после загрузки │
│ │
│ Тестирует: │
│ • v0 = дефолтное изображение │
│ • v1 = альтернативное изображение (PNG) │
│ • v2 = видео (MP4) │
│ │
│ JSON: variants блок │
└──────────────────────────────────────────┘
▼ GA impression событие
window.gtag("event", "experiment_impression", {
feature: "soulmate-onboarding-image",
treatment: "v1"
});
```
### 2⃣ `soulmate-trial-grid`
```
┌──────────────────────────────────────────┐
│ Экран: email (19-й экран) │
│ URL: /soulmate/email │
│ Когда: При достижении email экрана │
│ Timing: ~120ms после перехода │
│ │
│ Тестирует: │
│ • coupon = переход на экран с купоном │
│ • grid = переход на выбор тарифов │
│ │
│ JSON: navigation.rules блок │
└──────────────────────────────────────────┘
▼ GA impression событие
window.gtag("event", "experiment_impression", {
feature: "soulmate-trial-grid",
treatment: "grid"
});
```
---
## 📍 Где в коде
```typescript
// src/components/funnel/FunnelRuntime.tsx (строки 103-150)
// Определяем флаги текущего экрана
const currentScreenFlags = useMemo(() => {
const flags = new Set<string>();
// Из variants
currentScreen.variants?.forEach((variant) => {
if (condition.unleashFlag) flags.add(condition.unleashFlag);
});
// Из navigation.rules
currentScreen.navigation?.rules?.forEach((rule) => {
if (condition.unleashFlag) flags.add(condition.unleashFlag);
});
return Array.from(flags);
}, [currentScreen]);
// Отправляем impression когда экран виден
useEffect(() => {
currentScreenFlags.forEach((flag) => {
const variant = activeVariants[flag];
sendUnleashImpression(flag, variant); // ← ОТПРАВКА
});
}, [currentScreenFlags, activeVariants]);
```
---
## ⏱️ Timeline полной воронки
```
┌─────────────────────────────────────────────────────────┐
│ T+0 Открытие /soulmate/onboarding │
├─────────────────────────────────────────────────────────┤
│ T+420ms ✅ IMPRESSION #1 │
│ feature: soulmate-onboarding-image │
│ treatment: v1 │
└─────────────────────────────────────────────────────────┘
│ Пользователь проходит 18 экранов
┌─────────────────────────────────────────────────────────┐
│ T+5min Достижение /soulmate/email │
├─────────────────────────────────────────────────────────┤
│ T+5m ✅ IMPRESSION #2 │
│ +120ms feature: soulmate-trial-grid │
│ treatment: grid │
└─────────────────────────────────────────────────────────┘
```
---
## 🔍 Быстрая проверка
### Console (Development mode)
```javascript
// При загрузке onboarding экрана:
[Unleash Impression] Sent successfully:
{ feature: "soulmate-onboarding-image", variant: "v1" }
// При достижении email экрана:
[Unleash Impression] Sent successfully:
{ feature: "soulmate-trial-grid", variant: "grid" }
```
### Network Tab
```
POST /g/collect?...
&en=experiment_impression
&ep.feature=soulmate-onboarding-image
&ep.treatment=v1
POST /g/collect?...
&en=experiment_impression
&ep.feature=soulmate-trial-grid
&ep.treatment=grid
```
### Session Storage
```javascript
sessionStorage = {
"unleash_impression_soulmate-onboarding-image_v1": "true",
"unleash_impression_soulmate-trial-grid_grid": "true"
}
```
---
## 📊 Сравнение
| | Test #1 | Test #2 |
|--|---------|---------|
| **Флаг** | `soulmate-onboarding-image` | `soulmate-trial-grid` |
| **Экран** | `onboarding` (1-й) | `email` (19-й) |
| **URL** | `/soulmate/onboarding` | `/soulmate/email` |
| **В JSON** | `variants` | `navigation.rules` |
| **Тестирует** | Медиа-контент | Навигацию |
| **Когда** | При входе в воронку | Почти в конце воронки |
---
## ✅ Главное
1. **Оба флага загружаются сразу** (preload) для быстрых переходов
2. **Impression отправляются последовательно** - только когда пользователь видит экран
3. **Защита от дубликатов** через sessionStorage работает автоматически
4. **Один и тот же код** отправляет события для обоих тестов
---
## 📚 Детальная документация
- `SOULMATE_AB_TESTS_TIMELINE.md` - полный анализ с диаграммами
- `GA_AB_TEST_ANALYSIS.md` - техническая документация
- `GA_AB_TEST_EXAMPLES.md` - примеры и сценарии