Разработка системы рекомендаций товаров 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка системы рекомендаций товаров 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка системы рекомендаций товаров 1С-Битрикс

Система рекомендаций — это движок, который решает задачу: какой товар показать конкретному пользователю в конкретный момент, чтобы увеличить вероятность покупки. Встроенный инструментарий Битрикс предлагает только ручную настройку связей между товарами. Полноценная система рекомендаций — это отдельная разработка с анализом поведенческих данных.

Алгоритмы рекомендаций

Выбор алгоритма зависит от объёма данных и требований к качеству:

Content-based filtering (на основе свойств товаров). Рекомендуем товары, похожие по характеристикам: та же категория, близкий ценовой диапазон, общие теги. Работает без истории покупок, подходит для новых пользователей.

function getContentBasedRecommendations(int $productId, int $limit = 10): array {
    $product  = \CIBlockElement::GetByID($productId)->GetNext();
    $iblockId = $product['IBLOCK_ID'];
    $price    = \CPrice::GetBasePrice($productId)['PRICE'];
    $sectionId = $product['IBLOCK_SECTION_ID'];

    // Товары из той же категории в ценовом диапазоне ±30%
    $result = \CIBlockElement::GetList(
        ['RAND' => 'ASC'],
        [
            'IBLOCK_ID'          => $iblockId,
            'IBLOCK_SECTION_ID'  => $sectionId,
            '!ID'                => $productId,
            '>=CATALOG_PRICE_1'  => $price * 0.7,
            '<=CATALOG_PRICE_1'  => $price * 1.3,
            'ACTIVE'             => 'Y',
        ],
        false,
        ['nPageSize' => $limit],
        ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE']
    );

    $items = [];
    while ($item = $result->GetNext()) {
        $items[] = $item;
    }
    return $items;
}

Collaborative filtering (коллаборативная фильтрация). «Пользователи, которые смотрели этот товар, также смотрели...» Требует накопленной истории просмотров и покупок.

Данные для коллаборативной фильтрации собираем из:

  • b_sale_basket и b_sale_order — реальные покупки.
  • Кастомная таблица custom_product_views — просмотры карточек.
  • b_sale_fuser — гостевые пользователи.

Матричная факторизация (ALS/SVD). Продвинутый алгоритм, требует библиотек (Python: implicit, surprise). Выносим расчёт рекомендаций в отдельный микросервис на Python, результаты сохраняем в Redis/PostgreSQL, Битрикс только читает.

Сбор поведенческих данных

// Трекинг просмотра товара
// Вызывается в шаблоне компонента catalog.element
$userId  = $USER->GetID() ?: 0;
$fuserId = (int)\Bitrix\Sale\Fuser::getId();

$db->query("
    INSERT INTO custom_product_views (product_id, user_id, fuser_id, viewed_at)
    VALUES (?, ?, ?, NOW())
    ON DUPLICATE KEY UPDATE view_count = view_count + 1, viewed_at = NOW()
", [$productId, $userId, $fuserId]);
CREATE TABLE custom_product_views (
    id         SERIAL PRIMARY KEY,
    product_id INT NOT NULL,
    user_id    INT DEFAULT 0,
    fuser_id   INT NOT NULL,
    view_count INT DEFAULT 1,
    viewed_at  DATETIME,
    UNIQUE KEY uk_product_fuser (product_id, fuser_id),
    INDEX idx_fuser (fuser_id),
    INDEX idx_product (product_id)
);

Расчёт «пользователи также смотрели»

-- Товары, которые чаще всего смотрят вместе с товаром $productId
SELECT
    v2.product_id,
    COUNT(DISTINCT v2.fuser_id) AS co_views
FROM custom_product_views v1
JOIN custom_product_views v2
    ON v1.fuser_id = v2.fuser_id
    AND v2.product_id != v1.product_id
    AND v2.viewed_at BETWEEN DATE_SUB(v1.viewed_at, INTERVAL 1 HOUR)
                         AND DATE_ADD(v1.viewed_at, INTERVAL 1 HOUR)
WHERE v1.product_id = :productId
GROUP BY v2.product_id
ORDER BY co_views DESC
LIMIT 20;

Результаты кешируются в Redis на 6–24 часа. Пересчитываются агентом Битрикс ночью по всем популярным товарам.

Персонализация для авторизованного пользователя

Для авторизованных пользователей смотрим историю просмотров за последние 30 дней:

function getPersonalizedRecommendations(int $userId, int $limit = 12): array {
    // Последние просмотренные категории пользователя
    $recentCategories = getRecentUserCategories($userId, 5);

    // Товары из этих категорий, которые он ещё не смотрел
    return \CIBlockElement::GetList(
        ['CATALOG_PRICE_1' => 'ASC'],
        [
            'IBLOCK_ID'         => CATALOG_IBLOCK_ID,
            'IBLOCK_SECTION_ID' => $recentCategories,
            '!ID'               => getViewedProductIds($userId),
            'ACTIVE'            => 'Y',
        ],
        false,
        ['nPageSize' => $limit],
        ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE']
    );
}

Административное управление рекомендациями

Система позволяет:

  • Просматривать статистику кликов по рекомендациям (CTR каждого алгоритма).
  • Добавлять ручные рекомендации (пинкоды) для отдельных товаров.
  • Исключать товары из рекомендаций (распроданные, сезонные).
  • A/B тестировать алгоритмы: половина пользователей видит content-based, половина — collaborative.

Сроки

Компонент Срок
Сбор данных о просмотрах и покупках 2–3 дня
Content-based рекомендации 2–3 дня
Collaborative filtering (SQL-подход) 3–5 дней
Кеширование + агент пересчёта 1–2 дня
Персонализация для авторизованных 2–3 дня
Административная панель + A/B тест 3–4 дня
Тестирование 2–3 дня

Итого: 2.5–3.5 недели для полной системы. Content-based рекомендации без персонализации — 1 неделя.