Σύνδεσμος Optimizely

Συνδέστε το Optimizely Feature Experimentation με το Brevo μέσω Tajo για συγχρονισμό αποτελεσμάτων πειραμάτων, στόχευση καμπανιών βάσει τμημάτων feature flag και εμπλουτισμό αυτοματισμών marketing με δεδομένα δοκιμών A/B και πληροφορίες κοινού.

Επισκόπηση

ΙδιότηταΤιμή
ΠλατφόρμαOptimizely
ΚατηγορίαΠειραματισμός (Προσαρμοσμένο)
Πολυπλοκότητα ΡύθμισηςΜεσαία
Επίσημη ΕνσωμάτωσηΌχι
Δεδομένα που ΣυγχρονίζονταιΠειράματα, Κοινά, Εκδηλώσεις, Feature Flags
Μέθοδος ΠιστοποίησηςPersonal Access Token / OAuth 2.0

Χαρακτηριστικά

  • Συγχρονισμός πειράματος - Μεταφόρτωση αναθέσεων παραλλαγής δοκιμών A/B σε χαρακτηριστικά επαφών Brevo
  • Στόχευση κοινού - Χρήση κοινών Optimizely για τμηματοποίηση καμπανιών Brevo
  • Παρακολούθηση μετατροπών - Παρακολούθηση εκδηλώσεων Optimizely και αντιστοίχιση σε παρακολούθηση εκδηλώσεων Brevo
  • Συγχρονισμός feature flag - Τμηματοποίηση επαφών βάσει ενεργοποιημένων feature flags
  • Αναφορά αποτελεσμάτων - Συγχρονισμός αποτελεσμάτων πειράματος για καμπάνιες marketing μετά-ανάλυσης
  • Υποστήριξη πολλαπλών projects - Σύνδεση πολλαπλών projects Optimizely σε μεμονωμένη περίπτωση Tajo

Προαπαιτούμενα

Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:

  1. Λογαριασμό Optimizely Feature Experimentation
  2. Personal Access Token από τις Ρυθμίσεις Εφαρμογής Optimizely
  3. Κλειδί SDK για το περιβάλλον Optimizely σας
  4. Λογαριασμό Brevo με πρόσβαση API
  5. Λογαριασμό Tajo με δικαιώματα συνδέσμου

Πιστοποίηση

Personal Access Token

Terminal window
# Generate at https://app.optimizely.com/v2/accountsettings/tokens
export OPTIMIZELY_ACCESS_TOKEN=your_personal_access_token
export OPTIMIZELY_SDK_KEY=your_sdk_key
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
// All REST API requests use Bearer token auth
const headers = {
'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`,
'Content-Type': 'application/json'
};

Πιστοποίηση SDK

// For feature flag evaluation, use the 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_DATE

Endpoints API

EndpointΜέθοδοςΠεριγραφή
https://api.optimizely.com/v2/projectsGETΛίστα projects
https://api.optimizely.com/v2/experimentsGETΛίστα πειραμάτων
https://api.optimizely.com/v2/experiments/{id}GETΛήψη λεπτομερειών πειράματος
https://api.optimizely.com/v2/experiments/{id}/resultsGETΛήψη αποτελεσμάτων πειράματος
https://api.optimizely.com/v2/featuresGETΛίστα feature flags
https://api.optimizely.com/v2/features/{id}GETΛήψη feature flag
https://api.optimizely.com/v2/audiencesGETΛίστα κοινών
https://api.optimizely.com/v2/eventsGETΛίστα παρακολουθούμενων εκδηλώσεων
https://logx.optimizely.com/v1/eventsPOSTΠαρακολούθηση εκδηλώσεων (endpoint 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

// Track experiment decisions and sync to Brevo
const optimizelyClient = optimizelySDK.createInstance({
sdkKey: process.env.OPTIMIZELY_SDK_KEY
});
await optimizelyClient.onReady();
// Register a decision notification 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()
}
});
}
}
}
);

Συγχρονισμός Αποτελεσμάτων Πειράματος

// Fetch experiment results and sync winning segments
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();
// Process variations and update contact segments
for (const variation of results.metrics) {
const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;
if (isWinner) {
// Create a Brevo segment for users in the winning variation
console.log(`Winning variation: ${variation.variation_name}`);
}
}

Τμηματοποίηση Βάσει Feature Flag

// Evaluate feature flags for user segmentation
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()
}
});
}

Όρια Ρυθμού

EndpointΌριοΣημειώσεις
REST API50 αιτ./λεπτόΑνά personal access token
Results API10 αιτ./λεπτόΥψηλότερη καθυστέρηση, βαρύτερα ερωτήματα
Αποστολή εκδηλώσεων SDK10.000 εκδηλώσεις/batchΜέσω επεξεργαστή εκδηλώσεων SDK
Datafile CDNΑπεριόριστοΑποθηκευμένο στη cache με αυτόματες ενημερώσεις

Καθυστέρηση Results API

Το Results API Πειράματος επεξεργάζεται μεγάλα σύνολα δεδομένων και μπορεί να χρειαστεί 30+ δευτερόλεπτα για απόκριση. Χρησιμοποιήστε ασύγχρονο polling ή αποθήκευση στη cache για αποφυγή αποκλεισμού της εφαρμογής σας.

Αντιμετώπιση Προβλημάτων

ΠρόβλημαΑιτίαΛύση
401 UnauthorizedToken ληγμένο/μη έγκυροΑναγέννηση Personal Access Token
SDK δεν είναι έτοιμοΤο datafile δεν έχει φορτωθείΑναμείνετε επίλυση της υπόσχεσης onReady()
Δεν καταγράφονται αποφάσειςΗ ειδοποίηση δεν εγγράφηκεΕγγράψτε ακροατή πριν τη λήψη αποφάσεων
Παλαιά feature flagsCache datafileΟρίστε updateInterval για αυτόματη ανανέωση
Λείπουν αποτελέσματαΤο πείραμα δεν ξεκίνησεΕπαληθεύστε ότι η κατάσταση πειράματος είναι “running”

Λειτουργία Εντοπισμού Σφαλμάτων

connectors:
optimizely:
debug: true
log_level: verbose
log_decisions: true
log_events: true

Βέλτιστες Πρακτικές

  1. Χρησιμοποιήστε SDK για αποφάσεις - Χρησιμοποιήστε SDK για αξιολόγηση flag σε πραγματικό χρόνο, REST API για διαχείριση
  2. Εφαρμόστε ομαδοποίηση εκδηλώσεων - Ομαδοποιήστε εκδηλώσεις SDK για μείωση overhead δικτύου
  3. Αποθηκεύστε datafile στη cache - Ενεργοποιήστε αυτόματη ενημέρωση με κατάλληλα διαστήματα
  4. Συγχρονίστε νικητές παραλλαγές - Μετά την ολοκλήρωση πειραμάτων, ενημερώστε τμήματα επαφών
  5. Χρησιμοποιήστε χαρακτηριστικά για στόχευση - Μεταβιβάστε email και χαρακτηριστικά χρήστη για αντιστοίχιση κοινού
  6. Παρακολουθήστε κατάσταση πειράματος - Συγχρονίζετε μόνο δεδομένα από εκτελούμενα ή ολοκληρωμένα πειράματα

Ασφάλεια

  • Personal Access Tokens - Πιστοποίηση Bearer token για REST API
  • Απομόνωση κλειδιού SDK - Ξεχωριστά κλειδιά SDK ανά περιβάλλον (dev, staging, prod)
  • Αξιολόγηση πλευράς server - Αξιολογείτε feature flags πλευρά server για αποτροπή έκθεσης
  • Εναλλαγή token - Εναλλάσσετε Personal Access Tokens περιοδικά
  • Ελάχιστα δικαιώματα - Χρησιμοποιήστε tokens μόνο ανάγνωσης όταν δεν απαιτείται πρόσβαση εγγραφής
  • Κρυπτογραφημένη μεταφορά - TLS 1.2+ για όλες τις επικοινωνίες API και SDK

Σχετικοί Πόροι

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI Βοηθός

Γεια! Ρωτήστε με οτιδήποτε για την τεκμηρίωση.