Розробка модуля відгуків та рейтингів 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С-Бітрікс

У Бітрікс є компонент bitrix:catalog.element.vote для голосування та bitrix:forum з прив'язкою до елементів — це те, з чого зазвичай збирають відгуки. Результат очікуваний: форум без модерації, рейтинг без верифікації покупки, відсутність структурованих даних для Schema.org. Повноцінний модуль відгуків — це інша історія: верифіковані відгуки, багатокритеріальний рейтинг, модерація, відповіді продавця, агреговані зірки в мікророзмітці.

Модель даних

Модуль vendor.reviews:

  • b_vendor_review — відгуки: id, entity_type (product/service/company), entity_id, user_id, author_name, author_email, order_id, title, body, pros, cons, rating (1-5), status (pending/approved/rejected/spam), is_verified_purchase, created_at, updated_at
  • b_vendor_review_criteria — критерії оцінки: id, entity_type, name, sort
  • b_vendor_review_rating — оцінки за критеріями: id, review_id, criteria_id, value
  • b_vendor_review_vote — голоси «корисний/некорисний»: id, review_id, user_id, ip, value (1/-1), created_at
  • b_vendor_review_reply — відповіді адміністратора: id, review_id, author_id, body, created_at

Верифікація покупки

Найцінніше у відгуку — позначка «перевірений покупець». Перевіряємо по b_sale_order:

public function isVerifiedPurchase(int $userId, int $productId): bool
{
    // Шукаємо оплачене замовлення цього користувача з даним товаром
    $order = \Bitrix\Sale\Internals\BasketTable::getList([
        'select' => ['ORDER_ID'],
        'filter' => [
            '=PRODUCT_ID' => $productId,
            '=ORDER.USER_ID'    => $userId,
            '=ORDER.PAYED'      => 'Y',
            '=ORDER.CANCELED'   => 'N',
        ],
        'limit' => 1,
    ])->fetch();

    return (bool)$order;
}

При створенні відгуку order_id можна передати явно — тоді перевірка однозначна. Без order_id — перевіряємо по будь-якому оплаченому замовленню з цим товаром.

Модерація

Всі відгуки створюються зі статусом pending і потрапляють у чергу модерації. Можливі два режими:

  • Ручна модерація — модератор схвалює/відхиляє кожен відгук
  • Автосхвалення — відгуки верифікованих покупців публікуються автоматично, решта — в чергу

Фільтр спаму працює через прості евристики: посилання в тілі відгуку, поріг великих літер, дублюючі тексти, стоп-слова. Підозрілі відгуки отримують статус spam.

class SpamDetector
{
    public function check(string $text): SpamResult
    {
        if (preg_match('/https?:\/\//i', $text)) return SpamResult::spam('Посилання заборонені');
        if (similar_text($text, $this->getLastReview($text)) > 80) return SpamResult::spam('Дублікат');
        foreach ($this->stopWords as $word) {
            if (mb_stripos($text, $word) !== false) return SpamResult::suspicious();
        }
        return SpamResult::clean();
    }
}

Багатокритеріальний рейтинг

Для товарів можна задати кілька критеріїв оцінки (наприклад: «Якість», «Відповідність опису», «Швидкість доставки»). Підсумковий рейтинг — середнє по всіх критеріях:

SELECT
    entity_id,
    AVG(rr.value) AS avg_rating,
    COUNT(DISTINCT r.id) AS review_count
FROM b_vendor_review r
JOIN b_vendor_review_rating rr ON rr.review_id = r.id
WHERE r.entity_type = 'product'
  AND r.status = 'approved'
GROUP BY entity_id;

Агреговані дані кешуються тегом review_entity_{entity_id} і скидаються при схваленні нового відгуку.

Schema.org мікророзмітка

Для SEO-ефекту важливо вивести агрегований рейтинг у мікророзмітці:

<div itemscope itemtype="https://schema.org/Product">
  <span itemprop="name">Назва товару</span>
  <div itemprop="aggregateRating" itemscope itemtype="https://schema.org/AggregateRating">
    <span itemprop="ratingValue">4.7</span>
    <span itemprop="reviewCount">143</span>
  </div>
</div>

Компонент vendor:reviews.aggregate генерує цей блок на основі даних з кешу.

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

Користувачі можуть відзначити відгук як «корисний» або «некорисний». Механізм захисту від накрутки:

  • Один голос з однієї IP на добу
  • Авторизовані користувачі — один голос на відгук назавжди
  • Рейтинг корисності впливає на порядок відображення відгуків

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

Етап Термін
ORM-таблиці, модель відгуків 1 день
Верифікація покупки, інтеграція з sale 1 день
Модерація, спам-фільтр 2 дні
Багатокритеріальний рейтинг, агрегація 1 день
Schema.org мікророзмітка 0.5 дня
Голосування за корисність 0.5 дня
Відповіді продавця, сповіщення 1 день
Компоненти для сайту 2 дні
Адміністративний інтерфейс + черга модерації 1 день
Тестування 1 день

Разом: 11 робочих днів. Імпорт відгуків з Яндекс.Маркету або інших майданчиків — додатково 1–2 дні.