Справочник SDK
SDK для всех основных платформ. Основная страница — браузерный @trektik/browser v0.2.2. Для React, Node, серверов и мобильных — отдельные разделы.
Платформы
Все SDK шлют в один API (/v1/batch, /v1/identify, /v1/flags/evaluate) и используют общий формат событий. Ниже — выбор под стек.
@trektik/browser 0.2.2JS/TS для браузера. Автозахват, записи сессий, тепловые карты, подсказки, опросы, согласия.
@trektik/react 0.1.2Provider + useTrektik() + TrackPageView для App Router. ~2 КБ gzip.
@trektik/react-native 0.1.0AsyncStorage, события жизненного цикла, помощники для React Navigation.
@trektik/node · trektik · trektik-go · trektik-javaСерверные SDK. Пакетная отправка, сброс очереди при завершении, проверка флагов функций.
TrektikSDK · trektik-android · trektikНативные мобильные SDK. Жизненный цикл, офлайн-очередь, отслеживание экранов.
Amplitude / Mixpanel / GAЗамена без полной переделки, сопоставление событий, параллельная работа.
Установка (браузер)
Через npm:
npm install @trektik/browserИли через CDN (IIFE, глобальный Trektik):
<script src="https://cdn.trektik.ru/sdk.js"></script>API-ключ (pk_…) создаётся в админке проекта. Публичные ключи можно класть в клиентский код — они скопированы с рейт-лимитом и на стороне сервера.
Инициализация
init() создаёт singleton и автоматически стартует подсистемы — автозахват, записи сессий, тепловые карты, фрустрация, подсказки, опросы. Каждую можно отключить передачей false.
import { init } from '@trektik/browser';
const trektik = init({
apiKey: 'pk_...',
// автозахват, записи, тепловые карты, гайды, опросы — по умолчанию включены
});
trektik.track('checkout_started', { plan: 'pro', price: 4990 });
trektik.identify('user-42', { email: 'user@example.com' });
trektik.revenue({ amount: 4990, currency: 'RUB', productId: 'pro-monthly' });Альтернативно — явный класс, если нужно подсистемами управлять вручную:
import { Trektik } from '@trektik/browser';
const trektik = new Trektik();
trektik.init({ apiKey: 'pk_...' });
// Подсистемы (autocapture, replay, ...) надо стартовать вручную.Конфигурация TrektikConfig
| Поле | Тип | Default | Назначение |
|---|---|---|---|
apiKey | string | — | Публичный ключ pk_… (обязателен) |
endpoint | string | https://collect.trektik.ru | Эндпоинт сбора данных |
debug | boolean | false | Логи в console с префиксом [Trektik] |
autocapture | bool | AutocaptureConfig | true | Просмотры страниц, клики, формы, скролл |
replay | bool | ReplayOptions | true | Записи сессий через rrweb |
heatmap | bool | HeatmapConfig | true | Клики, скролл, внимание |
frustration | bool | FrustrationConfig | true | Яростные, бесполезные и ошибочные клики, хаотичное движение курсора |
guides | bool | GuideConfig | true | Встроенные гайды: подсказка, модальное окно, тур, чек-лист |
surveys | bool | SurveyConfig | true | NPS, CSAT, открытый ответ, выбор из вариантов |
flushInterval | number (ms) | 10000 | Частота автофлаша очереди |
flushSize | number | 30 | Порог событий для форсированного флаша |
sessionTimeout | number (ms) | 1800000 | Тайм-аут по неактивности (30 мин) |
maxQueueSize | number | 1000 | Макс. offline-очередь в localStorage |
consentRequired | boolean | false | GDPR/152-ФЗ: буферизовать до grantConsent() |
Методы
track(event: string, properties?: Record<string, string|number>) => voidПроизвольное событие. Автоматически добавляет страницу, UTM-метки, экран и данные устройства/ОС. Числа идут в num_properties, остальное — в str_properties.
identify(userId: string, properties?: Record<string, string>) => voidПривязка deviceId к userId. Шлёт POST /v1/identify и генерирует $identify. Пустой, 'undefined' или 'null' userId отбрасывается.
setUserProperties(properties: Record<string, string>) => voidЛокальное обновление user_properties. Не шлёт отдельное событие.
revenue(data: { amount, currency?, productId?, revenueType?, properties? }) => voidШорткат для $revenue. revenueType: 'one_time' | 'subscription' | 'refund'.
reset() => voidНовый deviceId, новая сессия, чистит user_id и user_properties. Вызывать при логауте.
flush() => Promise<void>Принудительно отправить очередь. Обычно не нужно — SDK сам сбрасывает очередь по таймеру и перед закрытием вкладки.
optOut / optIn() => voidМягкое отключение трекинга. Состояние сохраняется в localStorage.
grantConsent / revokeConsent / hasConsent() => void | booleanGDPR-режим. revokeConsent() стирает весь localStorage и деинициализирует SDK — для возобновления нужен init() + grantConsent().
getDeviceId / getUserId / getSessionId() => string | nullТекущие идентификаторы.
destroy() => voidОстановить таймеры и подсистемы. Обычно для hot-reload в dev.
Автозахват
При autocapture: true (по умолчанию) SDK шлёт системные события:
$pageview— загрузка + SPA (pushState, replaceState, popstate, hashchange)$click— клики. Пропускаютсяinput[type=password]$form_submit— без значений полей (для приватности)$scroll_depth— пороги 25 / 50 / 75 / 100%$session_start,$session_end$identify,$revenue— при вызове соответствующих методов
Исключить элемент из захвата — классом или атрибутом (каскадно):
<button class="trektik-no-capture">Не трекать</button>
<div data-trektik-no-capture>...</div>Точечная настройка — передайте объект AutocaptureConfig:
init({
apiKey: 'pk_...',
autocapture: { pageViews: true, clicks: true, forms: true, scroll: false },
});Полный справочник по системным событиям — на странице Системные события.
Session replay
Использует rrweb под капотом. Шлёт чанки в POST /v1/replay/chunks (gzip, если доступен CompressionStream).
init({
apiKey: 'pk_...',
replay: {
samplingRate: 100, // % сессий (0–100)
flushInterval: 10000, // ms
maxEventsPerChunk: 50,
maxDuration: 1800000, // 30 мин hard limit
maskTextInput: true, // маскировать input/textarea
maskAllText: false,
blockSelector: '.sensitive', // полностью блокировать узлы
compress: true,
},
});Сэмплинг фиксируется один раз при создании SDK. Отключить полностью: replay: false.
Guides и surveys
SDK опрашивает бэкенд (GET /v1/decide/guides, /v1/decide/surveys) и рендерит оверлеи в DOM. Стили инжектятся автоматически, можно переопределить.
Поддерживаемые типы guides:
tooltip— относительно CSS-селектораbanner— fixed top/bottommodal— с полупрозрачным overlayslideout— боковая панельmulti_step_tour— последовательный турchecklist— floating-виджет (bottom-right)
Типы surveys:
nps— шкала 0–10csat— звёзды 1–5open_ended— свободный текстmultiple_choice— радио
A/B тестирование: гайд или опрос может ссылаться на флаг функции через flag_key + variants[]. SDK разрешает вариант через POST /v1/flags/evaluate перед рендерингом.
GDPR / 152-ФЗ
consentRequired: true SDK буферизует события до явного grantConsent(). Ничего не шлётся, пока пользователь не согласился.const trektik = init({ apiKey: 'pk_...', consentRequired: true });
// до consent — события буферизуются в памяти, НЕ идут на сервер
trektik.track('button_click');
trektik.hasConsent(); // false
// Consent получен:
trektik.grantConsent(); // буфер уходит; дальше — обычная работа
// Пользователь отозвал:
trektik.revokeConsent(); // стирает весь localStorage, SDK деинициализируется
// Чтобы возобновить — надо снова вызвать init() + grantConsent()IP-адреса хешируются на сервере (projects.ip_anonymization = true по умолчанию).
Размер бандла
browser.global.js(минифицированный IIFE, все подсистемы + rrweb): ~241 KB (~70 KB gzip)index.mjs(ESM): ~64 KB
Основной объём — rrweb. В 0.1.x базовый бандл был ~8 KB; рост случился после добавления записей сессий, тепловых карт, фрустрации и подсказок. Если эти модули не нужны, отключите их в конфиге — tree-shaking не удалит их, зато подсистемы не запустятся и не потянут события.