מערכת שאלות ותשובות מותאמת אישית למוצרי 1C-Bitrix

לקוחות שואלים שאלות על מוצרים, אבל התשובות הולכות לאיבוד בצ'אטים ובמיילים—חלק מהלקוחות עוברים למתחרים. אנחנו מפתחים מערכת שאלות ותשובות מותאמת אישית על 1C-Bitrix, שאוספת את כל השאלות בבלוק אחד בעמוד המוצר, ומבצעת אוטומציה של ניהול והודעות. הצוות שלנו מספק את הפרויקט במפתח מלא—מתכנון מודל ORM ועד הטמעה ותמיכה שוטפת—כך שהאתר שלך עובד בצורה אמינה ומניב ערך.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
מערכת שאלות ותשובות מותאמת אישית למוצרי 1C-Bitrix
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

מערכת שאלות-תשובות מותאמת אישית למוצרי 1C-Bitrix

באתר עם 10,000 מוצרים, מגיעות עד 50 שאלות לקוחות ביום. ללא מערכת אחידה, מנהלים מבזבזים עד 3 שעות ביום במענה בצ'אטים, בדוא"ל ובטלפון. לקוחות, שלא ממתינים לתשובה, עוזבים למתחרים — ההמרה יורדת ב-15–20%. מערכת שאלות-תשובות מותאמת אישית על 1C-Bitrix פותרת בעיה זו: היא הופכת את קליטת השאלות, המודרציה, ההתראות לאוטומטיות, ומייצרת תוכן משתמש ייחודי (UGC). UGC לא רק מגביר נאמנות אלא גם משפר SEO — מנועי חיפוש אוהבים טקסט חדש בדפי מוצרים.

בלוק שאלות-תשובות בכרטיס המוצר מאפשר ללקוחות לשאול שאלות ולקבל תשובות מיידיות מהחנות או מקונים אחרים. ל-Bitrix אין רכיב סטנדרטי — אנו מיישמים אותו על מודל ORM מותאם אישית. בפרויקט אחד לאחר היישום, שאלות חוזרות ירדו ב-35%, וזמן התגובה הראשונה הצטמצם לשעתיים, מה שהפחית את עומס התמיכה ב-30%.

איך לבנות מודל ORM לשאלות ותשובות?

למערכת שאלות-תשובות, מספיקות שתי טבלאות מקושרות. טבלה b_product_question:

שדה סוג מטרה
ID int מפתח ראשי
PRODUCT_ID int מזהה מוצר
USER_ID int מזהה משתמש (NULL = אורח)
AUTHOR_NAME varchar(255) שם המחבר
AUTHOR_EMAIL varchar(255) דוא"ל להתראת תשובה
QUESTION text טקסט השאלה
STATUS enum PENDING, APPROVED, REJECTED
CREATED_AT datetime תאריך יצירה

טבלה b_product_answer (תשובות לשאלות):

שדה סוג מטרה
ID int מפתח ראשי
QUESTION_ID int FK → b_product_question.ID
USER_ID int מי ענה
AUTHOR_NAME varchar(255) שם מחבר התשובה
IS_OFFICIAL tinyint(1) תשובה רשמית מהחנות
ANSWER text טקסט התשובה
STATUS enum PENDING, APPROVED
CREATED_AT datetime תאריך יצירה
דוגמה למחלקות ORM ProductQuestionTable
namespace Your\Module;

use Bitrix\Main\ORM\Data\DataManager;
use Bitrix\Main\ORM\Fields\IntegerField;
use Bitrix\Main\ORM\Fields\TextField;
use Bitrix\Main\ORM\Fields\EnumField;
use Bitrix\Main\ORM\Fields\DatetimeField;
use Bitrix\Main\ORM\Fields\Relations\Reference;
use Bitrix\Main\ORM\Query\Join;

class ProductQuestionTable extends DataManager
{
    public static function getTableName()
    {
        return 'b_product_question';
    }

    public static function getMap()
    {
        return [
            new IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
            new IntegerField('PRODUCT_ID', ['required' => true]),
            new IntegerField('USER_ID'),
            new TextField('AUTHOR_NAME'),
            new TextField('AUTHOR_EMAIL'),
            new TextField('QUESTION', ['required' => true]),
            new EnumField('STATUS', ['values' => ['PENDING', 'APPROVED', 'REJECTED'], 'default' => 'PENDING']),
            new DatetimeField('CREATED_AT', ['default' => function () {
                return new \Bitrix\Main\Type\DateTime();
            }]),
        ];
    }
}

מחלקות ORM namespace Your\Module; use Bitrix\Main\ORM\Data\DataManager; use Bitrix\Main\ORM\Fields\IntegerField; use Bitrix\Main\ORM\Fields\TextField; use Bitrix\Main\ORM\Fields\EnumField; use Bitrix\Main\ORM\Fields\DatetimeField; use Bitrix\Main\ORM\Fields\Relations\Reference; use Bitrix\Main\ORM\Query\Join; class ProductQuestionTable extends DataManager { public static function getTableName() { return 'b_product_question'; } public static function getMap() { return [ new IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new IntegerField('PRODUCT_ID', ['required' => true]), new IntegerField('USER_ID'), new TextField('AUTHOR_NAME'), new TextField('AUTHOR_EMAIL'), new TextField('QUESTION', ['required' => true]), new EnumField('STATUS', ['values' => ['PENDING', 'APPROVED', 'REJECTED'], 'default' => 'PENDING']), new DatetimeField('CREATED_AT', ['default' => function () { return new \Bitrix\Main\Type\DateTime(); }]), ]; } } ו-ProductQuestionTable מרחיבות את ProductAnswerTable. הקשר מוגדר באמצעות \Bitrix\Main\ORM\Data\DataManager עבור JOIN בשאילתה אחת. ארכיטקטורה זו מהירה פי 2–3 מהפתרון הסטנדרטי מבוסס הרכיבים. מידע נוסף על ORM ב-תיעוד רשמי וב-ויקיפדיה.

הצבעה על מועילות מגבירה המרה

כאשר לקוח רואה שתשובה עזרה לאחרים, הוא סומך יותר על החנות. אנו מוסיפים טבלה \Bitrix\Main\ORM\Fields\Relations\Reference עם שדות b_product_answer_vote, ANSWER_ID, USER_ID, IP. מוני צבירה (IS_HELPFUL, HELPFUL_COUNT) נשמרים ישירות ב-UNHELPFUL_COUNT להצגה מהירה ללא JOIN. זה מפחית את זמן טעינת הדף ב-15%. לפי הסטטיסטיקות שלנו, למוצרים עם שאלות-תשובות והצבעות גלויות יש המרת רכישה גבוהה ב-18%.

מהו מחזור החיים של שאלה?

כל שאלה עוברת את השלבים הבאים:

  1. הלקוח שולח שאלה → נוצר רשומה עם b_product_answer.
  2. המודרטור מקבל התראת דוא"ל (אירוע דוא"ל STATUS = PENDING).
  3. המודרטור מאשר את השאלה (PRODUCT_QUESTION_NEW) — השאלה הופכת גלויה בדף.
  4. מנהל או לקוח אחר משאיר תשובה → STATUS = APPROVED עם b_product_answer.
  5. אם התשובה דורשת מודרציה — מאושרת באופן דומה. תשובות רשמיות (STATUS = PENDING) יכולות להתפרסם אוטומטית.
  6. לאחר התשובה המאושרת הראשונה, מחבר השאלה מקבל התראת דוא"ל.

התראות

קבוצה מינימלית של אירועי דוא"ל:

  • IS_OFFICIAL = 1 — שאלה חדשה ממתינה למודרציה. נמען: מנהל.
  • PRODUCT_QUESTION_NEW — תשובה חדשה ממתינה למודרציה (אם מודרציית תשובות מופעלת).
  • PRODUCT_ANSWER_NEW — השאלה שלך קיבלה תשובה. נמען: מחבר לפי PRODUCT_QUESTION_ANSWERED.

תבניות נוצרות ב-הגדרות → אירועי דוא"ל. משתנים מועברים דרך הפרמטר השני של AUTHOR_EMAIL:

\CEvent::Send('PRODUCT_QUESTION_ANSWERED', SITE_ID, [
    'QUESTION_TEXT' => $question['QUESTION'],
    'ANSWER_TEXT' => $answer['ANSWER'],
    'PRODUCT_NAME' => $productName,
    'PRODUCT_URL' => $productUrl,
    'AUTHOR_EMAIL' => $question['AUTHOR_EMAIL'],
    'AUTHOR_NAME' => $question['AUTHOR_NAME'],
]);

חיפוש בשאלות

בדפים עם נפח שאלות גבוה (מוצרים פופולריים), אנו מוסיפים חיפוש AJAX לפי טקסט השאלה. שאילתה דרך ORM:

ProductQuestionTable::getList([
    'filter' => [
        '=PRODUCT_ID' => $productId,
        '=STATUS' => 'APPROVED',
        '%QUESTION' => $searchQuery,
    ],
    'select' => ['ID', 'AUTHOR_NAME', 'QUESTION', 'CREATED_AT'],
    'order' => ['CREATED_AT' => 'DESC'],
    'limit' => 10,
]);

הקידומת CEvent::Send() במפתח הסינון של D7 מאפשרת חיפוש LIKE.

קטע ניהול

ב-\CEvent::Send('PRODUCT_QUESTION_ANSWERED', SITE_ID, [ 'QUESTION_TEXT' => $question['QUESTION'], 'ANSWER_TEXT' => $answer['ANSWER'], 'PRODUCT_NAME' => $productName, 'PRODUCT_URL' => $productUrl, 'AUTHOR_EMAIL' => $question['AUTHOR_EMAIL'], 'AUTHOR_NAME' => $question['AUTHOR_NAME'], ]); אנו מציגים טבלת שאלות עם מסננים לפי סטטוס, מוצר ותאריך. אנו משתמשים במחלקה הסטנדרטית ProductQuestionTable::getList([ 'filter' => [ '=PRODUCT_ID' => $productId, '=STATUS' => 'APPROVED', '%QUESTION' => $searchQuery, ], 'select' => ['ID', 'AUTHOR_NAME', 'QUESTION', 'CREATED_AT'], 'order' => ['CREATED_AT' => 'DESC'], 'limit' => 10, ]); עבור דפדוף ומיון מהירים ללא כתיבת HTML ידנית.

מה כלול בפיתוח

  • תיעוד על סכמת ORM ו-API.
  • מיגרציות ליצירת טבלאות.
  • קטע ניהול למודרציה.
  • הגדרת אירועי דוא"ל ותבניות.
  • בדיקות על 5+ תרחישים (אורח, משתמש רשום, מודרטור).
  • הכשרת מנהלים על המערכת.

לוח זמנים והיקף

היקף תוכן לוח זמנים
בסיסי מודלי ORM, טופס שאלה, הצגת שאלות-תשובות, התראות, מודרציה בלוח הניהול 4–6 ימים
מלא תשובות לקוחות, חיפוש בשאלות, הצבעה על מועילות, קטע ניהול 8–12 ימים

יש לנו ניסיון של 7+ שנים עם Bitrix, מעל 120 פרויקטים שהושלמו. אנו שותף Bitrix מוסמך ומספקים אחריות ל-30 יום על כל הפיתוח. בקשו ייעוץ — נכין פתרון לפרויקט שלכם.