Налаштування QR-кодів для маркетингових акцій у 1С-Bitrix
QR-коди для акцій — це не просто посилання у квадратику. Маркетинговий QR розв'язує конкретну задачу: пов'язати офлайн-точку дотику (упаковка, листівка, банер, вітрина) з онлайн-дією (застосування купону, реєстрація в програмі лояльності, участь у розіграші). Ключове відмінність від товарного QR — аналітика: хто, коли, де сканував.
Архітектура маркетингових QR
Маркетинговий QR-код вказує не напрямку на сторінку акції, а на проміжний редиректор з аналітикою. Схема:
QR → https://shop.ua/promo/qr/?c=SUMMER25&src=package_tea → (traking) → /catalog/sale/
Параметри:
-
c— код акції (привязан до купону або сценарію) -
src— джерело розміщення (упаковка, листівка, банер) -
mid— ID конкретного матеріалу (номер партії листівок)
Такий підхід дає аналітику без змін URL фінальної сторінки.
Зберігання маркетингових QR у Bitrix
Для управління маркетинговими QR створюйте окремий інфоблок або таблицю через ORM:
class MarketingQrTable extends \Bitrix\Main\ORM\Data\DataManager {
public static function getTableName(): string {
return 'custom_marketing_qr';
}
public static function getMap(): array {
return [
new Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
new Fields\StringField('CODE'), // Унікальний код QR
new Fields\StringField('NAME'), // Назва акції
new Fields\StringField('TARGET_URL'), // Куди редиректимо
new Fields\StringField('SOURCE'), // Тип джерела
new Fields\DatetimeField('ACTIVE_FROM'),
new Fields\DatetimeField('ACTIVE_TO'),
new Fields\IntegerField('SCAN_COUNT'), // Лічильник сканувань
new Fields\BooleanField('IS_ACTIVE'),
];
}
}
Редиректор з трекингом
Контролер обробляє перехід по QR:
class QrRedirectController extends \Bitrix\Main\Engine\Controller {
public function trackAction(string $code, string $src = '', string $mid = ''): \Bitrix\Main\Engine\Response\Redirect {
$qr = MarketingQrTable::getList([
'filter' => ['=CODE' => $code, '=IS_ACTIVE' => true],
'limit' => 1,
])->fetch();
if (!$qr) {
return new \Bitrix\Main\Engine\Response\Redirect('/404/');
}
// Перевіряємо період активності
$now = new \Bitrix\Main\Type\DateTime();
if ($qr['ACTIVE_FROM'] && $qr['ACTIVE_FROM'] > $now) {
return new \Bitrix\Main\Engine\Response\Redirect('/promo/soon/');
}
if ($qr['ACTIVE_TO'] && $qr['ACTIVE_TO'] < $now) {
return new \Bitrix\Main\Engine\Response\Redirect('/promo/expired/');
}
// Логуємо сканування
QrScanLogTable::add([
'QR_ID' => $qr['ID'],
'SOURCE' => $src,
'MATERIAL_ID' => $mid,
'IP' => $_SERVER['REMOTE_ADDR'],
'USER_AGENT' => $_SERVER['HTTP_USER_AGENT'],
'SCANNED_AT' => $now,
'USER_ID' => $GLOBALS['USER']->GetID() ?: null,
]);
// Інкремент лічильника
MarketingQrTable::update($qr['ID'], [
'SCAN_COUNT' => $qr['SCAN_COUNT'] + 1,
]);
// Якщо є купон — застосовуємо до сесії
if (!empty($qr['COUPON_CODE'])) {
\Bitrix\Main\Application::getInstance()->getSession()->set('QR_COUPON', $qr['COUPON_CODE']);
}
return new \Bitrix\Main\Engine\Response\Redirect($qr['TARGET_URL']);
}
}
Інтеграція з купонами Bitrix
Потужний сценарій: користувач сканує QR з упаковки → потрапляє в магазин → купон застосовується автоматично. Купон попередньо створюється в модулі «Маркетинг» Bitrix (sale.discount):
// Застосування купону з сесії при відкритті кошику
AddEventHandler('sale', 'OnSaleBasketBeforeSaved', function(&$params) {
$session = \Bitrix\Main\Application::getInstance()->getSession();
$qrCoupon = $session->get('QR_COUPON');
if ($qrCoupon) {
\CSaleDiscount::ApplyCoupon($qrCoupon);
$session->remove('QR_COUPON');
}
});
Генерація партії QR для друку
Для офлайн-матеріалів генеруйте пакет QR-кодів:
function generateQrBatch(string $campaignCode, string $source, int $count): string {
$zipPath = '/tmp/qr-' . $campaignCode . '.zip';
$zip = new ZipArchive();
$zip->open($zipPath, ZipArchive::CREATE);
for ($i = 1; $i <= $count; $i++) {
$mid = str_pad($i, 5, '0', STR_PAD_LEFT);
$url = 'https://' . SITE_SERVER_NAME . '/promo/qr/?c=' . $campaignCode . '&src=' . $source . '&mid=' . $mid;
$result = \Endroid\QrCode\Builder\Builder::create()
->data($url)
->size(600)
->build();
$zip->addFromString('qr-' . $mid . '.png', $result->getString());
}
$zip->close();
return $zipPath;
}
Аналітика в адміністративній частині
З логу сканувань будуються звіти:
- Кількість сканувань по джерелам (який носій працює краще)
- Конверсія з скану в покупку
- Час дня і день тижня активності
- Геоспрямування (по IP)
Дані виводяться в custom-звіт в адміністративній частині або виконуються до Google Data Studio.
Сроки виконання
| Обсяг робіт | Строк |
|---|---|
| Редиректор + трекинг + базова генерація | 1–2 дні |
| Інтеграція з купонами + сесійна логіка | +1 день |
| Пакетна генерація + аналітика | +1–2 дні |
Маркетинговий QR без трекингу — гроші на вітер. З трекингом — керований інструмент з вимірюваним ROI.







