---
title: "موصل Optimizely"
description: "دليل تكامل Optimizely الشامل لمزامنة نتائج التجارب، وعلامات الميزات، وبيانات الجمهور مع Brevo عبر Tajo."
url: https://tajo.io/ar/docs/connectors/custom/optimizely/
markdown: https://tajo.io/ar/docs/connectors/custom/optimizely.md
lang: ar-SA
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 لمزامنة نتائج التجارب، واستهداف الحملات حسب شرائح علامات الميزات، وإثراء أتمتة التسويق ببيانات اختبار A/B ورؤى الجمهور.

## نظرة عامة

| الخاصية | القيمة |
| --- | --- |
| **المنصة** | Optimizely |
| **الفئة** | التجريب (مخصص) |
| **تعقيد الإعداد** | متوسط |
| **تكامل رسمي** | لا |
| **البيانات المُزامَنة** | تجارب، جماهير، أحداث، علامات ميزات |
| **طريقة المصادقة** | رمز وصول شخصي / OAuth 2.0 |

## الميزات

- **مزامنة التجارب** - دفع تعيينات تنويعات اختبار A/B إلى سمات جهات اتصال Brevo
- **استهداف الجمهور** - استخدام جماهير Optimizely لتقسيم حملات Brevo
- **تتبع التحويلات** - تتبع أحداث Optimizely وربطها بتتبع أحداث Brevo
- **مزامنة علامات الميزات** - تقسيم جهات الاتصال حسب علامات الميزات المُفعّلة
- **تقارير النتائج** - مزامنة نتائج التجارب لحملات التسويق ما بعد التحليل
- **دعم مشاريع متعددة** - ربط مشاريع Optimizely متعددة بمثيل Tajo واحد

## المتطلبات الأساسية

قبل البدء، تأكد من توفر ما يلي:

1. حساب Optimizely Feature Experimentation
2. رمز وصول شخصي من [إعدادات تطبيق Optimizely](https://app.optimizely.com/v2/accountsettings/tokens)
3. مفتاح SDK لبيئة Optimizely الخاصة بك
4. حساب Brevo مع وصول إلى API
5. حساب Tajo مع صلاحيات الموصلات

## المصادقة

### رمز الوصول الشخصي

```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
// لتقييم علامات الميزات، استخدم الـ 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
```

## نقاط نهاية واجهة البرمجة

| نقطة النهاية | الطريقة | الوصف |
| --- | --- | --- |
| `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 | سرد علامات الميزات |
| `https://api.optimizely.com/v2/features/{id}` | GET | الحصول على علامة ميزة |
| `https://api.optimizely.com/v2/audiences` | GET | سرد الجماهير |
| `https://api.optimizely.com/v2/events` | GET | سرد الأحداث المتتبعة |
| `https://logx.optimizely.com/v1/events` | POST | تتبع الأحداث (نقطة نهاية SDK) |

## أمثلة على الكود

### تهيئة الموصل

```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
// تتبع قرارات التجارب ومزامنتها مع Brevo
const optimizelyClient = optimizelySDK.createInstance({
  sdkKey: process.env.OPTIMIZELY_SDK_KEY
});

await optimizelyClient.onReady();

// تسجيل مستمع إشعار القرار
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
// جلب نتائج التجربة ومزامنة الشرائح الفائزة
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();

// معالجة التنويعات وتحديث شرائح جهات الاتصال
for (const variation of results.metrics) {
  const isWinner = variation.is_improvement && variation.statistical_significance >= 0.95;

  if (isWinner) {
    // إنشاء شريحة Brevo للمستخدمين في التنويع الفائز
    console.log(`Winning variation: ${variation.variation_name}`);
  }
}
```

### التقسيم القائم على علامات الميزات

```javascript
// تقييم علامات الميزات لتقسيم المستخدمين
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 طلب/دقيقة | لكل رمز وصول شخصي |
| Results API | 10 طلب/دقيقة | زمن استجابة أعلى، استعلامات أثقل |
| إرسال أحداث SDK | 10,000 حدث/دفعة | عبر معالج أحداث SDK |
| CDN ملف البيانات | غير محدود | مخزّن مؤقتًا مع تحديثات تلقائية |

زمن استجابة Results API

تعالج واجهة نتائج التجربة مجموعات بيانات كبيرة وقد تستغرق 30 ثانية أو أكثر للاستجابة. استخدم الاستطلاع غير المتزامن أو التخزين المؤقت لتجنب حجب تطبيقك.

## استكشاف الأخطاء وإصلاحها

| المشكلة | السبب | الحل |
| --- | --- | --- |
| 401 Unauthorized | الرمز منتهي/غير صالح | أعد توليد رمز الوصول الشخصي |
| SDK ليس جاهزًا | ملف البيانات لم يُحمَّل | انتظر حلّ وعد `onReady()` |
| لا توجد قرارات مسجلة | الإشعار غير مُسجَّل | سجّل المستمع قبل اتخاذ القرارات |
| علامات ميزات قديمة | ذاكرة تخزين ملف البيانات | اضبط `updateInterval` للتحديث التلقائي |
| نتائج مفقودة | لم تبدأ التجربة | تحقق من أن حالة التجربة “running” |

### وضع التصحيح

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

## أفضل الممارسات

1. **استخدم الـ SDK للقرارات** - استخدم الـ SDK لتقييم العلامات في الوقت الفعلي، وREST API للإدارة
2. **طبّق تجميع الأحداث** - جمّع أحداث SDK لتقليل عبء الشبكة
3. **خزّن ملف البيانات مؤقتًا** - فعّل التحديث التلقائي بفترات مناسبة
4. **مزامنة التنويعات الفائزة** - بعد انتهاء التجارب، حدّث شرائح جهات الاتصال
5. **استخدم السمات للاستهداف** - مرّر البريد الإلكتروني وسمات المستخدم لمطابقة الجمهور
6. **راقب حالة التجارب** - زامن فقط بيانات من تجارب قيد التشغيل أو المنتهية

## الأمان

- **رموز الوصول الشخصية** - مصادقة Bearer token لـ REST API
- **عزل مفتاح SDK** - مفاتيح SDK منفصلة لكل بيئة (dev، staging، prod)
- **التقييم من جانب الخادم** - قيّم علامات الميزات من جانب الخادم لمنع الكشف
- **تدوير الرموز** - دوّر رموز الوصول الشخصية دوريًا
- **الحد الأدنى من الصلاحيات** - استخدم رموز قراءة فقط عندما لا يكون الوصول للكتابة ضروريًا
- **النقل المُشفَّر** - TLS 1.2+ لجميع اتصالات API وSDK

## موارد ذات صلة

- [موصل PostHog](https://tajo.io/ar/docs/connectors/custom/posthog)
- [موصل Segment](https://tajo.io/ar/docs/connectors/custom/segment)
- [مهارة مزامنة العملاء](https://tajo.io/ar/docs/skills/data-sync/customer-sync)
- [وثائق Optimizely Feature Experimentation](https://docs.developers.optimizely.com/feature-experimentation/docs)
