Розробка системи питання-відповідь по товарах 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка системи питання-відповідь по товарах 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка системи питання-відповідь по товарам у 1С-Бітрикс

Блок «Запитання та відповіді» на сторінці товара дозволяє потенційним покупцям задати уточнюючи запитання та отримати відповідь від менеджера або інших покупців. Це знижує кількість звернень в підтримку та працює як UGC-контент для SEO. У Бітрикс стандартного компонента для такої функціональності нема — він будується на користувацькій ORM-моделі.

Структура даних

Для системи Q&A достатньо двох пов'язаних таблиць. Таблиця b_product_question:

Поле Тип Призначення
ID int Первинний ключ
PRODUCT_ID int ID товара
USER_ID int ID користувача (NULL = гість)
AUTHOR_NAME varchar(255) Ім'я автора запитання
AUTHOR_EMAIL varchar(255) Email для сповіщення про відповідь
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 та ProductAnswerTable наслідуються від \Bitrix\Main\ORM\Data\DataManager. Зв'язок оформляється через \Bitrix\Main\ORM\Fields\Relations\Reference для JOIN в одному запиті.

Життєвий цикл запитання

Кожне запитання проходить наступні етапи:

  1. Покупець відправляє запитання → створюється запис STATUS = PENDING.
  2. Модератор отримує сповіщення на email (поштова подія PRODUCT_QUESTION_NEW).
  3. Модератор одобрює запитання (STATUS = APPROVED) — запитання стає видимим на сторінці.
  4. Менеджер або інший покупець залишає відповідь → b_product_answer з STATUS = PENDING.
  5. Якщо відповідь потребує модерації — одобрюється аналогічно. Офіційні відповіді (IS_OFFICIAL = 1) можуть публікуватися автоматично.
  6. Після першої одобреної відповіді автор запитання отримує сповіщення по email.

Сповіщення

Мінімальний набір поштових подій:

  • PRODUCT_QUESTION_NEW — нове запитання чекає на модерацію. Одержувач: менеджер.
  • PRODUCT_ANSWER_NEW — нова відповідь чекає на модерацію (якщо включена модерація відповідей).
  • PRODUCT_QUESTION_ANSWERED — ваше запитання отримало відповідь. Одержувач: автор запитання по AUTHOR_EMAIL.

Шаблони створюються в Параметри → Поштові подій. Змінні передаються через другий параметр CEvent::Send():

\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,
]);

Символ % перед ключем у фільтрі D7 задає LIKE-пошук.

Голосування за корисність відповіді

Додатковий шар — «Чи була відповідь корисною?» (так/ні). Це невелика окрема таблиця b_product_answer_vote з полями ANSWER_ID, USER_ID, IP, IS_HELPFUL. Агреговані лічильники (HELPFUL_COUNT, UNHELPFUL_COUNT) зберігаються прямо в b_product_answer для швидкого виводу без JOIN.

Адміністративний розділ

В /local/admin/product_questions.php виводиться таблиця запитань з фільтрами по статусу, товару, даті. Використовується стандартний клас CAdminList для швидкої реалізації пагінації та сортування без написання HTML вручну.

Терміни розробки

Масштаб Склад Термін
Базовий ORM-моделі, форма запитання, вивід Q&A, сповіщення, модерація в ЛК 4–6 днів
Повний Відповіді від покупців, пошук по запитаннях, голосування за корисність, адміністративний розділ 8–12 днів