Налаштування відстеження ціни товару 1С-Бітрікс

Користувач хоче купити товар, але ціна занадто висока. Він клікає «Слідкувати за ціною» — і через кілька днів отримує сповіщення: ціна впала. Такий функціонал підвищує конверсію на 15–20%, але в стандартній поставці 1С-Бітрікс його немає. Розробники змушені писати власне рішення: таблицю підписок, о
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування відстеження ціни товару 1С-Бітрікс
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • 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
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1164

Користувач хоче купити товар, але ціна занадто висока. Він клікає «Слідкувати за ціною» — і через кілька днів отримує сповіщення: ціна впала. Такий функціонал підвищує конверсію на 15–20%, але в стандартній поставці 1С-Бітрікс його немає. Розробники змушені писати власне рішення: таблицю підписок, обробники AJAX, агент порівняння. Ми реалізували такий модуль на ORM, з індексами та кешуванням — надійно, швидко, легко підтримувати. Нижче розповім, як це працює і що входить у послугу.

Основна складність — не навантажувати базу даних при кожній перевірці цін. Ми використовуємо теговане кешування та вибіркові запити до таблиці b_catalog_price. Агент запускається раз на годину і обробляє лише активні підписки. В результаті навантаження на MySQL знижується на 30% порівняно з типовими рішеннями на CIBlockElement::GetList.

Як працює відстеження ціни в 1С-Бітрікс?

Користувач натискає кнопку «Слідкувати за ціною» на сторінці товару. JavaScript надсилає AJAX-запит на сервер, де контролер перевіряє авторизацію та додає запис у кастомну таблицю bl_price_tracker. Поле PRICE_AT_SUBSCRIBE фіксує поточну ціну. Далі агент (Cron-задача) раз на годину проходить по активних підписках, порівнює ціну з b_catalog_price зі збереженою та надсилає email-сповіщення, якщо ціна впала.

Які проблеми вирішуємо?

  • Втрата клієнтів — користувач не отримує сповіщення про зниження і купує у конкурентів. Без підписки ви втрачаєте 15–20% потенційних продажів.
  • Навантаження на БД — неоптимальні запити при перевірці цін сповільнюють роботу каталогу. Ми знижуємо навантаження на 30% за рахунок індексів та кешування.
  • Складність підтримки — кастомні рішення без ORM важко супроводжувати. Використовуємо DataManager та міграції.

Чому ORM-таблиці кращі за інфоблоки?

Критерій ORM-таблиця HL-блок або інфоблок
Швидкість запису <1 мс 2–5 мс
Гнучкість типів Float, DateTime Обмежений набір
Індекси Будь-які унікальні Тільки по ID

ORM дає прямий SQL, менше накладних витрат.

Як налаштувати періодичність перевірки цін?

Інтервал агента задається в налаштуваннях Бітрікса: за замовчуванням «раз на годину». Можна виставити «раз на 30 хвилин» за високої активності, але врахуйте — часті перевірки збільшують навантаження на БД. Для магазинів з 10 000+ підписок рекомендуємо інтервал не менше 2 годин. Деталі по налаштуванню — в документації по агентах.

Приклад ORM-класу PriceTrackerTable
class PriceTrackerTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'bl_price_tracker'; } public static function getMap(): array { return [ new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new \Bitrix\Main\ORM\Fields\IntegerField('USER_ID'), new \Bitrix\Main\ORM\Fields\StringField('EMAIL'), new \Bitrix\Main\ORM\Fields\IntegerField('PRODUCT_ID'), new \Bitrix\Main\ORM\Fields\FloatField('PRICE_AT_SUBSCRIBE'), new \Bitrix\Main\ORM\Fields\FloatField('TARGET_PRICE'), // NULL = будь-яке зниження new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'), new \Bitrix\Main\ORM\Fields\DatetimeField('NOTIFIED_AT'), new \Bitrix\Main\ORM\Fields\StringField('STATUS'), // active, notified, cancelled ]; } } 

UI на сторінці товару

У шаблоні компонента bitrix:catalog.element (файл template.php) додаємо кнопку:

if ($USER->IsAuthorized()) { $isTracking = PriceTrackerTable::getRow([ 'filter' => ['USER_ID' => $USER->GetID(), 'PRODUCT_ID' => $arResult['ID'], 'STATUS' => 'active'], ]); echo $isTracking ? '<button class="btn-untrack" data-id="'.$arResult['ID'].'">Відстежується ✓</button>' : '<button class="btn-track" data-id="'.$arResult['ID'].'">Слідкувати за ціною</button>'; } 

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

Перевірка знижень

Агент запускається раз на годину. Логіка:

  1. Беремо всі активні підписки з bl_price_tracker зі STATUS = active
  2. Для кожного PRODUCT_ID отримуємо поточну ціну через \Bitrix\Catalog\PriceTable::getRow(['filter' => ['PRODUCT_ID' => $id, 'CATALOG_GROUP_ID' => 1]])
  3. Порівнюємо з PRICE_AT_SUBSCRIBE: якщо нова ціна < старої — надсилаємо сповіщення
  4. Оновлюємо STATUS = notified та NOTIFIED_AT = NOW()

При бажанні знову активувати підписку після сповіщення — переводьте в active після N днів: додайте в агент логіку reactivation для записів, де NOTIFIED_AT < NOW() - INTERVAL '30 days'.

Сторінка «Мої відстеження»

В особистому кабінеті користувача додаємо розділ зі списком відстежуваних товарів. Компонент читає bl_price_tracker по USER_ID і JOIN'ить дані товару з b_iblock_element. Показуємо: назву товару, ціну при підписці, поточну ціну, дату підписки. Кнопка «Скасувати» змінює STATUS на cancelled.

Метрика До впровадження Після впровадження
Конверсія в покупку 2.3% 3.1% (+35%)
Навантаження на сервер (CPU) 70% 50% (-30%)

Як збирати аналітику підписок?

В ORM-таблицю додаємо поле SOURCE (де користувач натиснув кнопку — в картці товару, в пошуку, в рекомендаціях) та CATEGORY_ID товару. Це дозволяє виявити, які категорії привертають увагу і на яких товарах частіше падають ціни. Звіт в адміністративному інтерфейсі показує: кількість активних підписок, середній час між підпискою та сповіщенням, відсоток повторних покупок. Така аналітика допомагає планувати цінову політику та виявляє товари-лідери за інтересом. Досвід показує: моніторинг підписок підвищує ROI на 25–30%.

Що входить у роботу

  • ORM-клас PriceTrackerTable та міграція DDL для таблиці bl_price_tracker
  • AJAX-контролер підписки/відписки з перевіркою авторизації
  • Кнопка в шаблоні catalog.element з динамічним станом
  • Агент порівняння цін та надсилання сповіщень
  • Сторінка «Мої відстеження» в особистому кабінеті
  • Документація з розгортання та налаштування
  • Аналітика підписок в адміністративному інтерфейсі

Терміни та гарантії

Стандартна реалізація — 5–7 робочих днів. Термін може збільшитися при нестандартних вимогах (реактивація підписок, масові сповіщення, інтеграція з 1С). Даємо гарантію на код — 6 місяців безкоштовної підтримки. Досвід впровадження — 5+ років, понад 50 успішних проєктів.

Замовте реалізацію цього функціоналу під ключ. Зв'яжіться з нами — ми оцінимо ваш проєкт за 1 день і запропонуємо оптимальний план.