SDK Reference

Документация по всем SDK Trektik. Каждый метод описан максимально просто, с настоящими примерами кода, которые работают.

Browser SDK

Работает в браузере. Собирает события, отправляет на сервер пачками. Как почтальон: копит письма и относит их сразу кучей.

Установка

Terminal
npm install @trektik/browser

Быстрый старт

app.ts
import { init } from '@trektik/browser';

// Одна строка -- и всё работает.
// Автоматически включает: autocapture, heatmap, frustration, guides, surveys.
const trektik = init({
  apiKey: 'pk_ваш_ключ',
});

// Записать событие (как в дневнике: "Вася нажал кнопку Купить")
trektik.track('button_click', { button: 'Купить' });

// Сказать кто этот пользователь
trektik.identify('user-123', { name: 'Вася', plan: 'pro' });
init() -- это обёртка. Она создаёт экземпляр Trektik и автоматически запускает autocapture, heatmap, frustration-детекцию, guides и surveys. Любой из модулей можно отключить: init({ apiKey: '...', heatmap: false }).

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

ПараметрТипПо умолчаниюОписание
apiKeystringКлюч проекта. Обязательный.
endpointstringhttps://collect.trektik.ruКуда отправлять данные.
autocaptureboolean | AutocaptureConfigtrueАвтоматический сбор кликов, просмотров, форм, скролла.
flushIntervalnumber10000Как часто отправлять пачку событий (мс).
flushSizenumber30Сколько событий копить перед отправкой.
sessionTimeoutnumber1800000Через сколько мс неактивности начинается новая сессия (30 мин).
maxQueueSizenumber1000Максимум событий в очереди. Если больше -- новые не добавляются.
debugbooleanfalseВключает логи в консоль.

Все методы класса Trektik

track()

track(eventName: string, properties?: Record<string, string | number>): void

Записывает событие. Как дневник: 'Вася нажал кнопку Купить'. Свойства могут быть строками или числами.

trektik.track('purchase', { product: 'Кроссовки', price: 4990 });

identify()

identify(userId: string, properties?: Record<string, string>): void

Говорит SDK кто этот пользователь. Как бейджик с именем. Сохраняет в localStorage и отправляет на сервер.

trektik.identify('user-42', { email: 'vasya@mail.ru', plan: 'pro' });

setUserProperties()

setUserProperties(properties: Record<string, string>): void

Добавляет свойства пользователю локально (не отправляет на сервер, в отличие от identify).

trektik.setUserProperties({ theme: 'dark', lang: 'ru' });

revenue()

revenue(data: {
  amount: number;
  currency?: string;
  productId?: string;
  revenueType?: 'one_time' | 'subscription' | 'refund';
  properties?: Record<string, string | number>;
}): void

Записывает доход. Как касса в магазине: 'пришло 4990 рублей за кроссовки'. Внутри вызывает track('$revenue', ...).

trektik.revenue({
  amount: 4990,
  currency: 'RUB',
  productId: 'sneakers-01',
  revenueType: 'one_time',
});

reset()

reset(): void

Забывает пользователя. Как выход из аккаунта: новый deviceId, новая сессия, userId = null.

// Когда пользователь вышел из аккаунта
trektik.reset();

optOut() / optIn()

optOut(): void
optIn(): void

optOut() -- пользователь сказал 'не следите за мной'. Все события перестают записываться. optIn() -- разрешил обратно.

// Пользователь отказался от аналитики
trektik.optOut();

// Передумал
trektik.optIn();

getDeviceId() / getUserId() / getSessionId()

getDeviceId(): string
getUserId(): string | null
getSessionId(): string

Возвращают текущие идентификаторы. Полезно для отладки или интеграций.

console.log(trektik.getDeviceId());  // "a1b2c3d4-..."
console.log(trektik.getUserId());    // "user-42" или null
console.log(trektik.getSessionId()); // "e5f6g7h8-..."

flush()

flush(): Promise<void>

Отправляет все накопленные события прямо сейчас. Обычно не нужно вызывать вручную -- SDK делает это автоматически.

destroy()

destroy(): void

Останавливает SDK: отменяет таймеры, отправляет остатки. Вызывайте когда SDK больше не нужен.

TrektikReplay -- запись сессий

Записывает видео сессии пользователя (через rrweb). Как камера наблюдения в магазине -- можно потом посмотреть что делал пользователь.

Использование
import { Trektik, TrektikReplay } from '@trektik/browser';

const sdk = new Trektik();
sdk.init({ apiKey: 'pk_...' });

const replay = new TrektikReplay(sdk, {
  samplingRate: 50,      // записывать 50% сессий
  maskTextInput: true,   // скрывать что вводят в поля
  maxDuration: 1800000,  // максимум 30 минут
});

await replay.start();    // начать запись

replay.isRecording();    // true/false -- идёт ли запись?
replay.stop();           // остановить запись
ПараметрТипПо умолчаниюОписание
samplingRatenumber100Процент сессий для записи (0-100).
flushIntervalnumber10000Как часто отправлять чанки записи (мс).
maxEventsPerChunknumber50Максимум DOM-событий в одном чанке.
maxDurationnumber1800000Максимальная длительность записи (мс). По умолчанию 30 минут.
maskTextInputbooleantrueСкрывать текст в полях ввода.
maskAllTextbooleanfalseСкрывать весь текст на странице.
blockSelectorstring""CSS-селектор элементов, которые не записывать.
compressbooleantrueСжимать чанки gzip (если браузер поддерживает).

TrektikHeatmap -- тепловые карты

Собирает данные для тепловых карт: где кликают, как далеко скроллят, на какие блоки смотрят. Как отпечатки пальцев на витрине -- видно куда все тыкают.

Использование
import { TrektikHeatmap } from '@trektik/browser';

const heatmap = new TrektikHeatmap(
  { apiKey: 'pk_...' },
  { clicks: true, scroll: true, attention: true }
);

heatmap.start();  // начать сбор
heatmap.stop();   // остановить и отправить данные
heatmap.flush();  // отправить накопленное прямо сейчас
ПараметрТипПо умолчаниюОписание
clicksbooleantrueОтслеживать клики (координаты, CSS-селектор).
scrollbooleantrueОтслеживать глубину прокрутки (25%, 50%, 75%, 100%).
attentionbooleantrueОтслеживать время просмотра блоков (IntersectionObserver).
flushIntervalnumber5000Интервал отправки данных (мс).
flushSizenumber50Максимум событий в пачке.
Для attention-трекинга добавьте атрибут data-trektik-section="hero" на блоки, которые хотите отслеживать. Без атрибутов SDK будет наблюдать за стандартными тегами: section, article, main, header, footer.

TrektikFrustration -- обнаружение фрустрации

Ловит моменты когда пользователь злится: яростно кликает, кликает в пустоту, клик вызывает ошибку, хаотично водит мышкой. Как детектор настроения.

Использование
import { TrektikFrustration } from '@trektik/browser';

const frustration = new TrektikFrustration(
  trektik.track.bind(trektik),  // передаём функцию track
  {
    rageClicks: true,       // 3+ клика за 1 секунду
    deadClicks: true,       // клик без реакции (нет изменений DOM за 500мс)
    errorClicks: true,      // клик, после которого ошибка JS за 2с
    thrashedCursor: true,   // хаотичные движения мышью
  }
);

frustration.start();
frustration.stop();
Все события фрустрации отправляются как $frustration с типом: rage_click, dead_click, error_click, thrashed_cursor.

TrektikGuides -- подсказки в приложении

Показывает пользователям подсказки: тултипы, баннеры, модалки, выезжающие панели. Как помощник, который говорит "Нажми сюда!". Подсказки настраиваются в дашборде и загружаются автоматически.

Использование
import { TrektikGuides } from '@trektik/browser';

const guides = new TrektikGuides(
  { apiKey: 'pk_...' },
  { pollInterval: 60000 }  // проверять новые гайды каждую минуту
);

guides.start();  // начать показ
guides.stop();   // убрать все гайды и прекратить
ПараметрТипПо умолчаниюОписание
pollIntervalnumber60000Как часто проверять новые подсказки (мс).
containerHTMLElementdocument.bodyКонтейнер для рендеринга подсказок.
Поддерживаемые типы: tooltip (привязан к элементу), banner (вверху/внизу страницы), modal (окно по центру), slideout (выезжающая панель слева/справа).

TrektikSurveys -- опросы

Показывает опросы прямо в приложении. Как официант, который спрашивает "Вам всё понравилось?". Настраиваются в дашборде, загружаются автоматически.

Использование
import { TrektikSurveys } from '@trektik/browser';

const surveys = new TrektikSurveys(
  { apiKey: 'pk_...' },
  { pollInterval: 60000 }
);

surveys.start();  // начать показ опросов
surveys.stop();   // убрать текущий опрос и прекратить
ПараметрТипПо умолчаниюОписание
pollIntervalnumber60000Как часто проверять новые опросы (мс).
containerHTMLElementdocument.bodyКонтейнер для рендеринга опросов.
Поддерживаемые типы опросов: nps (шкала 0-10), csat (звёздочки 1-5), open_ended (свободный текст), multiple_choice (выбор варианта).

React SDK

Обёртка для React-приложений. Как розетка: включаешь Provider один раз, а потом в любом компоненте берёшь хук useTraektik и пользуешься.

Установка

Terminal
npm install @trektik/react

Быстрый старт

layout.tsx
import { TrektikProvider, TrackPageView } from '@trektik/react';

export default function RootLayout({ children }) {
  return (
    <TrektikProvider apiKey="pk_ваш_ключ">
      <TrackPageView />
      {children}
    </TrektikProvider>
  );
}
any-component.tsx
import { useTraektik } from '@trektik/react';

function BuyButton() {
  const { track, identify } = useTraektik();

  return (
    <button onClick={() => track('buy_click', { item: 'Кроссовки' })}>
      Купить
    </button>
  );
}

TrektikProvider -- props

ПараметрТипПо умолчаниюОписание
apiKeystringКлюч проекта. Обязательный.
endpointstringhttps://collect.trektik.ruКуда отправлять данные.
debugbooleanfalseЛоги в консоль.
trackPageViewsbooleantrueАвтоматически трекать просмотр страницы при монтировании.

useTraektik() -- что возвращает

track()

track(eventName: string, properties?: Record<string, string | number>): void

Записать событие.

identify()

identify(userId: string, properties?: Record<string, string>): void

Сказать кто пользователь.

reset()

reset(): void

Забыть пользователя (выход из аккаунта).

TrackPageView -- компонент

Автоматически трекает просмотры страниц в Next.js App Router. Перехватывает pushState/replaceState/popstate и отправляет $pageview. Поставьте его внутрь TrektikProvider с trackPageViews={false}.

Node.js SDK

Серверный SDK для Node.js. Как журнал в бухгалтерии: записывает события от имени пользователей на сервере. Автоматически батчит и ретраит.

Установка

Terminal
npm install @trektik/node

Быстрый старт

server.ts
import { Trektik } from '@trektik/node';

// На сервере userId передаётся вручную (SDK не знает кто зашёл).
const trektik = new Trektik({ apiKey: 'sk_ваш_ключ' });

trektik.track('user-123', 'purchase', { product: 'Кроссовки', price: 4990 });

// При завершении процесса -- отправить всё
await trektik.shutdown();

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

ПараметрТипПо умолчаниюОписание
apiKeystringСерверный ключ проекта. Обязательный.
endpointstringhttps://collect.trektik.ruАдрес API.
flushIntervalnumber5000Интервал отправки пачки (мс).
flushSizenumber100Размер пачки.
maxQueueSizenumber10000Максимум событий в очереди.
debugbooleanfalseЛогирование.
flagPollIntervalnumber30000Интервал проверки фича-флагов (мс).

Методы

track()

track(userId: string, eventName: string, properties?: Record<string, string | number>): void

Записать событие от имени пользователя. На сервере всегда нужно передавать userId.

trektik.track('user-42', 'page_view', { page: '/catalog' });

identify()

identify(userId: string, properties: Record<string, string>): Promise<void>

Связать свойства с пользователем (имя, email, тариф).

await trektik.identify('user-42', { email: 'vasya@mail.ru', plan: 'pro' });

trackRevenue()

trackRevenue(userId: string, amount: number, properties?: Record<string, string | number>): void

Записать доход. Внутри вызывает track(userId, '$revenue', { $amount: amount, ... }).

trektik.trackRevenue('user-42', 4990, { currency: 'RUB' });

getFlag()

getFlag(userId: string, flagKey: string): Promise<unknown>

Получить значение фича-флага. Возвращает значение флага или false если не найден.

const showBanner = await trektik.getFlag('user-42', 'new_banner');
if (showBanner) { /* показать баннер */ }

getFlagDetail()

getFlagDetail(userId: string, flagKey: string): Promise<FlagEvaluateResponse>

То же что getFlag, но возвращает полный объект: { flag_key, value, variant }.

setProjectId()

setProjectId(id: number): this

Установить ID проекта (нужно для фича-флагов).

flush()

flush(): Promise<void>

Отправить все накопленные события сейчас.

shutdown()

shutdown(): Promise<void>

Завершить работу: отправить все события, остановить таймеры. После этого SDK не работает.

Всегда вызывайте await trektik.shutdown() при завершении процесса. SDK сам ловит SIGTERM/SIGINT, но лучше вызвать явно.

Python SDK

Серверный SDK для Python. Потокобезопасный, с поддержкой async. Как секретарь: принимает записки (события) и отправляет их пачками в фоне.

Установка

Terminal
pip install trektik

Быстрый старт

app.py
from trektik import Trektik

trektik = Trektik(api_key="sk_ваш_ключ")

trektik.track("user-123", "purchase", {"product": "Кроссовки", "price": 4990})
trektik.identify("user-123", {"email": "vasya@mail.ru"})

# При завершении
trektik.shutdown()

Методы

track()

track(user_id: str, event_name: str, properties: dict | None = None) -> None

Записать событие. Строки и числа в properties разделяются автоматически.

trektik.track("user-42", "button_click", {"button": "signup", "page": "/home"})

track_async()

async track_async(user_id: str, event_name: str, properties: dict | None = None) -> None

Асинхронная версия track(). Внутри вызывает обычный track().

identify() / identify_async()

identify(user_id: str, properties: dict | None = None) -> None
async identify_async(user_id: str, properties: dict | None = None) -> None

Связать свойства с пользователем.

trektik.identify("user-42", {"plan": "enterprise", "company": "Acme"})

track_revenue()

track_revenue(user_id: str, amount: float, properties: dict | None = None) -> None

Записать доход. Внутри вызывает track(user_id, '$revenue', {'$amount': amount, ...}).

trektik.track_revenue("user-42", 4990.0, {"currency": "RUB"})

get_flag() / get_flag_async()

get_flag(user_id: str, flag_key: str) -> Any
async get_flag_async(user_id: str, flag_key: str) -> Any

Получить значение фича-флага. Возвращает значение или False.

if trektik.get_flag("user-42", "new_checkout"):
    show_new_checkout()

get_flag_detail()

get_flag_detail(user_id: str, flag_key: str) -> FlagEvaluateResponse

Полный ответ с flag_key, value, variant.

set_project_id()

set_project_id(project_id: int) -> Trektik

Установить ID проекта для фича-флагов.

flush() / flush_async()

flush() -> None
async flush_async() -> None

Отправить все накопленные события.

shutdown()

shutdown() -> None

Завершить работу. Вызывается автоматически через atexit, но лучше вызвать явно.

SDK автоматически регистрирует atexit-хук для shutdown(). Фоновый поток отправки создаётся автоматически при инициализации.

Go SDK

Скоро
SDK в разработке. Публикация в пакетный менеджер — в ближайшее время.

Серверный SDK для Go. События складываются в очередь, горутина отправляет их пачками. Встроенный поллер фича-флагов.

Java/Kotlin SDK

Скоро
SDK в разработке. Публикация в пакетный менеджер — в ближайшее время.

Серверный SDK для JVM (Java и Kotlin). Потокобезопасный, отправляет события пачками из фоновых потоков.

iOS SDK (Swift)

Скоро
SDK в разработке. Публикация в пакетный менеджер — в ближайшее время.

SDK для iOS-приложений. Синглтон, автотрекинг жизненного цикла, оффлайн-очередь событий.

Android SDK (Kotlin)

Скоро
SDK в разработке. Публикация в пакетный менеджер — в ближайшее время.

SDK для Android. Синглтон, автотрекинг жизненного цикла через ProcessLifecycleOwner, оффлайн-очередь.

React Native SDK

SDK для React Native. Как браузерный, но для мобильных приложений. Хранит очередь в AsyncStorage, трекает AppState (свернул/развернул).

Установка

Terminal
npm install @trektik/react-native

Быстрый старт

App.tsx
import { TrektikRN } from '@trektik/react-native';

const client = new TrektikRN();

// init -- async, нужно вызвать один раз
await client.init({ apiKey: 'pk_ваш_ключ' });

client.track('button_pressed', { label: 'Sign Up' });
client.identify('user-123', { email: 'vasya@mail.ru' });

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

ПараметрТипПо умолчаниюОписание
apiKeystringКлюч проекта. Обязательный.
endpointstringhttps://collect.trektik.ruАдрес API.
flushIntervalnumber30000Интервал отправки (мс). Больше чем в браузере -- экономит батарею.
flushSizenumber20Размер пачки.
sessionTimeoutnumber1800000Таймаут сессии (мс).
maxQueueSizenumber1000Максимум событий.
autocaptureboolean | AutocaptureConfigtrueАвтотрекинг app_open, app_foreground, app_background.
debugbooleanfalseЛоги в консоль.

Методы

init()

async init(config: TrektikRNConfig): Promise<void>

Инициализировать SDK. Восстанавливает deviceId и очередь из AsyncStorage.

track()

track(eventName: string, properties?: Properties): void

Записать событие. Автоматически добавляет OS, размер экрана.

identify()

identify(userId: string, properties?: Record<string, string>): void

Связать пользователя.

revenue()

revenue(amount: number, currency?: string, properties?: Properties): void

Записать доход. По умолчанию currency = 'USD'.

client.revenue(4990, 'RUB', { product: 'sneakers' });

reset()

async reset(): Promise<void>

Забыть пользователя. Новый deviceId, sessionId, userId = null.

flush()

async flush(): Promise<void>

Отправить все события. При ошибке -- возвращает в очередь и сохраняет в AsyncStorage.

destroy()

destroy(): void

Остановить таймеры и слушатели AppState.

Flutter SDK

Скоро
SDK в разработке. Публикация в пакетный менеджер — в ближайшее время.

SDK для Flutter. Синглтон, SharedPreferences для оффлайн-очереди, NavigatorObserver для автотрекинга экранов.