Optimizely کنیکٹر
تجرباتی نتائج سنک کرنے، feature flag سیگمنٹس کے ذریعے مہمات کو ہدف بنانے، اور A/B test ڈیٹا اور audience بصیرتوں کے ساتھ مارکیٹنگ آٹومیشنز کو بہتر بنانے کے لیے Optimizely Feature Experimentation کو Tajo کے ذریعے Brevo سے منسلک کریں۔
جائزہ
| خاصیت | قدر |
|---|---|
| پلیٹ فارم | Optimizely |
| زمرہ | تجربہ (حسب ضرورت) |
| سیٹ اپ کی پیچیدگی | معتدل |
| آفیشل انٹیگریشن | نہیں |
| سنک شدہ ڈیٹا | تجربات، Audiences، ایونٹس، Feature Flags |
| توثیقی طریقہ | Personal Access Token / OAuth 2.0 |
خصوصیات
- تجربہ سنک - A/B test variation assignments کو Brevo رابطہ خصوصیات کی طرف بھیجیں
- Audience targeting - Brevo مہم سیگمنٹیشن کے لیے Optimizely audiences کا استعمال کریں
- Conversion ٹریکنگ - Optimizely ایونٹس کو ٹریک کریں اور Brevo ایونٹ ٹریکنگ سے میپ کریں
- Feature flag سنک - فعال feature flags کے ذریعے رابطوں کو سیگمنٹ کریں
- نتائج کی رپورٹنگ - پوسٹ-تجزیہ مارکیٹنگ مہمات کے لیے تجرباتی نتائج سنک کریں
- ملٹی-پروجیکٹ سپورٹ - متعدد Optimizely پروجیکٹس کو ایک واحد Tajo انسٹینس سے منسلک کریں
ضروریات
شروع کرنے سے پہلے، یقینی بنائیں کہ آپ کے پاس ہے:
- Optimizely Feature Experimentation اکاؤنٹ
- Optimizely App Settings سے Personal Access Token
- اپنے Optimizely ماحول کے لیے SDK key
- API رسائی کے ساتھ Brevo اکاؤنٹ
- کنیکٹر اجازتوں کے ساتھ Tajo اکاؤنٹ
توثیق
Personal Access Token
# https://app.optimizely.com/v2/accountsettings/tokens پر تخلیق کریںexport OPTIMIZELY_ACCESS_TOKEN=your_personal_access_tokenexport OPTIMIZELY_SDK_KEY=your_sdk_keyexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// تمام REST API درخواستیں Bearer token توثیق استعمال کرتی ہیںconst headers = { 'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`, 'Content-Type': 'application/json'};SDK توثیق
// feature flag evaluation کے لیے، SDK استعمال کریںconst optimizelySDK = require('@optimizely/optimizely-sdk');
const optimizelyClient = optimizelySDK.createInstance({ sdkKey: process.env.OPTIMIZELY_SDK_KEY, datafileOptions: { autoUpdate: true, updateInterval: 60000 // 1 minute }});
await optimizelyClient.onReady();کنفیگریشن
بنیادی سیٹ اپ
connectors: optimizely: enabled: true access_token: "${OPTIMIZELY_ACCESS_TOKEN}" sdk_key: "${OPTIMIZELY_SDK_KEY}" project_id: "12345678"
sync: experiments: true audiences: true events: true feature_flags: true schedule: "0 */2 * * *" # Every 2 hours
mapping: experiment_variation: EXPERIMENT_VARIATION feature_flags: ENABLED_FEATURES audience_segments: OPT_SEGMENTSفیلڈ میپنگ
field_mapping: user_id: email experiment_key: EXPERIMENT_NAME variation_key: VARIATION_NAME feature_key: FEATURE_FLAG enabled: FEATURE_ENABLED audience_name: AUDIENCE_SEGMENT decision_timestamp: EXPERIMENT_DATEAPI اینڈ پوائنٹس
| اینڈ پوائنٹ | طریقہ | تفصیل |
|---|---|---|
https://api.optimizely.com/v2/projects | GET | پروجیکٹس کی فہرست |
https://api.optimizely.com/v2/experiments | GET | تجربات کی فہرست |
https://api.optimizely.com/v2/experiments/{id} | GET | تجربہ تفصیلات حاصل کریں |
https://api.optimizely.com/v2/experiments/{id}/results | GET | تجرباتی نتائج حاصل کریں |
https://api.optimizely.com/v2/features | GET | feature flags کی فہرست |
https://api.optimizely.com/v2/features/{id} | GET | feature flag حاصل کریں |
https://api.optimizely.com/v2/audiences | GET | audiences کی فہرست |
https://api.optimizely.com/v2/events | GET | ٹریک شدہ ایونٹس کی فہرست |
https://logx.optimizely.com/v1/events | POST | ایونٹس ٹریک کریں (SDK اینڈ پوائنٹ) |
کوڈ مثالیں
کنیکٹر کو شروع کریں
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
await tajo.connectors.connect('optimizely', { accessToken: process.env.OPTIMIZELY_ACCESS_TOKEN, sdkKey: process.env.OPTIMIZELY_SDK_KEY, projectId: '12345678'});تجرباتی فیصلوں کو Brevo سے سنک کریں
// تجرباتی فیصلوں کو ٹریک کریں اور Brevo سے سنک کریںconst optimizelyClient = optimizelySDK.createInstance({ sdkKey: process.env.OPTIMIZELY_SDK_KEY});
await optimizelyClient.onReady();
// فیصلے کی اطلاع کا listener رجسٹر کریںoptimizelyClient.notificationCenter.addNotificationListener( optimizelySDK.enums.NOTIFICATION_TYPES.DECISION, async (decisionObject) => { const { type, userId, attributes, decisionInfo } = decisionObject;
if (type === 'feature' || type === 'ab-test') { const email = attributes.email; if (email) { await tajo.contacts.update(email, { attributes: { EXPERIMENT_NAME: decisionInfo.experimentKey || decisionInfo.featureKey, VARIATION_NAME: decisionInfo.variationKey, FEATURE_ENABLED: decisionInfo.featureEnabled || false, EXPERIMENT_DATE: new Date().toISOString() } }); } } });تجرباتی نتائج سنک کریں
// تجرباتی نتائج حاصل کریں اور جیتنے والے سیگمنٹس سنک کریںconst resultsResponse = await fetch( `https://api.optimizely.com/v2/experiments/${experimentId}/results`, { headers: { 'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}` } });
const results = await resultsResponse.json();
// variations پر عمل کریں اور رابطہ سیگمنٹس اپ ڈیٹ کریںfor (const variation of results.metrics) { const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;
if (isWinner) { // جیتنے والی variation میں صارفین کے لیے Brevo سیگمنٹ بنائیں console.log(`Winning variation: ${variation.variation_name}`); }}Feature Flag پر مبنی سیگمنٹیشن
// صارف سیگمنٹیشن کے لیے feature flags کا جائزہ لیںasync function syncFeatureFlags(userEmail, userId) { const features = ['new_checkout', 'loyalty_program', 'ai_recommendations']; const enabledFeatures = [];
for (const feature of features) { const user = optimizelyClient.createUserContext(userId, { email: userEmail }); const decision = user.decide(feature);
if (decision.enabled) { enabledFeatures.push(feature); } }
await tajo.contacts.update(userEmail, { attributes: { ENABLED_FEATURES: enabledFeatures.join(', '), FEATURE_FLAGS_SYNCED: new Date().toISOString() } });}ریٹ کی حدود
| اینڈ پوائنٹ | حد | نوٹس |
|---|---|---|
| REST API | 50 req/min | فی personal access token |
| Results API | 10 req/min | زیادہ latency، بھاری queries |
| SDK Event Dispatch | 10,000 ایونٹس/بیچ | SDK event processor کے ذریعے |
| Datafile CDN | لامحدود | auto-updates کے ساتھ کیشے |
Results API Latency
Experiment Results API بڑے ڈیٹا سیٹس پر عمل کرتا ہے اور جواب دینے میں 30+ سیکنڈ لے سکتا ہے۔ اپنی ایپلی کیشن کو بلاک کرنے سے بچنے کے لیے async polling یا کیشنگ کا استعمال کریں۔
مسائل کا سراغ
| مسئلہ | وجہ | حل |
|---|---|---|
| 401 Unauthorized | ٹوکن میعاد ختم/غیر معتبر | Personal Access Token دوبارہ تخلیق کریں |
| SDK تیار نہیں | Datafile لوڈ نہیں | onReady() promise کے حل ہونے کا انتظار کریں |
| کوئی فیصلے لاگ نہیں ہوئے | اطلاع رجسٹر نہیں | فیصلے کرنے سے پہلے listener رجسٹر کریں |
| پرانے feature flags | Datafile cache | auto-refresh کے لیے updateInterval سیٹ کریں |
| غائب نتائج | تجربہ شروع نہیں ہوا | تصدیق کریں کہ تجربے کی حیثیت “running” ہے |
ڈیبگ موڈ
connectors: optimizely: debug: true log_level: verbose log_decisions: true log_events: trueبہترین طریقے
- فیصلوں کے لیے SDK استعمال کریں - ریئل ٹائم flag evaluation کے لیے SDK، انتظام کے لیے REST API استعمال کریں
- Event batching نافذ کریں - نیٹ ورک اوور ہیڈ کو کم کرنے کے لیے SDK ایونٹس کو بیچ کریں
- Datafile کیشے کریں - مناسب intervals کے ساتھ auto-update فعال کریں
- جیتنے والی variations سنک کریں - تجربات ختم ہونے کے بعد، رابطہ سیگمنٹس اپ ڈیٹ کریں
- ہدف بنانے کے لیے خصوصیات استعمال کریں - audience matching کے لیے email اور صارف کی خصوصیات پاس کریں
- تجربے کی حیثیت کی نگرانی کریں - صرف چلنے والے یا ختم شدہ تجربات سے ڈیٹا سنک کریں
سیکیورٹی
- Personal Access Tokens - REST API کے لیے Bearer token توثیق
- SDK key تنہائی - فی ماحول الگ SDK keys (dev، staging، prod)
- سرور سائیڈ evaluation - ظاہر ہونے سے روکنے کے لیے feature flags کو سرور سائیڈ evaluate کریں
- ٹوکن گردش - Personal Access Tokens کو وقتاً فوقتاً گردش دیں
- کم از کم اجازتیں - جب لکھنے کی رسائی کی ضرورت نہ ہو تو صرف پڑھنے کے ٹوکنز استعمال کریں
- خفیہ کردہ ٹرانسپورٹ - تمام API اور SDK مواصلات کے لیے TLS 1.2+