Trektik
Документация

Миграция с Amplitude / Mixpanel

Заменить Amplitude или Mixpanel на Trektik очень просто. Методы почти одинаковые. Ниже --- реальный код из наших SDK.

Сравнение концепций

Amplitude / MixpanelTrektikРазница
amplitude.init(apiKey)init({ apiKey })Почти то же самое
amplitude.track(name, props)trektik.track(name, props)Идентично
amplitude.identify(id)trektik.identify(id, props)Идентично
amplitude.revenue(data)trektik.revenue(data)Идентично
amplitude.reset()trektik.reset()Идентично
amplitude.flush()trektik.flush()Идентично
(нет)trektik.optOut() / optIn()Встроенный consent
(нет)Autocapture, Replay, HeatmapБонусы из коробки

Browser SDK (@trektik/browser)

1. Установка

Amplitude
npm install @amplitude-analytics/browser
Trektik
npm install @trektik/browser

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

Amplitude
import * as amplitude from '@amplitude/analytics-browser';

amplitude.init('YOUR_API_KEY');
Trektik
import { init } from '@trektik/browser';

// init() создаёт экземпляр Trektik и включает:
// - Autocapture (клики, просмотры, формы, скролл)
// - Heatmap (тепловые карты кликов)
// - Frustration detection (rage clicks, dead clicks)
// - Guides (пошаговые подсказки)
// - Surveys (встроенные опросы)
const trektik = init({
  apiKey: 'YOUR_API_KEY',
  // endpoint: 'https://collect.trektik.ru', // по умолчанию
  // debug: false,
  // autocapture: true,    // или { pageViews, clicks, forms, scroll }
  // heatmap: true,
  // frustration: true,
  // guides: true,
  // surveys: true,
  // flushInterval: 10000, // мс, по умолчанию 10 сек
  // flushSize: 30,        // событий в батче
  // sessionTimeout: 1800000, // 30 мин
});

3. Отправка событий

Amplitude
amplitude.track('Button Clicked', {
  button_name: 'signup',
  page: '/pricing'
});
Trektik
trektik.track('Button Clicked', {
  button_name: 'signup',
  page: '/pricing'
});
// Свойства разделяются автоматически:
// строки → str_properties
// числа  → num_properties

4. Идентификация пользователя

Amplitude
amplitude.setUserId('user-123');
const identify = new amplitude.Identify();
identify.set('plan', 'pro');
amplitude.identify(identify);
Trektik
trektik.identify('user-123', {
  plan: 'pro'
});
// Одна строка вместо трёх.
// userId сохраняется в localStorage.

5. Выручка

Amplitude
const revenue = new amplitude.Revenue();
revenue.setProductId('premium');
revenue.setPrice(9.99);
amplitude.revenue(revenue);
Trektik
trektik.revenue({
  amount: 9.99,
  productId: 'premium',
  currency: 'USD',
  revenueType: 'subscription', // 'one_time' | 'subscription' | 'refund'
});
// Отправляется как событие '$revenue'

6. Сброс (logout)

Amplitude
amplitude.reset();
Trektik
trektik.reset();
// Очищает userId, deviceId, sessionId
// Генерирует новые deviceId и sessionId

7. Consent (GDPR)

Amplitude
amplitude.setOptOut(true);
// ...
amplitude.setOptOut(false);
Trektik
trektik.optOut();  // перестаёт отправлять события
// ...
trektik.optIn();   // возобновляет отправку

8. Полезные геттеры

trektik.getDeviceId();   // текущий device ID
trektik.getUserId();    // текущий user ID (или null)
trektik.getSessionId(); // текущий session ID
Бонус: Trektik автоматически собирает page_url, page_path, referrer, screen_width, screen_height, UTM-метки (utm_source, utm_medium, utm_campaign), sdk_version и platform. Не нужно ничего настраивать.
Офлайн-режим: Если пользователь потерял интернет, события сохраняются в localStorage и отправляются когда связь восстановится.

Node.js SDK (@trektik/node)

1. Установка

Amplitude
npm install @amplitude/analytics-node
Trektik
npm install @trektik/node

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

Amplitude
import { Amplitude } from '@amplitude/analytics-node';
const amp = new Amplitude('YOUR_API_KEY');
Trektik
import { Trektik } from '@trektik/node';

const trektik = new Trektik({
  apiKey: 'YOUR_API_KEY',
  // endpoint: 'https://collect.trektik.ru',
  // flushInterval: 5000,   // мс, по умолчанию 5 сек
  // flushSize: 100,        // событий в батче
  // maxQueueSize: 10000,
  // debug: false,
});

// Если используете Feature Flags:
trektik.setProjectId(1);

3. Отправка событий

В серверном SDK userId передаётся первым аргументом (на сервере нет localStorage).

Amplitude
amp.track('Purchase', { amount: 49.99 }, {
  user_id: 'user-123'
});
Trektik
trektik.track('user-123', 'Purchase', {
  amount: 49.99
});

4. Идентификация

Amplitude
amp.identify('user-123', { plan: 'pro' });
Trektik
await trektik.identify('user-123', { plan: 'pro' });

5. Выручка

Amplitude
amp.revenue('user-123', {
  price: 49.99, productId: 'premium'
});
Trektik
trektik.trackRevenue('user-123', 49.99, {
  product_id: 'premium',
  currency: 'USD'
});
// Отправляется как событие '$revenue' с $amount

6. Feature Flags

// Получить значение флага
const value = await trektik.getFlag('user-123', 'new-checkout');
// value: true/false или любое значение

// Получить полный ответ (с вариантом)
const detail = await trektik.getFlagDetail('user-123', 'new-checkout');
// detail: { flag_key: 'new-checkout', value: true, variant: 'control' }

7. Завершение

// Graceful shutdown: отправит все оставшиеся события
await trektik.shutdown();
// Также срабатывает автоматически на SIGTERM/SIGINT
Node SDK автоматически: батчит события, ретраит с экспоненциальным backoff (3 попытки), реализует graceful shutdown при SIGTERM/SIGINT.

Python SDK (trektik)

1. Установка

Amplitude
pip install amplitude-analytics
Trektik
pip install trektik

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

Amplitude
from amplitude import Amplitude
amp = Amplitude('YOUR_API_KEY')
Trektik
from trektik import Trektik

trektik = Trektik(api_key='YOUR_API_KEY')
# Или через конфиг:
# from trektik.types import TrektikConfig
# trektik = Trektik(TrektikConfig(
#     api_key='YOUR_API_KEY',
#     endpoint='https://collect.trektik.ru',
#     debug=False,
# ))

# Для Feature Flags:
trektik.set_project_id(1)

3. Отправка событий

Amplitude
from amplitude import BaseEvent
amp.track(BaseEvent(
    event_type='Purchase',
    user_id='user-123',
    event_properties={'amount': 49.99}
))
Trektik
trektik.track('user-123', 'Purchase', {
    'amount': 49.99
})

# Есть и async-версия:
await trektik.track_async('user-123', 'Purchase', {
    'amount': 49.99
})

4. Идентификация

Amplitude
from amplitude import Identify
identify = Identify()
identify.set('plan', 'pro')
amp.identify('user-123', identify)
Trektik
trektik.identify('user-123', {'plan': 'pro'})

# Async:
await trektik.identify_async('user-123', {'plan': 'pro'})

5. Выручка

Amplitude
from amplitude import Revenue
rev = Revenue(price=49.99, product_id='premium')
amp.revenue('user-123', rev)
Trektik
trektik.track_revenue('user-123', 49.99, {
    'product_id': 'premium',
    'currency': 'USD'
})

6. Feature Flags

# Получить значение
value = trektik.get_flag('user-123', 'new-checkout')

# Получить полный ответ
detail = trektik.get_flag_detail('user-123', 'new-checkout')
# detail.flag_key, detail.value, detail.variant

# Async:
value = await trektik.get_flag_async('user-123', 'new-checkout')

7. Завершение

trektik.shutdown()
# Отправит все оставшиеся события.
# Также вызывается автоматически через atexit.
Python SDK потокобезопасный (thread-safe). Фоновый поток отправляет батчи по таймеру. Ретрай с экспоненциальным backoff (3 попытки). Graceful shutdown через atexit.

Чеклист миграции

  1. Установить пакет Trektik (npm install @trektik/browser или pip install trektik)
  2. Заменить импорт и инициализацию (см. примеры выше)
  3. Заменить .track() --- сигнатура почти идентична
  4. Заменить .identify() --- в Trektik проще (нет класса Identify)
  5. Заменить .revenue() --- в Trektik проще (нет класса Revenue)
  6. Удалить пакет Amplitude / Mixpanel
  7. Проверить, что события приходят в дашборд Trektik
Главное отличие: в Trektik нет вспомогательных классов (Identify, Revenue, BaseEvent). Всё делается одним вызовом метода с обычным объектом/словарём.
Параллельный запуск: можно отправлять события и в Amplitude, и в Trektik одновременно, пока проверяете что всё работает. Потом удалить Amplitude.
On-PremiseДокументация