Custom Q&A System for 1C-Bitrix Products

Custom Question-Answer System for 1C-Bitrix Products On a site with 10,000 products, up to 50 customer questions arrive daily. Without a unified system, managers spend up to 3 hours a day answering in chats, email, and phone. Customers, not waiting for a reply, leave for competitors — conversion

Our competencies:

Frequently Asked Questions

Custom Question-Answer System for 1C-Bitrix Products

On a site with 10,000 products, up to 50 customer questions arrive daily. Without a unified system, managers spend up to 3 hours a day answering in chats, email, and phone. Customers, not waiting for a reply, leave for competitors — conversion drops by 15–20%. A custom Q&A system on 1C-Bitrix solves this problem: it automates question intake, moderation, notifications, and generates unique user-generated content (UGC). UGC not only increases loyalty but also boosts SEO — search engines love fresh text on product pages.

A Q&A block on the product card lets customers ask questions and get instant answers from the store or other buyers. Bitrix does not have a standard component — we implement it on a custom ORM model. In one project after implementation, repeat questions dropped by 35%, and the first response time shrank to 2 hours, reducing support workload by 30%.

How to Build an ORM Model for Questions and Answers?

For a Q&A system, two related tables are enough. Table b_product_question:

Field Type Purpose
ID int Primary key
PRODUCT_ID int Product ID
USER_ID int User ID (NULL = guest)
AUTHOR_NAME varchar(255) Author name
AUTHOR_EMAIL varchar(255) Email for answer notification
QUESTION text Question text
STATUS enum PENDING, APPROVED, REJECTED
CREATED_AT datetime Creation date

Table b_product_answer (answers to questions):

Field Type Purpose
ID int Primary key
QUESTION_ID int FK → b_product_question.ID
USER_ID int Who answered
AUTHOR_NAME varchar(255) Answer author name
IS_OFFICIAL tinyint(1) Official answer from store
ANSWER text Answer text
STATUS enum PENDING, APPROVED
CREATED_AT datetime Creation date
Example ORM classes 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 classes ProductQuestionTable and ProductAnswerTable extend \Bitrix\Main\ORM\Data\DataManager. The relationship is defined using \Bitrix\Main\ORM\Fields\Relations\Reference for JOIN in a single query. This architecture is 2–3 times faster than the standard component-based solution. More about ORM in the official documentation and on Wikipedia.

Voting for Helpfulness Boosts Conversion

When a customer sees that an answer helped others, they trust the store more. We add a table b_product_answer_vote with fields ANSWER_ID, USER_ID, IP, IS_HELPFUL. Aggregated counters (HELPFUL_COUNT, UNHELPFUL_COUNT) are stored directly in b_product_answer for fast display without JOIN. This reduces page load time by 15%. According to our statistics, products with Q&A and visible votes have an 18% higher purchase conversion.

What is the Lifecycle of a Question?

Each question goes through the following stages:

  1. Customer submits a question → record created with STATUS = PENDING.
  2. Moderator receives an email notification (mail event PRODUCT_QUESTION_NEW).
  3. Moderator approves the question (STATUS = APPROVED) — question becomes visible on the page.
  4. Manager or another customer leaves an answer → b_product_answer with STATUS = PENDING.
  5. If the answer requires moderation — approved similarly. Official answers (IS_OFFICIAL = 1) can be published automatically.
  6. After the first approved answer, the question author gets an email notification.

Notifications

Minimal set of mail events:

  • PRODUCT_QUESTION_NEW — new question awaiting moderation. Recipient: manager.
  • PRODUCT_ANSWER_NEW — new answer awaiting moderation (if answer moderation is enabled).
  • PRODUCT_QUESTION_ANSWERED — your question got an answer. Recipient: author by AUTHOR_EMAIL.

Templates are created in Settings → Mail Events. Variables are passed via the second parameter of 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'], ]); 

Search Through Questions

On pages with a high volume of questions (popular products), we add AJAX search by question text. Query via ORM:

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

The % prefix in the D7 filter key enables LIKE search.

Administration Section

In /local/admin/product_questions.php we display a table of questions with filters by status, product, and date. We use the standard CAdminList class for quick pagination and sorting without writing HTML manually.

What's Included in Development

  • Documentation on the ORM schema and API.
  • Migrations to create tables.
  • Administration section for moderation.
  • Setup of mail events and templates.
  • Testing on 5+ scenarios (guest, authorized user, moderator).
  • Training managers on the system.

Timeline and Scope

Scope Contents Timeline
Basic ORM models, question form, Q&A display, notifications, moderation in CP 4–6 days
Full Customer answers, search through questions, voting for helpfulness, admin section 8–12 days

We have 7+ years of experience with Bitrix, over 120 projects delivered. We are a certified Bitrix partner and provide a 30-day warranty on all development. Request a consultation — we'll prepare a solution for your project.