Отслеживание событий
Как правильно называть и структурировать события, чтобы они были полезны в отчётах через месяцы. Примеры — для браузерного SDK@trektik/browser@0.2.2, но правила общие для всех SDK.
Именование событий
Имя события — это ключ, по которому вы его найдёте в отчётах через полгода. Договоритесь с командой об одной схеме и придерживайтесь её.
- snake_case — легче читать и писать, устойчиво к опечаткам
- Прошедшее время глагола — событие уже произошло
- Короткие имена — 2-3 слова достаточно
- Никогда не префикс $ — он зарезервирован для системных событий SDK
signup_completedSigning Up!product_viewedview-productcheckout_startedstartCheckoutСвойства события и пользователя
Любое событие содержит два типа свойств:
- Свойства события (передаются в
track()) — относятся к конкретному действию:plan,amount,product_id. Меняются от события к событию. - Свойства пользователя (передаются в
identify()илиsetUserProperties()) — относятся ко всему пользователю:email,current_plan,registration_date. Изменяются по мере эволюции пользователя, последнее значение перезаписывает старое.
// Свойства конкретной покупки — в свойствах события
trektik.track('purchase_completed', {
amount: 4990,
currency: 'RUB',
product_id: 'pro-month',
discount_code: 'NEWYEAR',
});
// Атрибуты пользователя — в identify / setUserProperties
trektik.setUserProperties({
current_plan: 'pro',
total_spent: 24950,
});Трекер автоматически делит свойства на строковые (str_properties в ClickHouse) и числовые (num_properties) — по числовым можно агрегировать без явных кастов.
Ограничение на размер одного события — 64 KB. Если в плане трекинга включён строгий режим и событие не описано в плане, сбор данных вернёт 400.
Идентификация: связать анонимов с пользователями
До логина пользователь анонимен — SDK генерирует device_id (UUID, хранится в localStorage). После регистрации или логина нужно вызвать identify() с внутренним user_id:
// В обработчике успешного логина
trektik.identify('user-123', {
email: 'ivan@example.com',
plan: 'pro',
created_at: '2024-06-15',
});Что произойдёт на бэкенде:
- Создастся связь
device_id → user_idв таблицеidentity_mappings - Все прошлые анонимные события этого устройства ретроспективно свяжутся с
user-123 - В отчётах новый пользователь не считается дважды (до и после identify)
reset() (logout) SDK сгенерирует новый device_id, чтобы события следующего пользователя за тем же устройством не смешались с предыдущим.Склейка сессий
SDK сам группирует события в сессии:
- Таймаут неактивности — 30 минут по умолчанию (настраивается через
sessionTimeout) - Каждое событие обновляет «последняя активность»; если прошло больше таймаута — начинается новая сессия
- При открытии новой вкладки/дня —
$session_start, при истечении —$session_end session_id— это UTC-время старта сессии, уникальное для каждого устройства
В отчётах это даёт вам: сессии на пользователя, длительность сессии, страницы за сессию, показатель отказов. Воронки с окном «1 сессия» тоже используют этот механизм.
Автозахват: когда полагаться, когда нет
При autocapture: true SDK сам собирает четыре типа событий без вашего кода:
$pageview— смена пути URL, включая SPA (React Router, Next.js App Router)$click— клики по кнопкам, ссылкам, контролам$form_submit— отправка форм$scroll_depth— глубина 25/50/75/100% на странице
init({
apiKey: 'pk_...',
// Вариант 1: всё включено
autocapture: true,
// Вариант 2: выборочно
// autocapture: {
// pageViews: true,
// clicks: true,
// forms: false,
// scroll: false,
// }
});Когда полагаться на автозахват: для общей картины трафика (DAU, популярные страницы, точки входа/выхода).
Когда писать свои события: для ключевых бизнес-действий (signup_completed, purchase_completed, feature_used). Они выживают редизайны, в то время как $click на кнопке ломается при смене её селектора.
.trektik-no-capture или атрибутом data-trektik-no-capture исключаются из автозахвата. Используйте для полей с персональными данными (пароли, платёжные данные).События выручки
Отдельный метод revenue() формирует специальное событие $revenue с нужными полями для расчёта Ценность клиента, регулярная месячная выручка, выручка на пользователя и выручка на платящего пользователя:
trektik.revenue({
amount: 4990, // сумма
currency: 'RUB', // ISO-код
productId: 'pro-month', // опционально
});Для возвратов — отправьте revenue() с отрицательным amount или свойством revenue_type: 'refund'.
План трекинга и качество данных
Чтобы не плодить мусор (опечатки, дубликаты вроде Signup и sign_up, события от разработчиков в проде) — заведите план трекинга в разделе Данные → Схема событий.
Для каждого события описываете: имя, описание, категорию, обязательные свойства. Два режима:
- Обычный режим — принимаются любые события, неописанные помечаются как незапланированные в разделе качества данных
- Строгий режим — сбор данных отклоняет неописанные события с кодом 400
В разделе качества данных автоматически подсвечиваются аномалии — неизвестные события и падение объёма трекаемых событий больше чем на 50%.
trackPurchase(amount: number, ...) вместо строкового track('purchase', ...).Системные события (справочник)
События, которые SDK отправляет автоматически. Все имена начинаются с $; это зарезервированный префикс.
Веб SDK (браузер)
$pageviewавтозахватСмена URL, включая SPA-переходы
$clickавтозахватКлик по интерактивному элементу
$form_submitавтозахватОтправка HTML-формы
$scroll_depthавтозахватПороги 25/50/75/100% на странице
$session_start / $session_endвсегдаСтарт и конец сессии
$identifyпри identify()Привязка device_id к user_id
$revenueпри revenue()Монетарное событие для ценности клиента и выручки на пользователя
Отслеживание фрустрации (если включено)
$rage_clickбраузерСерия кликов в одно место
$dead_clickбраузерКлик без отклика страницы
$error_clickбраузерКлик, приведший к JS-ошибке
$u_turnбраузерБыстрый возврат на предыдущую страницу
Гайды и опросы
$guide_shown / _completed / _dismissedпри показе гайдаЖизненный цикл встроенных гайдов
$survey_shown / _answered / _dismissedпри показе опросаЖизненный цикл опросов
tour_step_viewed / _completedпошаговый турШаги пошагового тура в Browser SDK
checklist_task_completedчек-листЗадача из чек-листа онбординга отмечена
Мобильные SDK
Application OpenediOS / Android / RN / FlutterОткрытие приложения
Application BackgroundediOS / Android / RN / FlutterПриложение свёрнуто
Каждое событие автоматически обогащается общими полями: идентификаторы (project_id, user_id, device_id, session_id), время, география (страна, город из IP), устройство (OS, browser, device_type), UTM-параметры, страница, версия SDK, хэш IP для приватности.