---
title: "Optimizely-kobling"
description: "Fullstendig Optimizely-integrasjonsveiledning for synkronisering av eksperimentresultater, feature flags og målgruppedata med Brevo gjennom Tajo."
url: https://tajo.io/no/docs/connectors/custom/optimizely/
markdown: https://tajo.io/no/docs/connectors/custom/optimizely.md
lang: no-NO
robots: noindex
---

Be om tidlig tilgang

Skriv inn fornavn og e-postadresse på jobb. Vi sender deg en lenke for å bekrefte forespørselen om tilgang til Tajo.

# Optimizely-kobling

Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.

| Kildefelt | Målfelt | Eksempelverdi |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Koble Optimizely Feature Experimentation til Brevo gjennom Tajo for å synkronisere eksperimentresultater, målrette kampanjer etter feature flag-segmenter og berike markedsføringsautomatiseringer med A/B-testdata og målgruppeinnsikt.

## Oversikt

| Egenskap | Verdi |
| --- | --- |
| **Plattform** | Optimizely |
| **Kategori** | Eksperimentering (Custom) |
| **Oppsettskompleksitet** | Moderat |
| **Offisiell integrasjon** | Nei |
| **Synkroniserte data** | Eksperimenter, målgrupper, hendelser, feature flags |
| **Autentiseringsmetode** | Personlig tilgangstoken / OAuth 2.0 |

## Funksjoner

- **Eksperimentsynkronisering** - Push A/B-testvariantstildelinger til Brevo-kontaktattributter
- **Målgruppemålretting** - Bruk Optimizely-målgrupper til segmentering av Brevo-kampanjer
- **Konverteringssporing** - Spor Optimizely-hendelser og mapp til Brevo-hendelsessporing
- **Feature flag-synkronisering** - Segmenter kontakter etter aktiverte feature flags
- **Resultatrapportering** - Synkroniser eksperimentresultater for etteranalyse av markedsføringskampanjer
- **Støtte for flere prosjekter** - Koble flere Optimizely-prosjekter til én enkelt Tajo-instans

## Forutsetninger

Før du begynner, sørg for at du har:

1. En Optimizely Feature Experimentation-konto
2. Et personlig tilgangstoken fra [Optimizely App Settings](https://app.optimizely.com/v2/accountsettings/tokens)
3. En SDK-nøkkel for ditt Optimizely-miljø
4. En Brevo-konto med API-tilgang
5. En Tajo-konto med konnektor-rettigheter

## Autentisering

### Personlig tilgangstoken

```bash
# Generer på 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
// Alle REST API-forespørsler bruker Bearer-tokenautentisering
const headers = {
  'Authorization': `Bearer ${process.env.OPTIMIZELY_ACCESS_TOKEN}`,
  'Content-Type': 'application/json'
};
```

### SDK-autentisering

```javascript
// For evaluering av feature flags, bruk SDK-et
const optimizelySDK = require('@optimizely/optimizely-sdk');

const optimizelyClient = optimizelySDK.createInstance({
  sdkKey: process.env.OPTIMIZELY_SDK_KEY,
  datafileOptions: {
    autoUpdate: true,
    updateInterval: 60000  // 1 minutt
  }
});

await optimizelyClient.onReady();
```

## Konfigurasjon

### Grunnleggende oppsett

```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 * * *"  # Hver 2. time

    mapping:
      experiment_variation: EXPERIMENT_VARIATION
      feature_flags: ENABLED_FEATURES
      audience_segments: OPT_SEGMENTS
```

### Feltmapping

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

| Endepunkt | Metode | Beskrivelse |
| --- | --- | --- |
| `https://api.optimizely.com/v2/projects` | GET | List prosjekter |
| `https://api.optimizely.com/v2/experiments` | GET | List eksperimenter |
| `https://api.optimizely.com/v2/experiments/{id}` | GET | Hent eksperimentdetaljer |
| `https://api.optimizely.com/v2/experiments/{id}/results` | GET | Hent eksperimentresultater |
| `https://api.optimizely.com/v2/features` | GET | List feature flags |
| `https://api.optimizely.com/v2/features/{id}` | GET | Hent feature flag |
| `https://api.optimizely.com/v2/audiences` | GET | List målgrupper |
| `https://api.optimizely.com/v2/events` | GET | List sporede hendelser |
| `https://logx.optimizely.com/v1/events` | POST | Spor hendelser (SDK-endepunkt) |

## Kodeeksempler

### Initialiser kobling

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

### Synkroniser eksperimentbeslutninger til Brevo

```javascript
// Spor eksperimentbeslutninger og synkroniser til Brevo
const optimizelyClient = optimizelySDK.createInstance({
  sdkKey: process.env.OPTIMIZELY_SDK_KEY
});

await optimizelyClient.onReady();

// Registrer en lytter for beslutningsvarsler
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()
          }
        });
      }
    }
  }
);
```

### Synkroniser eksperimentresultater

```javascript
// Hent eksperimentresultater og synkroniser vinnende segmenter
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();

// Behandle varianter og oppdater kontaktsegmenter
for (const variation of results.metrics) {
  const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;

  if (isWinner) {
    // Opprett et Brevo-segment for brukere i den vinnende varianten
    console.log(`Winning variation: ${variation.variation_name}`);
  }
}
```

### Feature flag-basert segmentering

```javascript
// Evaluer feature flags for brukersegmentering
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()
    }
  });
}
```

## Ratebegrensninger

| Endepunkt | Grense | Merknader |
| --- | --- | --- |
| REST API | 50 forespørsler/min | Per personlig tilgangstoken |
| Results API | 10 forespørsler/min | Høyere latens, tyngre spørringer |
| SDK Event Dispatch | 10 000 hendelser/batch | Via SDK-hendelsesprosessor |
| Datafile CDN | Ubegrenset | Mellomlagret med automatisk oppdatering |

Results API-latens

Experiment Results API behandler store datasett og kan ta 30+ sekunder å svare. Bruk asynkron polling eller mellomlagring for å unngå å blokkere applikasjonen din.

## Feilsøking

| Problem | Årsak | Løsning |
| --- | --- | --- |
| 401 Unauthorized | Token utløpt/ugyldig | Regenerer personlig tilgangstoken |
| SDK ikke klar | Datafile ikke lastet | Vent på at `onReady()`-promise skal løses |
| Ingen beslutninger loggført | Varsler ikke registrert | Registrer lytter før beslutninger tas |
| Utdaterte feature flags | Datafile-cache | Sett `updateInterval` for automatisk oppdatering |
| Manglende resultater | Eksperiment ikke startet | Verifiser at eksperimentstatus er “running” |

### Feilsøkingsmodus

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

## Beste praksis

1. **Bruk SDK-et for beslutninger** - Bruk SDK-et for sanntidsevaluering av flags, REST API for administrasjon
2. **Implementer hendelsesbatching** - Batch SDK-hendelser for å redusere nettverkstrafikk
3. **Mellomlagre datafile** - Aktiver auto-oppdatering med passende intervaller
4. **Synkroniser vinnende varianter** - Etter at eksperimenter er avsluttet, oppdater kontaktsegmenter
5. **Bruk attributter for målretting** - Send e-post og brukerattributter for målgruppetreff
6. **Overvåk eksperimentstatus** - Synkroniser kun data fra pågående eller avsluttede eksperimenter

## Sikkerhet

- **Personlige tilgangstokens** - Bearer-tokenautentisering for REST API
- **SDK-nøkkelisolering** - Separate SDK-nøkler per miljø (dev, staging, prod)
- **Tjenersideevaluering** - Evaluer feature flags på tjenersiden for å hindre eksponering
- **Tokenrotasjon** - Roter personlige tilgangstokens regelmessig
- **Minimale rettigheter** - Bruk kun lese-tokens når skrivetilgang ikke er nødvendig
- **Kryptert transport** - TLS 1.2+ for all API- og SDK-kommunikasjon

## Relaterte ressurser

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