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:
- Customer submits a question → record created with
STATUS = PENDING. - Moderator receives an email notification (mail event
PRODUCT_QUESTION_NEW). - Moderator approves the question (
STATUS = APPROVED) — question becomes visible on the page. - Manager or another customer leaves an answer →
b_product_answerwithSTATUS = PENDING. - If the answer requires moderation — approved similarly. Official answers (
IS_OFFICIAL = 1) can be published automatically. - 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 byAUTHOR_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.

