---
title: "Конектор Optimizely"
description: "Пълно ръководство за интеграция с Optimizely за синхронизация на резултати от експерименти, feature flags и данни за аудитории с Brevo чрез Tajo."
url: https://tajo.io/bg/docs/connectors/custom/optimizely/
markdown: https://tajo.io/bg/docs/connectors/custom/optimizely.md
lang: bg-BG
robots: noindex
---

Заявете ранен достъп

Въведете собственото си име и служебен имейл адрес. Ще ви изпратим връзка за потвърждение на заявката за достъп до Tajo.

# Конектор Optimizely

Статус на конектора: Планиран Все още не е изграден. Tajo не изпълнява този конектор днес.

| Поле източник | Целево поле | Примерна стойност |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Свържете Optimizely Feature Experimentation с Brevo чрез Tajo, за да синхронизирате резултати от експерименти, да насочвате кампании по сегменти с feature flags и да обогатявате маркетинговите автоматизации с данни от A/B тестове и инсайти за аудитории.

## Преглед

| Свойство | Стойност |
| --- | --- |
| **Платформа** | Optimizely |
| **Категория** | Експериментиране (Персонализирана) |
| **Сложност на настройка** | Средна |
| **Официална интеграция** | Не |
| **Синхронизирани данни** | Експерименти, Аудитории, Събития, Feature Flags |
| **Метод на автентикация** | Personal Access Token / OAuth 2.0 |

## Функции

- **Синхронизация на експерименти** – Изпращайте разпределения на A/B тест вариации към атрибутите на контактите в Brevo
- **Таргетиране по аудитория** – Използвайте аудитории на Optimizely за сегментиране на кампании в Brevo
- **Проследяване на конверсии** – Проследявайте събития на Optimizely и ги мапвайте към проследяване на събития в Brevo
- **Синхронизация на feature flags** – Сегментирайте контакти по активирани feature flags
- **Отчети с резултати** – Синхронизирайте резултати от експерименти за маркетингови кампании след анализа
- **Поддръжка на множество проекти** – Свържете множество проекти на Optimizely към една Tajo инстанция

## Предварителни условия

Преди да започнете, уверете се, че имате:

1. Акаунт в Optimizely Feature Experimentation
2. Personal Access Token от [Optimizely App Settings](https://app.optimizely.com/v2/accountsettings/tokens)
3. SDK ключ за вашата среда в Optimizely
4. Акаунт в Brevo с API достъп
5. Акаунт в Tajo с конекторни права

## Автентикация

### 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 автентикация

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

## Конфигурация

### Основна настройка

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

### Мапване на полета

```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 крайни точки

| Endpoint | Method | Описание |
| --- | --- | --- |
| `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 | Списък на аудиториите |
| `https://api.optimizely.com/v2/events` | GET | Списък на проследяваните събития |
| `https://logx.optimizely.com/v1/events` | POST | Проследяване на събития (SDK endpoint) |

## Примери за код

### Инициализация на конектора

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

### Синхронизация на решенията от експерименти към Brevo

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

### Синхронизация на резултати от експерименти

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

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

## Лимити на заявки

| Endpoint | Лимит | Бележки |
| --- | --- | --- |
| REST API | 50 req/min | За personal access token |
| Results API | 10 req/min | По-висока латентност, по-тежки заявки |
| SDK Event Dispatch | 10,000 събития/batch | Чрез SDK event processor |
| Datafile CDN | Неограничено | Кеширано с автоматични обновления |

Латентност на Results API

Experiment Results API обработва големи набори от данни и може да отнеме 30+ секунди, за да отговори. Използвайте асинхронно допитване или кеширане, за да избегнете блокиране на вашето приложение.

## Отстраняване на проблеми

| Проблем | Причина | Решение |
| --- | --- | --- |
| 401 Unauthorized | Изтекъл/невалиден токен | Генерирайте нов Personal Access Token |
| SDK не е готов | Datafile не е зареден | Изчакайте промисът `onReady()` да се резолвне |
| Няма логнати решения | Нотификация не е регистрирана | Регистрирайте listener преди вземане на решения |
| Остарели feature flags | Кеширан datafile | Задайте `updateInterval` за автоматично обновяване |
| Липсващи резултати | Експериментът не е стартиран | Проверете дали статусът на експеримента е “running” |

### Debug режим

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

## Най-добри практики

1. **Използвайте SDK за решения** – Използвайте SDK за оценка на flags в реално време, REST API за управление
2. **Внедрете batching на събития** – Групирайте SDK събития, за да намалите мрежовото натоварване
3. **Кеширайте datafile** – Активирайте автоматично обновяване с подходящи интервали
4. **Синхронизирайте печелившите вариации** – След приключване на експерименти, обновете сегментите на контактите
5. **Използвайте атрибути за таргетиране** – Предавайте email и потребителски атрибути за съответствие с аудиториите
6. **Следете статуса на експеримента** – Синхронизирайте данни само от текущи или приключени експерименти

## Сигурност

- **Personal Access Tokens** – Bearer token автентикация за REST API
- **Изолация на SDK ключ** – Отделни SDK ключове за среда (dev, staging, prod)
- **Server-side оценка** – Оценявайте feature flags от сървъра, за да предотвратите излагане
- **Ротация на токени** – Ротирайте Personal Access Tokens периодично
- **Минимални права** – Използвайте read-only токени, когато не е нужен write достъп
- **Криптиран транспорт** – TLS 1.2+ за всички API и SDK комуникации

## Свързани ресурси

- [Конектор PostHog](https://tajo.io/bg/docs/connectors/custom/posthog)
- [Конектор Segment](https://tajo.io/bg/docs/connectors/custom/segment)
- [Customer Sync Skill](https://tajo.io/bg/docs/skills/data-sync/customer-sync)
- [Optimizely Feature Experimentation Documentation](https://docs.developers.optimizely.com/feature-experimentation/docs)
