Конфігурація підміни номерів за джерелами трафіку 1С-Бітрікс
Маркетолог хоче знати, скільки дзвінків приходить з Яндекс.Директу, а скільки з органіки. Якщо на сайті один номер телефону, це неможливо без колтрекінгу. Підміна номерів (dynamic number insertion) — заміна відображуваного номера в залежності від джерела переходу.
Модуль bitrix.seo та UTM-параметри
Бітрікс не має вбудованого колтрекінгу. Інтеграція реалізується двома шляхами: через зовнішні сервіси (CoMagic, Calltouch, Roistat) з їхнім JavaScript-кодом, або через власну реалізацію на базі сесій та UTM-параметрів.
Для власної реалізації джерело трафіку читається з $_GET при першому візиті і зберігається в сесію. Набір параметрів: utm_source, utm_medium, utm_campaign для платного трафіку; gclid для Google Ads; yclid для Яндекс.Директу; fbclid для Facebook.
Обробник збереження джерела в сесію:
AddEventHandler('main', 'OnPageStart', function() {
if (isset($_GET['utm_source']) || isset($_GET['yclid']) || isset($_GET['gclid'])) {
$_SESSION['traffic_source'] = [
'utm_source' => $_GET['utm_source'] ?? '',
'utm_medium' => $_GET['utm_medium'] ?? '',
'utm_campaign' => $_GET['utm_campaign'] ?? '',
'yclid' => $_GET['yclid'] ?? '',
'gclid' => $_GET['gclid'] ?? '',
'referrer' => $_SERVER['HTTP_REFERER'] ?? '',
'timestamp' => time(),
];
}
if (!isset($_SESSION['traffic_source'])) {
$_SESSION['traffic_source'] = [
'referrer' => $_SERVER['HTTP_REFERER'] ?? '',
'direct' => true,
];
}
});
Таблиця відповідності джерел та номерів
Для кожного джерела трафіку призначається окремий телефонний номер. Маппінг зберігається в кастомній таблиці або в настройках компоненту. Структура таблиці:
CREATE TABLE custom_calltracking_numbers (
id SERIAL PRIMARY KEY,
source_key VARCHAR(100) NOT NULL, -- 'yclid', 'gclid', 'utm_source:yandex', ...
phone VARCHAR(30) NOT NULL,
description VARCHAR(255),
active BOOLEAN DEFAULT true
);
Логіка вибору номера:
function getPhoneByTrafficSource(array $source): string {
$default = '+375 (17) 000-00-00';
if (!empty($source['yclid'])) {
return getPhoneFromDb('yclid');
}
if (!empty($source['gclid'])) {
return getPhoneFromDb('gclid');
}
if (!empty($source['utm_source'])) {
return getPhoneFromDb('utm_source:' . $source['utm_source']) ?: $default;
}
if (!empty($source['referrer'])) {
$host = parse_url($source['referrer'], PHP_URL_HOST);
return getPhoneFromDb('referrer:' . $host) ?: $default;
}
return $default;
}
Підміна в шаблоні сайту
Номер телефону в шаблоні (/bitrix/templates/[template]/header.php) замінюється на виклик функції замість хардкоду:
$phone = getPhoneByTrafficSource($_SESSION['traffic_source'] ?? []);
echo '<a href="tel:' . preg_replace('/\D/', '', $phone) . '">' . $phone . '</a>';
Для підміни номерів у вже сформованому HTML (якщо шаблон не під вашим контролем) — обробник події OnEndBufferContent:
AddEventHandler('main', 'OnEndBufferContent', function(&$content) {
$phone = getPhoneByTrafficSource($_SESSION['traffic_source'] ?? []);
$content = str_replace('+375 (17) 000-00-00', $phone, $content);
});
Передача джерела в замовлення
При оформленні замовлення джерело трафіку передається у властивості замовлення або в поле COMMENTS. Це дозволяє у CRM бачити, звідки прийшов кожен покупець.
AddEventHandler('sale', 'OnSaleOrderBeforeSaved', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$source = $_SESSION['traffic_source'] ?? [];
$comment = $order->getField('USER_DESCRIPTION');
$sourceStr = json_encode($source, JSON_UNESCAPED_UNICODE);
$order->setField('MANAGER_NOTES', 'Джерело: ' . $sourceStr);
});
Статистика дзвінків
Для повноцінного аналізу потрібно фіксувати не тільки покази номера, але й факти дзвінків. Зовнішні сервіси колтрекінгу надають webhook при вхідному дзвінку — його можна обробити і записати в кастомну таблицю з привязкою до USER_ID якщо користувач авторизований, або до сесійного ідентифікатора.







