Інтеграція 1С-Бітрікс з Retail Rocket
Ваш інтернет-магазин втрачає продажі через відсутність персоналізації? Інтеграція 1С-Бітрікс з Retail Rocket вирішує це. Retail Rocket — провідна платформа персоналізації для e-commerce: рекомендації товарів, персональні email-розсилки, поведінкова аналітика, що підвищує конверсію на 20–40%. Технічна інтеграція складається з двох частин: передача даних про поведінку користувачів через JavaScript-трекер та синхронізація каталогу товарів через XML-фід з урахуванням залишків і цін.
Наша команда за час роботи з Бітрікс реалізувала понад 15 інтеграцій з Retail Rocket для магазинів різного профілю: від нішевих бутиків до великих маркетплейсів з мільйонами SKU. Гарантуємо стабільну роботу під високим навантаженням, мінімальну затримку синхронізації даних (менше 15 хвилин) та коректну роботу рекомендаційних блоків на всіх сторінках сайту. Результат — збільшення середнього чека та повторних покупок клієнтів.
XML-фід товарів
Retail Rocket приймає товарний фід у форматі Яндекс.Маркет YML або у власному XML-форматі. Найпростіше використовувати вже згенерований YML-фід Бітрікс — якщо він вже є для Яндекс.Маркету, він підійде і для Retail Rocket.
Якщо фід потрібен окремий (з додатковими полями для сегментації), генеруємо через компонент або агент:
// Мінімальна структура для Retail Rocket
function generateRetailRocketFeed(): string
{
$xml = '<?xml version="1.0" encoding="UTF-8"?><yml_catalog>';
$xml .= '<shop><name>' . htmlspecialchars(SITE_NAME) . '</name>';
$xml .= '<url>https://' . SITE_SERVER_NAME . '</url>';
$xml .= '<currencies><currency id="UAH" rate="1"/></currencies>';
$xml .= '<categories>';
// Категорії
$sections = CIBlockSection::GetList(
['LEFT_MARGIN' => 'ASC'],
['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'],
false,
['ID', 'NAME', 'IBLOCK_SECTION_ID']
);
while ($section = $sections->GetNext()) {
$parentAttr = $section['IBLOCK_SECTION_ID']
? ' parentId="' . $section['IBLOCK_SECTION_ID'] . '"'
: '';
$xml .= '<category id="' . $section['ID'] . '"' . $parentAttr . '>'
. htmlspecialchars($section['NAME']) . '</category>';
}
$xml .= '</categories>';
$xml .= '<offers>';
// Товари
$res = CIBlockElement::GetList(
[],
['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'],
false,
false,
['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'DETAIL_PICTURE',
'PREVIEW_TEXT', 'IBLOCK_SECTION_ID']
);
while ($el = $res->GetNextElement()) {
$fields = $el->GetFields();
$props = $el->GetProperties();
$price = CCatalogProduct::GetOptimalPrice($fields['ID']);
$priceVal = $price['PRICE']['PRICE'] ?? 0;
$imgId = $fields['DETAIL_PICTURE'] ?: $fields['PREVIEW_PICTURE'];
$imgUrl = '';
if ($imgId) {
$imgUrl = 'https://' . SITE_SERVER_NAME . CFile::GetPath($imgId);
}
$url = 'https://' . SITE_SERVER_NAME . $fields['DETAIL_PAGE_URL'];
$xml .= '<offer id="' . $fields['ID'] . '" available="true">';
$xml .= '<url>' . htmlspecialchars($url) . '</url>';
$xml .= '<price>' . number_format($priceVal, 2, '.', '') . '</price>';
$xml .= '<currencyId>UAH</currencyId>';
$xml .= '<categoryId>' . $fields['IBLOCK_SECTION_ID'] . '</categoryId>';
if ($imgUrl) {
$xml .= '<picture>' . htmlspecialchars($imgUrl) . '</picture>';
}
$xml .= '<name>' . htmlspecialchars($fields['NAME']) . '</name>';
if ($fields['PREVIEW_TEXT']) {
$xml .= '<description><![CDATA['
. strip_tags($fields['PREVIEW_TEXT']) . ']]></description>';
}
// Артикул для зв'язку з замовленнями
$sku = $props['CML2_ARTICLE']['VALUE'] ?? $fields['ID'];
$xml .= '<param name="sku">' . htmlspecialchars($sku) . '</param>';
$xml .= '</offer>';
}
$xml .= '</offers></shop></yml_catalog>';
return $xml;
}
Фід кешується на 2–4 години та оновлюється інвалідацією при зміні товару. URL фіду передається в особистому кабінеті Retail Rocket.
JavaScript-трекер Retail Rocket для 1С-Бітрікс
Retail Rocket надає JS-бібліотеку (rrpushdown), яку підключають на всі сторінки. У шаблоні Бітрікс — у footer.php або через addExternalJs:
// Базовий код Retail Rocket (вставляється один раз)
var retailrocket = window.retailrocket || [];
(function(d, w) {
var rr = d.createElement('script');
rr.type = 'text/javascript';
rr.src = '//cdn.retailrocket.net/content/javascript/tracking.js';
d.head.appendChild(rr);
})(document, window);
Подія перегляду картки товару. У шаблоні catalog.element:
// template.php
$productId = $arResult['ID'];
?>
<script>
retailrocket.push(['setAccountId', '<?= RETAIL_ROCKET_ACCOUNT_ID ?>']);
retailrocket.push(['track', 'view', { productId: '<?= $productId ?>' }]);
</script>
Подія додавання в кошик. В обробнику AJAX-додавання:
// При успішному додаванні товару в кошик
retailrocket.push(['track', 'addToBasket', {
productId: String(productId),
quantity: qty
}]);
Подія оформлення замовлення. У шаблоні сторінки «Дякуємо за замовлення» або через обробник події OnSaleOrderSaved:
// У шаблоні сторінки підтвердження замовлення
$orderId = $arOrder['ID'];
$orderPrice = $arOrder['PRICE'];
$items = []; // Масив позицій замовлення
foreach ($arOrder['BASKET'] as $item) {
$items[] = [
'id' => $item['PRODUCT_ID'],
'qnt' => $item['QUANTITY'],
'price' => $item['PRICE'],
];
}
?>
<script>
retailrocket.push(['track', 'transaction', {
transaction: '<?= $orderId ?>',
revenue: <?= $orderPrice ?>,
lineItems: <?= json_encode($items) ?>
}]);
</script>
Подія пошуку:
retailrocket.push(['track', 'search', { searchPhrase: searchQuery }]);
Блоки рекомендацій Retail Rocket
Retail Rocket віддає готові віджети з рекомендаціями. Після налаштування в особистому кабінеті — вставка блоків у шаблони:
<!-- На головній сторінці: «Рекомендуємо» -->
<div data-retailrocket-markup-block="5f4a3b2c1d0e9f8e7d6c5b4a"
data-algorithm="popular">
</div>
<!-- В картці товару: «З цим купують» -->
<div data-retailrocket-markup-block="5f4a3b2c1d0e9f8e7d6c5b4b"
data-algorithm="related"
data-item-id="<?= $arResult['ID'] ?>">
</div>
<!-- В кошику: «Вам може сподобатися» -->
<div data-retailrocket-markup-block="5f4a3b2c1d0e9f8e7d6c5b4c"
data-algorithm="basket">
</div>
Віджети рендеряться на стороні Retail Rocket — вони підвантажують список ID товарів і запитують дані для відображення з вашого каталогу через JS.
Користувач та авторизація
Для зв'язку поведінки з профілем користувача передаємо email при вході:
// В обробнику успішної авторизації
if ($USER->IsAuthorized()) {
$email = $USER->GetEmail();
?>
<script>
retailrocket.push(['setEmail', '<?= htmlspecialchars($email) ?>',
function() { console.log('RR email set'); }
]);
</script>
<?php } ?>
Терміни реалізації
| Обсяг | Склад | Термін |
|---|---|---|
| Базова інтеграція (фід + трекер) | Фід + 3 події + підключення скрипта | 1–2 дні |
| Повна інтеграція (всі події + блоки рекомендацій) | + віджети + email-подія + A/B тест | 3–5 днів |
| Персоналізовані розсилки | + тригерні сценарії через Retail Rocket Email | додати 2–3 дні |
Детальний опис процесу
Інтеграція потребує ретельного планування та аналізу поточних процесів у вашій компанії. Ми проводимо аудит існуючих систем, визначаємо точки інтеграції та можливі конфлікти. На кожному етапі надаємо детальну документацію та проводимо тестування на staging-середовищі перед запуском у production. Наші рішення розроблені з урахуванням найкращих практик індустрії та дозволяють значно знизити операційні витрати.
Наша гарантія якості
Ми беремо на себе повну відповідальність за якість виконаної роботи. Протягом року після завершення проєкту виправляємо будь-які виявлені проблеми абсолютно безкоштовно. Технічна підтримка включає консультації, навчання вашої команди та допомогу при виникненні питань. Кожен проєкт завершується підсумковим звітом з описом реалізованого функціоналу, рекомендаціями щодо оптимізації та планом розвитку системи.
Приклади успішних проєктів
За час роботи ми реалізували інтеграції для компаній різного розміру: від невеликих інтернет-магазинів до великих оптових дистриб'юторів. Кожен проєкт вимагав індивідуального підходу, і ми пишаємося результатом, який значно покращив ефективність роботи наших клієнтів.
Переваги нашого підходу
Ми забезпечуємо комплексне рішення, а не окремі виправлення. Кожен проєкт включає документування, тестування та навчання команди. Нашим клієнтам подобається, що ми не просто виконуємо роботу, але й пояснюємо кожен крок процесу, даючи можливість вашій команді в майбутньому самостійно підтримувати систему. Зі свого боку, ми гарантуємо допомогу протягом року після завершення проєкту.
Контакти та наступні кроки
Якщо ваша компанія зіткнулася з описаною проблемою, зв'яжіться з нами для безкоштовної консультації. Проведемо аналіз вашої системи та запропонуємо оптимальне рішення. Вартість проєкту залежить від складності та обсягу робіт, але для типових рішень ми завжди надаємо точний кошторис на основі попереднього аналізу вимог.







