Миграция с Amplitude / Mixpanel
Заменить Amplitude или Mixpanel на Trektik очень просто. Методы почти одинаковые. Ниже --- реальный код из наших SDK.
Сравнение концепций
| Amplitude / Mixpanel | Trektik | Разница |
|---|---|---|
| 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/browserTrektik
npm install @trektik/browser2. Инициализация
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_properties4. Идентификация пользователя
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 и sessionId7. 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-nodeTrektik
npm install @trektik/node2. Инициализация
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' с $amount6. 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/SIGINTNode SDK автоматически: батчит события, ретраит с экспоненциальным backoff (3 попытки), реализует graceful shutdown при SIGTERM/SIGINT.
Python SDK (trektik)
1. Установка
Amplitude
pip install amplitude-analyticsTrektik
pip install trektik2. Инициализация
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.
Чеклист миграции
- Установить пакет Trektik (
npm install @trektik/browserилиpip install trektik) - Заменить импорт и инициализацию (см. примеры выше)
- Заменить
.track()--- сигнатура почти идентична - Заменить
.identify()--- в Trektik проще (нет класса Identify) - Заменить
.revenue()--- в Trektik проще (нет класса Revenue) - Удалить пакет Amplitude / Mixpanel
- Проверить, что события приходят в дашборд Trektik
Главное отличие: в Trektik нет вспомогательных классов (Identify, Revenue, BaseEvent). Всё делается одним вызовом метода с обычным объектом/словарём.
Параллельный запуск: можно отправлять события и в Amplitude, и в Trektik одновременно, пока проверяете что всё работает. Потом удалить Amplitude.