התאמה אישית של מכירות: Retail Rocket עבור 1C-Bitrix
אנו מגדירים אינטגרציה מקיפה בין 1C-Bitrix לבין פלטפורמת ההתאמה האישית Retail Rocket עבור חנויות מקוונות שמעדיפות חוויית לקוח. Retail Rocket היא פלטפורמת התאמה אישית מובילה למסחר אלקטרוני: המלצות מוצרים, קמפיינים מותאמים אישית בדוא"ל, וניתוח התנהגותי שמעלה את שיעור ההמרה ב-20–40%. האינטגרציה הטכנית מורכבת משני חלקים: העברת נתוני התנהגות משתמשים באמצעות JavaScript tracker וסנכרון קטלוג המוצרים דרך XML feed עם עדכוני מלאי ומחירים.
לצוות שלנו יש ניסיון של למעלה מ-7 שנים עם Bitrix וביצענו יותר מ-15 אינטגרציות עם Retail Rocket עבור חנויות במגוון פרופילים—מבוטיקות נישתיות ועד מרקטפלייסים גדולים עם מיליוני SKU. אנו מבטיחים פעילות יציבה תחת עומס גבוה, עיכוב מינימלי בסנכרון נתונים (פחות מ-15 דקות), ותפקוד תקין של בלוקי ההמלצות בכל דפי האתר. התוצאה היא עלייה בערך הסל הממוצע וברכישות חוזרות.
כיצד נוצר XML Product Feed?
Retail Rocket מקבלת feed מוצרים בפורמט Yandex.Market YML או בפורמט XML משלה. הדרך הפשוטה ביותר היא להשתמש ב-YML feed הקיים מ-Bitrix—אם כבר יש לכם אחד, הוא יעבוד. feed מותאם עם שדות נוספים (SKU, מותג, צבע) מאפשר segmentation עדין יותר. הנה דוגמה מינימלית ב-PHP:
// Минимальная структура для 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; } ה-feed נשמר במטמון למשך 2–4 שעות ומתעדכן בעת invalidation של שינוי מוצר. כתובת ה-feed מסופקת בלוח הבקרה של Retail Rocket.
כיצד מותקן JavaScript Tracker?
Retail Rocket מספקת ספריית JS (// Минимальная структура для 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; } ) שנכללת בכל הדפים. בתבנית Bitrix—ב-rrpushdown או דרך footer.php:
// Базовый код 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); אירוע צפייה בדף מוצר. בתבנית addExternalJs:
// template.php $productId = $arResult['ID']; ?> <script> retailrocket.push(['setAccountId', '<?= RETAIL_ROCKET_ACCOUNT_ID ?>']); retailrocket.push(['track', 'view', { productId: '<?= $productId ?>' }]); </script> אירוע הוספה לסל. ב-handler של הוספה ב-AJAX:
// При успешном добавлении товара в корзину retailrocket.push(['track', 'addToBasket', { productId: String(productId), quantity: qty }]); אירוע תשלום. בדף אישור ההזמנה או דרך handler עבור // Базовый код 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); :
// В шаблоне страницы подтверждения заказа $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 רואות שיעורי המרה גבוהים פי 2-3 מאלה עם המלצות בסיסיות. באתר מסחר אלקטרוני טיפוסי, התאמה אישית מעלה את שיעורי ההמרה ב-15–25%, וערך הסל הממוצע עולה ב-10–15%. עם מדדים אלה, חנות עם מחזור שנתי של $500K יכולה לייצר יותר מ-$50K בהכנסות נוספות בכל שנה.
בלוקי המלצות
לאחר הגדרה בלוח הבקרה של 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—הם טוענים מזהי מוצרים ומבקשים נתוני תצוגה מהקטלוג שלכם דרך JS.
התחברות משתמשים וקישור דוא"ל
כדי לקשר התנהגות לפרופיל משתמש, אנו מעבירים את הדוא"ל בעת התחברות:
// В обработчике успешной авторизации if ($USER->IsAuthorized()) { $email = $USER->GetEmail(); ?> <script> retailrocket.push(['setEmail', '<?= htmlspecialchars($email) ?>', function() { console.log('RR email set'); } ]); </script> <?php } ?> לוח זמנים ליישום
| היקף | רכיבים | משך זמן |
|---|---|---|
| אינטגרציה בסיסית (feed + tracker) | feed + 3 אירועים + הכללת סקריפט | 1–2 ימים |
| אינטגרציה מלאה (כל האירועים + בלוקי המלצות) | + ווידג'טים + אירוע דוא"ל + בדיקת A/B | 3–5 ימים |
| קמפיינים מותאמים אישית בדוא"ל | + תרחישי טריגר דרך Retail Rocket Email | הוספת 2–3 ימים |
מה כלול באינטגרציה
- תיעוד: מדריך טכני מפורט והתייחסות API עבור הצוות שלכם.
- גישה: פרטי התחברות ללוח הבקרה של Retail Rocket וכתובות feed.
- הדרכה: עד שעתיים של הדרכה מקוונת עבור המפתחים והמשווקים שלכם.
- תמיכה: תמיכה למשך 12 חודשים לאחר ההשקה עם תיקוני באגים חינם ועדכונים מינוריים.
- תוצרים: קוד מקור מלא ליצירת feed, אינטגרציית tracker וווידג'טים להמלצות.
התהליך שלנו
- איסוף נתונים: איסוף הגדרות feed קיימות, מבנה האתר ויעדים עסקיים.
- ביקורת וניתוח: סקירת הגדרות Bitrix הנוכחיות, זיהוי נקודות אינטגרציה וקונפליקטים פוטנציאליים.
- עיצוב: הגדרת סכמת feed, מיפוי אירועים ומיקום ווידג'טים.
- הערכה: מתן היקף מדויק ולוח זמנים לאחר הניתוח—עלויות נקבעות לפי פרויקט.
- פיתוח: יישום יצירת feed, התקנת tracker ואינטגרציית ווידג'טים.
- בדיקות: אימות בסביבת staging עם נתוני מוצר אמיתיים וסימולציות תנועה.
- השקה: פריסה לסביבת production וניטור ביצועים ראשוניים.
אנו מספקים תיעוד מלא והדרכה לצוות שלכם, ומבטיחים שתוכלו לתחזק את המערכת באופן עצמאי. כל פרויקט כולל תקופת תמיכה של 12 חודשים—כל בעיה שנמצאה במהלך שנה זו מתוקנת ללא עלות.
אתגרים טיפוסיים באינטגרציה
- נתוני מוצר לא מלאים: שדות SKU, מחיר או קטגוריה חסרים ב-feed מובילים להמלצות שגויות. אנו אוכפים שלמות נתונים עם כללי ולידציה.
- קונפליקטים ב-JavaScript: סקריפטים מותאמים שמפריעים ל-tracker של Retail Rocket. אנו מבודדים את קוד ה-tracker ובודקים בכל סוגי הדפים.
- בעיות מטמון: feed מיושן או דפים שמורים במטמון שמציגים המלצות לא עדכניות. אנו מגדירים invalidation נכון של מטמון בעדכוני מוצרים.
התיעוד של Retail Rocket ממליץ לכלול את כל מאפייני המוצר לדיוק מיטבי של ההמלצות.
רוצים להתאים אישית את החנות שלכם עם Retail Rocket? השאירו בקשה לייעוץ חינם—ננתח את המערכת שלכם ונציע את הפתרון הטוב ביותר. התמחור נקבע לאחר הערכה מפורטת של הדרישות שלכם.







