Інтеграція 1С-Бітрікс з Dynamic Yield

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс з Dynamic Yield
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Бітрікс з Dynamic Yield

Dynamic Yield — enterprise-платформа персоналізації від Mastercard, конкурент Adobe Target та Optimizely. Використовується великими ритейлерами для A/B-тестування, персоналізації контенту й рекомендацій у реальному часі. Інтеграція з Бітриксом будується на двох шарах: Data Feed для синхронізації каталогу й Experience OS JavaScript SDK для передачі поведінських подій.

Data Feed: синхронізація каталогу

Dynamic Yield приймає фід продуктів у форматі JSON або CSV. JSON-фід гнучкіший — дозволяє передавати довільні атрибути для сегментації.

Структура JSON-фіду:

{
  "version": "1.0",
  "type": "full",
  "products": [
    {
      "sku": "PROD-001",
      "name": "Назва товара",
      "url": "https://example.ru/catalog/product/",
      "price": 1500.00,
      "in_stock": true,
      "image_url": "https://example.ru/upload/iblock/abc/photo.jpg",
      "categories": ["Електроніка", "Смартфони"],
      "group_id": "GROUP-001",
      "description": "Коротке описання товара",
      "brand": "Samsung",
      "keywords": ["смартфон", "android"],
      "custom_attributes": {
        "color": "Black",
        "weight": "185g",
        "supplier_id": 42
      }
    }
  ]
}

Генератор фіду в Бітриксі:

function generateDynamicYieldFeed(): string
{
    $products = [];

    $res = CIBlockElement::GetList(
        [],
        ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'],
        false,
        false,
        ['ID', 'NAME', 'DETAIL_PAGE_URL', 'DETAIL_PICTURE',
         'PREVIEW_TEXT', 'IBLOCK_SECTION_ID']
    );

    while ($el = $res->GetNextElement()) {
        $fields = $el->GetFields();
        $props  = $el->GetProperties();

        $price     = CCatalogProduct::GetOptimalPrice($fields['ID']);
        $priceVal  = (float)($price['PRICE']['PRICE'] ?? 0);

        $quantity  = (int)(CCatalogProduct::GetByIDEx($fields['ID'])['QUANTITY'] ?? 0);
        $inStock   = $quantity > 0;

        $imgUrl = '';
        if ($fields['DETAIL_PICTURE']) {
            $f = CFile::GetFileArray($fields['DETAIL_PICTURE']);
            if ($f) $imgUrl = 'https://' . SITE_SERVER_NAME . $f['SRC'];
        }

        $section   = CIBlockSection::GetByID($fields['IBLOCK_SECTION_ID'])->Fetch();
        $categories = $section ? [$section['NAME']] : [];

        $product = [
            'sku'        => $props['CML2_ARTICLE']['VALUE'] ?? (string)$fields['ID'],
            'name'       => $fields['NAME'],
            'url'        => 'https://' . SITE_SERVER_NAME . $fields['DETAIL_PAGE_URL'],
            'price'      => $priceVal,
            'in_stock'   => $inStock,
            'image_url'  => $imgUrl,
            'categories' => $categories,
            'description'=> strip_tags($fields['PREVIEW_TEXT'] ?? ''),
        ];

        // Додаємо додаткові атрибути з властивостей
        $customAttrs = [];
        foreach (['BRAND', 'COLOR', 'WEIGHT'] as $propCode) {
            if (!empty($props[$propCode]['VALUE'])) {
                $customAttrs[strtolower($propCode)] = $props[$propCode]['VALUE'];
            }
        }
        if ($customAttrs) {
            $product['custom_attributes'] = $customAttrs;
        }

        $products[] = $product;
    }

    return json_encode([
        'version'  => '1.0',
        'type'     => 'full',
        'products' => $products,
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
}

Фід публікується за URL і вказується в Dynamic Yield → Feeds. Рекомендована частота оновлення — щоденно; при частих змінах цін — кілька разів на день через агент.

JavaScript SDK: события поведінки

Dynamic Yield потребує інітіалізації на кожній сторінці:

window.DY = window.DY || {};
DY.recommendationContext = { type: 'HOMEPAGE' }; // переопределяется на кожному типі сторінок

(function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = '//cdn.dynamicyield.com/api/<?= DY_SITE_ID ?>/api_dynamic.js';
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'DY-api-script'));

DY_SITE_ID — ідентифікатор зі особистого кабінету Dynamic Yield.

Контекст сторінки — Dynamic Yield персоналізує контент за типом сторінки:

// У шаблоні карточки товара
?>
<script>
window.DY = window.DY || {};
DY.recommendationContext = {
    type: 'PRODUCT',
    data: ['<?= $arResult['ID'] ?>']  // SKU поточного товара
};
</script>
<?php

// У шаблоні категорії
?>
<script>
DY.recommendationContext = {
    type: 'CATEGORY',
    data: ['<?= $sectionCode ?>']
};
</script>
<?php

Событие додавання в кошик:

DY.API('event', {
    name: 'Add to Cart',
    properties: {
        dyType: 'add-to-cart-v1',
        value: price * quantity,
        currency: 'RUB',
        productId: String(productId),
        quantity: quantity,
        cart: currentCartItems.map(function(item) {
            return { productId: String(item.id), quantity: item.qty, itemPrice: item.price };
        })
    }
});

Событие завершення замовлення:

DY.API('event', {
    name: 'Purchase',
    properties: {
        dyType: 'purchase-v1',
        uniqueTransactionId: String(orderId),
        value: orderTotal,
        currency: 'RUB',
        cart: orderItems.map(function(item) {
            return { productId: String(item.product_id), quantity: item.quantity, itemPrice: item.price };
        })
    }
});

Дані для цього события передаються через data-атрибути HTML або через inline-змінні PHP на сторінці "Дякуємо за замовлення".

Ідентифікація користувача

Dynamic Yield пов'язує анонімні й авторизовані сесії. При авторизації викликаємо:

DY.API('event', {
    name: 'Login',
    properties: {
        dyType: 'login-v1',
        hashedEmail: sha256(userEmail.toLowerCase().trim())
    }
});

Хеш SHA-256 email обчислюється на клієнті. Dynamic Yield не приймає email у відкритому вигляді.

Widgets: блоки рекомендацій

Dynamic Yield відображає персоналізовані блоки через "віджети" — конфігуруються у особистому кабінеті. Зі сторони Бітрикса — тільки HTML-контейнер з ID:

<!-- У шаблоні карточки товара: "Вам може сподобатися" -->
<div class="dy-recommendations" id="dy-widget-product-page"></div>

<!-- На головній: "Персональні рекомендації" -->
<div class="dy-recommendations" id="dy-widget-homepage"></div>

Dynamic Yield сам заповнює ці контейнери рекомендаціями на основі поведінки користувача.

Терміни реалізації

Обсяг Склад Термін
Фід + базовий SDK (контекст + кошик + покупка) Генератор фіду + JS-события 2–4 дні
Ідентифікація + усі типи сторінок + хешований email + контексти +1–2 дні
A/B-тести + сегменти + віджети Налаштування в DY + тестування віджетів окремий рядок бюджету