Trektik
Назад к документации

Справочник SDK

SDK для всех основных платформ. Основная страница — браузерный @trektik/browser v0.2.2. Для React, Node, серверов и мобильных — отдельные разделы.

Браузер 0.2.2React 0.1.2RN / Node / Python / Go 0.1.0

Платформы

Установка (браузер)

Через npm:

bash
npm install @trektik/browser

Или через CDN (IIFE, глобальный Trektik):

html
<script src="https://cdn.trektik.ru/sdk.js"></script>

API-ключ (pk_…) создаётся в админке проекта. Публичные ключи можно класть в клиентский код — они скопированы с рейт-лимитом и на стороне сервера.

Инициализация

init() создаёт singleton и автоматически стартует подсистемы — автозахват, записи сессий, тепловые карты, фрустрация, подсказки, опросы. Каждую можно отключить передачей false.

ts
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' });

Альтернативно — явный класс, если нужно подсистемами управлять вручную:

ts
import { Trektik } from '@trektik/browser';

const trektik = new Trektik();
trektik.init({ apiKey: 'pk_...' });
// Подсистемы (autocapture, replay, ...) надо стартовать вручную.

Конфигурация TrektikConfig

ПолеНазначение
apiKeyПубличный ключ pk_… (обязателен)
endpointЭндпоинт сбора данных
debugЛоги в console с префиксом [Trektik]
autocaptureПросмотры страниц, клики, формы, скролл
replayЗаписи сессий через rrweb
heatmapКлики, скролл, внимание
frustrationЯростные, бесполезные и ошибочные клики, хаотичное движение курсора
guidesВстроенные гайды: подсказка, модальное окно, тур, чек-лист
surveysNPS, CSAT, открытый ответ, выбор из вариантов
flushIntervalЧастота автофлаша очереди
flushSizeПорог событий для форсированного флаша
sessionTimeoutТайм-аут по неактивности (30 мин)
maxQueueSizeМакс. offline-очередь в localStorage
consentRequiredGDPR/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 | boolean

GDPR-режим. 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 — при вызове соответствующих методов

Исключить элемент из захвата — классом или атрибутом (каскадно):

html
<button class="trektik-no-capture">Не трекать</button>
<div data-trektik-no-capture>...</div>

Точечная настройка — передайте объект AutocaptureConfig:

ts
init({
  apiKey: 'pk_...',
  autocapture: { pageViews: true, clicks: true, forms: true, scroll: false },
});

Полный справочник по системным событиям — на странице Системные события.

Session replay

Использует rrweb под капотом. Шлёт чанки в POST /v1/replay/chunks (gzip, если доступен CompressionStream).

ts
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/bottom
  • modal — с полупрозрачным overlay
  • slideout — боковая панель
  • multi_step_tour — последовательный тур
  • checklist — floating-виджет (bottom-right)

Типы surveys:

  • nps — шкала 0–10
  • csat — звёзды 1–5
  • open_ended — свободный текст
  • multiple_choice — радио

A/B тестирование: гайд или опрос может ссылаться на флаг функции через flag_key + variants[]. SDK разрешает вариант через POST /v1/flags/evaluate перед рендерингом.

Размер бандла

  • browser.global.js (минифицированный IIFE, все подсистемы + rrweb): ~241 KB (~70 KB gzip)
  • index.mjs (ESM): ~64 KB

Основной объём — rrweb. В 0.1.x базовый бандл был ~8 KB; рост случился после добавления записей сессий, тепловых карт, фрустрации и подсказок. Если эти модули не нужны, отключите их в конфиге — tree-shaking не удалит их, зато подсистемы не запустятся и не потянут события.