Налаштування ML-рекомендацій товарів на 1С-Бітрікс

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

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

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

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

  • 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

Налаштування ML-рекомендацій товарів на 1С-Бітрікс

ML-рекомендації — це не "подібні товари з тієї ж категорії". Це модель, яка на основі паттернів поведінки тисяч користувачів передбачає, який товар конкретний користувач найбільш ймовірно додасть в кошик. Різниця в конверсії між "подібними по категорії" й реальними ML-рекомендаціями може бути в 2–4 рази. В Бітриксі немає вбудованого ML-двигуна, тому система будується з кількох шарів.

Архітектура: Бітрікс + зовнішній ML-сервіс

ML-модель не повинна жити в PHP-коді Бітрикса — навчання й інференс потребують ресурсів, несумісних з веб-запитом. Правильна архітектура:

  1. Бітрікс — збирає события поведінки (перегляди, покупки, клацання) й пише їх в чергу або базу даних
  2. ML-сервіс (Python/FastAPI або готове рішення) — навчає модель на накопичених даних, видає рекомендації по HTTP API
  3. Бітрікс — запитує рекомендації в ML-сервісу й відображає в шаблоні

Готові ML-сервіси, інтегровані з Бітриксом

Yandex.Персоналізація — входить в екосистему Yandex, потребує передачі подій в Метрику й Yandex.Рекламу. Складно налаштовувати без партнерського доступу.

Retail Rocket — спеціалізується на e-commerce рекомендаціях, є готовий віджет для Бітрикса. Передача подій через JavaScript-трекер.

Власний сервіс на Python — повний контроль, ніяких залежностей від сторонніх платформ. Алгоритм: матричная факторизація (ALS через бібліотеку implicit) або нейронні мережі (NCF). Дані з b_user_behavior експортуються в CSV, модель навчається офлайн раз на добу, результати записуються в Redis.

Передача подій в ML-сервіс

При кожному перегляді товара або покупці Бітрікс відправляє событие в чергу (Redis Pub/Sub, RabbitMQ або просто HTTP-запит до ML-сервісу):

// У шаблоні catalog.element
$mlEvent = [
    'event'      => 'view',
    'user_id'    => $GLOBALS['USER']->GetID() ?: ('anon_' . session_id()),
    'item_id'    => $arResult['ID'],
    'timestamp'  => time(),
    'session_id' => session_id(),
];

// Асинхронна передача без очікування на відповідь
$ch = curl_init('http://ml-service:8000/event');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => json_encode($mlEvent),
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json'],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT_MS     => 200, // Максимум 200ms — не блокуємо рендеринг
    CURLOPT_NOSIGNAL       => 1,
]);
curl_exec($ch);
curl_close($ch);

Отримання рекомендацій: кеш на Redis

ML-сервіс повертає список ID рекомендованих товарів для користувача. Прямий запит до ML-сервісу при кожній загрузці сторінки — неприйнятно. Кешувати на Redis з TTL 15 хвилин:

$redis = new \Redis();
$redis->connect('127.0.0.1', 6379);

$cacheKey = 'ml_recs_' . ($userId ?: 'anon_' . session_id());
$recommendedIds = $redis->get($cacheKey);

if ($recommendedIds === false) {
    $response = file_get_contents(
        'http://ml-service:8000/recommend?user_id=' . urlencode($userId) . '&limit=8'
    );
    $recommendedIds = json_decode($response, true)['items'] ?? [];
    $redis->setex($cacheKey, 900, json_encode($recommendedIds));
} else {
    $recommendedIds = json_decode($recommendedIds, true);
}

Холодний старт: що показувати новим користувачам

Для користувачів без історії (нові відвідувачі, перші 5 переглядів) ML-модель не працює. Fallback-стратегія: показувати "популярні товари" — список формується зі статистики замовлень за останні 30 днів, кешується на годину. Переключення між ML-рекомендаціями й популярними — за кількістю подій в профілі користувача.