Custom Q&A System for 1C-Bitrix Products

Customers ask questions about products, but answers get lost in chats and emails—some clients switch to competitors. We develop a custom Q&A system on 1C-Bitrix that gathers all questions in a single block on the product page, automates moderation and notifications. Our team delivers the project turnkey—from designing the ORM model to implementation and ongoing support—so your website works reliably and brings value.

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.