---
title: "Optimizely Connector"
description: "Vollständiger Leitfaden zur Optimizely-Integration für die Synchronisierung von Experimentergebnissen, Feature Flags und Audience-Daten mit Brevo über Tajo."
url: https://tajo.io/de/docs/connectors/custom/optimizely/
markdown: https://tajo.io/de/docs/connectors/custom/optimizely.md
lang: de-DE
robots: noindex
---

Beantrage frühzeitigen Zugang

Gib deinen Vornamen und deine geschäftliche E-Mail-Adresse ein. Wir senden dir einen Link, mit dem du deine Anfrage für den Tajo-Zugang bestätigst.

# Optimizely Connector

Connector-Status: Geplant Noch nicht gebaut. Tajo betreibt diesen Connector heute nicht.

| Quellfeld | Zielfeld | Beispielwert |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Verbinde Optimizely Feature Experimentation über Tajo mit Brevo, um Experimentergebnisse zu synchronisieren, Kampagnen nach Feature-Flag-Segmenten auszurichten und Marketing-Automationen mit A/B-Test-Daten und Audience-Insights anzureichern.

## Überblick

| Eigenschaft | Wert |
| --- | --- |
| **Plattform** | Optimizely |
| **Kategorie** | Experimentation (Custom) |
| **Einrichtungsaufwand** | Mittel |
| **Offizielle Integration** | Nein |
| **Synchronisierte Daten** | Experimente, Audiences, Events, Feature Flags |
| **Authentifizierung** | Personal Access Token / OAuth 2.0 |

## Funktionen

- **Experiment-Synchronisation** - Übertrage A/B-Test-Variationszuweisungen an Brevo-Kontaktattribute
- **Audience-Targeting** - Nutze Optimizely-Audiences für die Brevo-Kampagnensegmentierung
- **Conversion-Tracking** - Tracke Optimizely-Events und mappe sie auf das Brevo-Event-Tracking
- **Feature-Flag-Synchronisation** - Segmentiere Kontakte nach aktivierten Feature Flags
- **Ergebnis-Reporting** - Synchronisiere Experimentergebnisse für nachgelagerte Analyse-Marketing-Kampagnen
- **Multi-Projekt-Support** - Verbinde mehrere Optimizely-Projekte mit einer einzigen Tajo-Instanz

## Voraussetzungen

Bevor du beginnst, stelle sicher, dass du Folgendes hast:

1. Ein Optimizely-Feature-Experimentation-Konto
2. Einen Personal Access Token aus den [Optimizely App Settings](https://app.optimizely.com/v2/accountsettings/tokens)
3. Einen SDK-Schlüssel für deine Optimizely-Umgebung
4. Ein Brevo-Konto mit API-Zugriff
5. Ein Tajo-Konto mit Connector-Berechtigungen

## Authentifizierung

### Personal Access Token

```bash
# 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
```

```javascript
// All REST API requests use Bearer token auth
const headers = {
  'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`,
  'Content-Type': 'application/json'
};
```

### SDK-Authentifizierung

```javascript
// 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();
```

## Konfiguration

### Grundeinrichtung

```yaml
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
```

### Feld-Mapping

```yaml
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
```

## API-Endpoints

| Endpoint | Methode | Beschreibung |
| --- | --- | --- |
| `https://api.optimizely.com/v2/projects` | GET | Projekte auflisten |
| `https://api.optimizely.com/v2/experiments` | GET | Experimente auflisten |
| `https://api.optimizely.com/v2/experiments/{id}` | GET | Experimentdetails abrufen |
| `https://api.optimizely.com/v2/experiments/{id}/results` | GET | Experimentergebnisse abrufen |
| `https://api.optimizely.com/v2/features` | GET | Feature Flags auflisten |
| `https://api.optimizely.com/v2/features/{id}` | GET | Feature Flag abrufen |
| `https://api.optimizely.com/v2/audiences` | GET | Audiences auflisten |
| `https://api.optimizely.com/v2/events` | GET | Getrackte Events auflisten |
| `https://logx.optimizely.com/v1/events` | POST | Events tracken (SDK-Endpoint) |

## Code-Beispiele

### Connector initialisieren

```javascript
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'
});
```

### Experiment-Entscheidungen mit Brevo synchronisieren

```javascript
// 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()
          }
        });
      }
    }
  }
);
```

### Experimentergebnisse synchronisieren

```javascript
// 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-basierte Segmentierung

```javascript
// 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()
    }
  });
}
```

## Rate Limits

| Endpoint | Limit | Hinweise |
| --- | --- | --- |
| REST API | 50 Anfr./Min | Pro Personal Access Token |
| Results API | 10 Anfr./Min | Höhere Latenz, aufwendigere Queries |
| SDK Event Dispatch | 10.000 Events/Batch | Über den SDK-Event-Prozessor |
| Datafile CDN | Unbegrenzt | Gecacht mit Auto-Updates |

Latenz der Results API

Die Experiment Results API verarbeitet große Datensätze und kann über 30 Sekunden für eine Antwort benötigen. Nutze asynchrones Polling oder Caching, um dein Programm nicht zu blockieren.

## Fehlerbehebung

| Problem | Ursache | Lösung |
| --- | --- | --- |
| 401 Unauthorized | Token abgelaufen/ungültig | Personal Access Token neu generieren |
| SDK nicht bereit | Datafile nicht geladen | Auf `onReady()`-Promise warten |
| Keine Decisions geloggt | Notification nicht registriert | Listener vor Decisions registrieren |
| Veraltete Feature Flags | Datafile-Cache | `updateInterval` für Auto-Refresh setzen |
| Fehlende Ergebnisse | Experiment nicht gestartet | Status des Experiments auf “running” prüfen |

### Debug-Modus

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

## Best Practices

1. **SDK für Decisions nutzen** - Nutze das SDK für Echtzeit-Flag-Evaluation, die REST-API fürs Management
2. **Event-Batching implementieren** - Bündle SDK-Events, um Netzwerk-Overhead zu reduzieren
3. **Datafile cachen** - Aktiviere Auto-Update mit passenden Intervallen
4. **Gewinner-Variationen synchronisieren** - Aktualisiere Kontaktsegmente nach Experiment-Abschluss
5. **Attribute fürs Targeting nutzen** - Übergib E-Mail und User-Attribute für das Audience-Matching
6. **Experimentstatus überwachen** - Synchronisiere nur Daten aus laufenden oder abgeschlossenen Experimenten

## Sicherheit

- **Personal Access Tokens** - Bearer-Token-Authentifizierung für die REST-API
- **SDK-Schlüssel-Isolation** - Separate SDK-Schlüssel pro Umgebung (Dev, Staging, Prod)
- **Serverseitige Evaluation** - Evaluiere Feature Flags serverseitig, um Offenlegung zu vermeiden
- **Token-Rotation** - Rotiere Personal Access Tokens regelmäßig
- **Minimale Berechtigungen** - Nutze Read-only-Tokens, wenn kein Schreibzugriff nötig ist
- **Verschlüsselter Transport** - TLS 1.2+ für alle API- und SDK-Kommunikationen

## Verwandte Ressourcen

- [PostHog Connector](https://tajo.io/de/docs/connectors/custom/posthog)
- [Segment Connector](https://tajo.io/de/docs/connectors/custom/segment)
- [Customer-Sync-Skill](https://tajo.io/de/docs/skills/data-sync/customer-sync)
- [Optimizely Feature Experimentation Dokumentation](https://docs.developers.optimizely.com/feature-experimentation/docs)
