תארו לעצמכם: מגיע מבקר חדש, שיעור הנטישה גבוה, למרות שהקטלוג שלכם מוצק. חקרנו את הנושא — כולם קיבלו את אותו בלוק "מבצעים". מבקר שחיפש שרתים ראה הנחות על צעצועי ילדים. בפרויקט אחד, שיעור הנטישה הגיע ל־75% בעמודי קטלוג, למרות שהקטלוג היה בנוי היטב. הניתוח גילה שכל המבקרים ראו את אותו בלוק "חדש בחנות", שלא תאם את תחומי העניין שלהם. לאחר יישום פרסונליזציה התנהגותית, הנטישה ירדה ל־45% וההמרה עלתה ב־30%. אסביר לכם איך עשינו את זה. אתם צריכים פרסונליזציה התנהגותית של תוכן ב־1C-Bitrix, אבל בלי פלטפורמות חיצוניות. זה פתיר עם Bitrix בלבד, בתנאי שאחסון הפרופיל מתוכנן נכון.
פרסונליזציה ב־Bitrix מסתכמת לרוב במיקוד גיאוגרפי — "להציג באנר ממוסקבה". זה לא פרסונליזציה. פרסונליזציה התנהגותית פירושה: משתמש שצפה במחשבים ניידים שלוש פעמים רואה בעמוד הבית בלוק של מחשבים ניידים, לא באנר פרסומי אקראי. יישום זה ב־Bitrix ללא פלטפורמות חיצוניות אפשרי, אבל דורש הבנה היכן לאחסן את הפרופיל ההתנהגותי.
למה ליישם פרסונליזציה בצד של Bitrix במקום דרך SaaS?
שירותים חיצוניים (Custobar, RetailRocket) עולים 200–500 דולר לחודש ולא תמיד משתלבים לעומק. פרסונליזציה ביתית על Bitrix:
- ללא מנוי חודשי: חיסכון של עד 5.4–7.8 אלף דולר בשנה.
- הנתונים נשארים על השרת שלכם.
- שליטה מלאה בלוגיקה.
- ניתן לחבר להחלפת 1C ולתהליכים עסקיים.
החיסרון היחיד הוא שצריך לכתוב את הקוד פעם אחת. אבל אנחנו כבר עשינו את זה ליותר מ־50 פרויקטים. לדוגמה, לקוח אחד (חנות אונליין למוצרי אלקטרוניקה) הוריד את עלויות הפרסונליזציה מ־5.4–7.8 אלף דולר בשנה ל־1.4–1.9 אלף דולר בשנה — שיפור עלות פי 4 — על ידי מעבר לפתרון ביתי. זה הביא לחיסכון שנתי של 4–5.8 אלף דולר עבור אותו לקוח. פתרון ביתי זול פי 4 מ־SaaS.
אחסון הפרופיל ההתנהגותי של המשתמש
למשתמשים מחוברים, ניתן לאחסן נתונים ב־b_user_field (שדות UF) או בטבלה נפרדת. שדות UF נוחים אבל מוגבלים — הם לא מיועדים לבלובי JSON עם היסטוריית צפיות. הפתרון הטוב ביותר הוא טבלה מותאמת אישית, למשל b_user_behavior:
CREATE TABLE b_user_behavior ( ID SERIAL PRIMARY KEY, USER_ID INT NOT NULL, SESSION_ID VARCHAR(64), EVENT_TYPE VARCHAR(32) NOT NULL, -- 'view', 'cart', 'search' ENTITY_TYPE VARCHAR(32), -- 'catalog_element', 'section' ENTITY_ID INT, VALUE TEXT, DATE_CREATE TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_ubehav_user ON b_user_behavior(USER_ID, EVENT_TYPE, DATE_CREATE DESC); למשתמשים אנונימיים — קישור דרך CREATE TABLE b_user_behavior ( ID SERIAL PRIMARY KEY, USER_ID INT NOT NULL, SESSION_ID VARCHAR(64), EVENT_TYPE VARCHAR(32) NOT NULL, -- 'view', 'cart', 'search' ENTITY_TYPE VARCHAR(32), -- 'catalog_element', 'section' ENTITY_ID INT, VALUE TEXT, DATE_CREATE TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_ubehav_user ON b_user_behavior(USER_ID, EVENT_TYPE, DATE_CREATE DESC); . בעת התחברות, פרופיל הסשן מתמזג עם פרופיל המשתמש דרך מטפל האירועים SESSION_ID.
השוואת שיטות אחסון פרופיל
| שיטה | גמישות | מהירות | מורכבות תחזוקה |
|---|---|---|---|
| שדות UF של משתמש | נמוכה (ללא JSON) | בינונית | נמוכה |
טבלה מותאמת אישית OnAfterUserAuthorize |
גבוהה (כל סכמה) | גבוהה (אינדקסים) | בינונית (נדרשות הגירות) |
| Redis / Memcached | גבוהה | גבוהה מאוד | גבוהה (דורש הגדרה) |
הטבלה המותאמת אישית מציעה את האיזון האופטימלי ל־90% מהפרויקטים.
שלבי היישום
| שלב | משך | תוצרים |
|---|---|---|
| ניתוח | 1–2 ימים | מסמך דרישות |
| עיצוב | 1–2 ימים | דיאגרמת ER, מפרט API |
| יישום | 3–5 ימים | קוד מקור |
| בדיקות | 1–2 ימים | דוח בדיקות |
| השקה | יום אחד | אתר חי, תיעוד |
רישום אירועים דרך AJAX ללא פגיעה בביצועים
כל פעולה משמעותית (צפייה בעמוד מוצר, הוספה לסל, שאילתת חיפוש) נרשמת באופן אסינכרוני. בתבנית b_user_behavior בסוף העמוד:
fetch('/local/ajax/behavior.php', { method: 'POST', headers: {'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest'}, body: JSON.stringify({ event: 'view', entity_type: 'catalog_element', entity_id: <?= (int)$arResult['ID'] ?>, session_id: '<?= session_id() ?>' }) }); הקובץ catalog.element הוא בקר D7 (fetch('/local/ajax/behavior.php', { method: 'POST', headers: {'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest'}, body: JSON.stringify({ event: 'view', entity_type: 'catalog_element', entity_id: <?= (int)$arResult['ID'] ?>, session_id: '<?= session_id() ?>' }) }); ) שמאמת וכותב ל־behavior.php. חשוב: הכתיבה היא לא חוסמת — אין פעולות סינכרוניות ב-thread הראשי.
שימוש בפרופיל להצגת תוכן
רכיב עמוד הבית קורא את הפרופיל ובוחר תוכן. לוגיקת העדיפויות:
- קטגוריות עם מספר הצפיות הגבוה ביותר ב־30 הימים האחרונים.
- מוצרים שנוספו לסל אבל לא נרכשו.
- שאילתות חיפוש ללא רכישה.
$userId = $GLOBALS['USER']->GetID(); $topCategories = []; if ($userId) { $res = $DB->Query(" SELECT ENTITY_ID, COUNT(*) as cnt FROM b_user_behavior WHERE USER_ID = {$userId} AND EVENT_TYPE = 'view' AND ENTITY_TYPE = 'section' AND DATE_CREATE > NOW() - INTERVAL 30 DAY GROUP BY ENTITY_ID ORDER BY cnt DESC LIMIT 3 "); while ($row = $res->Fetch()) { $topCategories[] = (int)$row['ENTITY_ID']; } } לאחר מכן נקרא הרכיב Bitrix\Main\Engine\Controller עם פילטר לסקציות אלה.
הרחבת הפרופיל בפרויקט בעומס גבוה
אם האתר מקבל מאות אלפי פעולות בשעה, כתיבה ישירה למסד הנתונים עלולה ליצור עומס. המלצות:
- Buffering: איסוף אירועים ב־Redis/Memcached ושטיפה בקבוצות דרך סוכן כל דקה.
- למשתמשים אנונימיים, TTL של הסשן צריך להיות לא יותר מ־24 שעות.
- אינדקס על
b_user_behaviorהוא חובה.
הגדרה שלב אחר שלב של סוכן הניקוי:
צרו סוכן עם מרווח של שעה. במתודה $userId = $GLOBALS['USER']->GetID(); $topCategories = []; if ($userId) { $res = $DB->Query(" SELECT ENTITY_ID, COUNT(*) as cnt FROM b_user_behavior WHERE USER_ID = {$userId} AND EVENT_TYPE = 'view' AND ENTITY_TYPE = 'section' AND DATE_CREATE > NOW() - INTERVAL 30 DAY GROUP BY ENTITY_ID ORDER BY cnt DESC LIMIT 3 "); while ($row = $res->Fetch()) { $topCategories[] = (int)$row['ENTITY_ID']; } } , בצעו SQL: bitrix:catalog.section. למשתמשים אנונימיים בנוסף: USER_ID + EVENT_TYPE + DATE_CREATE.
שלבי היישום
הטבלה הקודמת מראה את כל ציר הזמן של הפרויקט: 7–12 ימים. העלות מחושבת באופן אישי לאחר ניתוח האתר שלכם, בדרך כלל סביב 1.5–2 אלף דולר.
מה כלול בעבודה
אנחנו מספקים:
- קוד מקור של המודול (בקר התנהגותי, סוכן ניקוי, רכיב תצוגה).
- הגירת SQL ליצירת טבלאות ואינדקסים.
- תיעוד על הוספת אירועים חדשים ומדריך למנהל.
- הדרכה לעורכים (שעה אחת).
- חודש תמיכה לאחר ההשקה כולל תיקוני באגים וכיוונון ביצועים.
הניסיון שלנו: מעל 10 שנים במערכת האקולוגית של Bitrix ו־50+ פרויקטים עם פרסונליזציה. אנחנו מבטיחים תוצאות על סמך המתודולוגיה המוכחת שלנו. צרו קשר להערכת פרויקט — נכין הצעה תוך יום אחד. הזמינו התקנת פרסונליזציה במפתח פתוח וראו צמיחה בהמרות תוך שבועיים בלבד. קבלו ייעוץ לפרויקט שלכם עוד היום.
האירוע OnAfterUserAuthorize מתואר בתיעוד של 1C-Bitrix: OnAfterUserAuthorize.
בלוק תוצרים
- תיעוד (מדריך PDF)
- גישה לקוד מקור (דרך Git)
- הדרכה של שעה אחת
- 30 ימי תמיכה בדוא"ל







