Интеграция 1С-Битрикс с Retail Rocket
Мы настраиваем полную интеграцию 1С-Битрикс с платформой Retail Rocket для интернет-магазинов, которым важна персонализация опыта покупателей. Retail Rocket — ведущая платформа персонализации для e-commerce: рекомендации товаров, персональные email-рассылки, поведенческая аналитика, повышающая конверсию на 20-40%. Техническая интеграция состоит из двух частей: передача данных о поведении пользователей через JavaScript-трекер и синхронизация каталога товаров через XML-фид с учётом остатков и цен.
Наша команда за 7 лет работы с Битрикс реализовала более 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="RUB" 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>RUB</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. Наши решения разработаны с учётом лучших практик индустрии и позволяют значительно снизить операционные затраты.
Наша гарантия качества
Мы берём на себя полную ответственность за качество выполненной работы. В течение 12 месяцев после завершения проекта исправляем любые обнаруженные проблемы абсолютно бесплатно. Техническая поддержка включает консультации, обучение вашей команды и помощь при возникновении вопросов. Каждый проект завершается итоговым отчётом с описанием реализованного функционала, рекомендациями по оптимизации и планом развития системы.
Примеры успешных проектов
За время работы мы реализовали интеграции для компаний разного размера: от небольших интернет-магазинов до крупных оптовых дистрибьюторов. Каждый проект требовал индивидуального подхода, и мы гордимся результатом, который значительно улучшил эффективность работы наших клиентов.
Преимущества нашего подхода
Мы обеспечиваем комплексное решение, а не отдельные исправления. Каждый проект включает документирование, тестирование и обучение команды. Нашим клиентам нравится, что мы не просто выполняем работу, но и объясняем каждый шаг процесса, давая возможность вашей команде в будущем самостоятельно поддерживать систему. Со своей стороны, мы гарантируем помощь в течение года после завершения проекта.
Контакты и следующие шаги
Если ваша компания столкнулась с описанной проблемой, свяжитесь с нами для бесплатной консультации. Проведём анализ вашей системы и предложим оптимальное решение. Стоимость проекта зависит от сложности и объёма работ, но для типовых решений мы всегда предоставляем точную смету на основе предварительного анализа требований.







