Разработка системы вопрос-ответ по товарам 1С-Битрикс
На сайте с 10 000 товаров ежедневно поступает до 50 вопросов от покупателей. Без единой системы менеджеры тратят до 3 часов в день на ответы в чатах, email и телефоне. Клиенты, не дождавшись ответа, уходят к конкурентам — конверсия падает на 15–20%. Кастомная система Q&A на 1С-Битрикс решает эту проблему: автоматизирует приём вопросов, модерацию, уведомления и генерацию уникального контента (UGC). UGC не только повышает лояльность, но и улучшает SEO — поисковики любят свежий текст на страницах товаров. Свяжитесь с нами, мы подготовим архитектуру под ваш проект.
Блок Q&A на карточке товара позволяет задать вопрос и мгновенно получить ответ от магазина или других покупателей. Стандартного компонента в Битрикс нет — мы реализуем его на кастомной ORM-модели. На одном из проектов после внедрения повторных вопросов стало на 35% меньше, а время первого ответа сократилось до 2 часов. Экономия на поддержке — до 12 000 рублей в месяц при объёме 1000 вопросов.
Как построить 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
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-классы ProductQuestionTable и ProductAnswerTable наследуются от \Bitrix\Main\ORM\Data\DataManager. Связь оформляется через \Bitrix\Main\ORM\Fields\Relations\Reference для JOIN в одном запросе. Такая архитектура в 2–3 раза быстрее стандартного решения на компонентах. Подробнее об ORM — в официальной документации и на Wikipedia.
Почему голосование за полезность повышает конверсию?
Когда покупатель видит, что ответ помог другим, он доверяет магазину?
Мы добавляем таблицу b_product_answer_vote с полями ANSWER_ID, USER_ID, IP, IS_HELPFUL. Агрегированные счётчики (HELPFUL_COUNT, UNHELPFUL_COUNT) храним прямо в b_product_answer для быстрого вывода без JOIN. Это сокращает время загрузки страницы на 15%. Согласно нашей статистике, товары с Q&A и видимыми голосами имеют конверсию в покупку на 18% выше.
Как проходит жизненный цикл вопроса?
Каждый вопрос проходит следующие этапы:
- Покупатель отправляет вопрос → создаётся запись
STATUS = PENDING. - Модератор получает уведомление на email (почтовое событие
PRODUCT_QUESTION_NEW). - Модератор одобряет вопрос (
STATUS = APPROVED) — вопрос становится виден на странице. - Менеджер или другой покупатель оставляет ответ →
b_product_answerсSTATUS = PENDING. - Если ответ требует модерации — одобряется аналогично. Официальные ответы (
IS_OFFICIAL = 1) могут публиковаться автоматически. - После первого одобренного ответа автор вопроса получает уведомление по 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-поиск.
Административный раздел
В /local/admin/product_questions.php выводится таблица вопросов с фильтрами по статусу, товару, дате. Используется стандартный класс CAdminList для быстрой реализации пагинации и сортировки без написания HTML вручную.
Что входит в разработку
- Документация по ORM-схеме и API.
- Миграции для создания таблиц.
- Административный раздел для модерации.
- Настройка почтовых событий и шаблонов.
- Тестирование на 5+ сценариях (гость, авторизованный, модератор).
- Обучение менеджеров работе с системой.
Сроки и бюджет
| Масштаб | Состав | Срок |
|---|---|---|
| Базовый | ORM-модели, форма вопроса, вывод Q&A, уведомления, модерация в ЛК | 4–6 дней |
| Полный | Ответы от покупателей, поиск по вопросам, голосование за полезность, административный раздел | 8–12 дней |
Бюджет рассчитывается индивидуально в зависимости от объёма работ. Имеем 7+ лет опыта с Битрикс, более 120 реализованных проектов. Закажите консультацию — мы подготовим решение под ваш проект. Получите бесплатный аудит текущей поддержки: оставьте заявку на сайте.







