Налаштування статичного колтрекінгу на 1С-Бітрікс
Статичний колтрекінг — це коли кожному рекламному каналу постійно призначений окремий номер телефону: один для Яндекс.Директ, інший для Google Ads, третій — для офлайн-реклами. Підміни в реальному часі немає — номер жорстко прив'язаний до каналу і не змінюється між відвідувачами.
Це дешевше за динамічний (менше номерів), але точність нижча: атрибуція йде до рівня каналу, а не до ключового слова або оголошення. Для бізнесу з невеликою кількістю каналів і високою вартістю дзвінка (B2B, медицина, нерухомість) — виправдане рішення.
Схема організації
Беремо N номерів у провайдера — за кількістю каналів, що відстежуються. Кожен номер переадресовує на основний. Система колтрекінгу фіксує, на який із статичних номерів зателефонували, і записує це в статистику.
| Канал | Номер | Переадресація |
|---|---|---|
| Яндекс.Директ | +7 (495) 111-11-11 | → основний |
| Google Ads | +7 (495) 222-22-22 | → основний |
| ВКонтакте | +7 (495) 333-33-33 | → основний |
| Офлайн / візитки | +7 (495) 444-44-44 | → основний |
| Сайт (дефолт) | +7 (495) 555-55-55 | → основний |
Реалізація на стороні Бітрікс
Логіка проста: дивимося utm_source з GET-параметра або з cookie, вибираємо відповідний номер із конфігу, підставляємо в шаблон.
Зберігання маппінгу каналів і номерів — у налаштуваннях модуля:
// /local/modules/local.calltracking/lib/Config.php
namespace Local\Calltracking;
class Config
{
public static function getPhoneMap(): array
{
return [
'yandex' => [
'display' => '+7 (495) 111-11-11',
'href' => 'tel:+74951111111',
],
'google' => [
'display' => '+7 (495) 222-22-22',
'href' => 'tel:+74952222222',
],
'vk' => [
'display' => '+7 (495) 333-33-33',
'href' => 'tel:+74953333333',
],
'offline' => [
'display' => '+7 (495) 444-44-44',
'href' => 'tel:+74954444444',
],
'default' => [
'display' => '+7 (495) 555-55-55',
'href' => 'tel:+74955555555',
],
];
}
}
Визначення каналу та зберігання в cookie:
// /local/php_interface/init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'main',
'OnProlog',
function () {
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
// Пріоритет 1: GET-параметр utm_source (новий візит)
$utmSource = $request->get('utm_source');
if ($utmSource) {
$utmSource = preg_replace('/[^a-z0-9_-]/i', '', strtolower($utmSource));
setcookie('ct_source', $utmSource, time() + 86400 * 30, '/');
$_COOKIE['ct_source'] = $utmSource;
}
// Пріоритет 2: збережений cookie
if (!$utmSource) {
$utmSource = $_COOKIE['ct_source'] ?? 'default';
}
$GLOBALS['CT_CURRENT_SOURCE'] = $utmSource;
}
);
Хелпер для отримання телефону в шаблоні:
namespace Local\Calltracking;
class PhoneResolver
{
public static function getCurrentPhone(): array
{
$source = $GLOBALS['CT_CURRENT_SOURCE'] ?? 'default';
$map = Config::getPhoneMap();
return $map[$source] ?? $map['default'];
}
}
У шаблоні шапки сайту:
<?php
$phone = \Local\Calltracking\PhoneResolver::getCurrentPhone();
?>
<a href="<?= htmlspecialchars($phone['href']) ?>"
class="header-phone"
data-source="<?= htmlspecialchars($GLOBALS['CT_CURRENT_SOURCE'] ?? 'default') ?>">
<?= htmlspecialchars($phone['display']) ?>
</a>
Проблема з кешем Бітрікс
Статичний колтрекінг через PHP-логіку несумісний із повним кешуванням сторінок. Телефон — персоналізовані дані (залежать від cookie відвідувача), тому сторінка з телефоном кешуватися не повинна.
Варіанти вирішення:
Варіант 1: Підміна через JS — в HTML ставимо дефолтний номер, підміну за cookie робимо клієнтським скриптом після завантаження сторінки. Кеш не ламається.
document.addEventListener('DOMContentLoaded', function () {
const phoneMap = {
'yandex': {display: '+7 (495) 111-11-11', href: 'tel:+74951111111'},
'google': {display: '+7 (495) 222-22-22', href: 'tel:+74952222222'},
// ...
'default': {display: '+7 (495) 555-55-55', href: 'tel:+74955555555'},
};
const source = getCookie('ct_source') || 'default';
const phone = phoneMap[source] || phoneMap['default'];
const el = document.querySelector('.header-phone');
if (el) {
el.textContent = phone.display;
el.href = phone.href;
}
});
Варіант 2: Винести телефон із кешу через $component->arResult з вимкненим кешем для конкретного блоку. У шаблоні компонента шапки:
// У component.php шапки
$this->SetResultCacheKeys([]); // Вимикаємо кеш для компонента
Варіант 3: ESI (Edge Side Includes) — якщо використовуєте Varnish або nginx з модулем ESI. Телефон виноситься в окремий некешований ESI-фрагмент.
Для більшості проектів оптимальний Варіант 1: кеш сторінок зберігається, заміна телефону відбувається за мілісекунди, користувач практично не помічає зміни.
Інтеграція з провайдером колтрекінгу
Навіть при статичному колтрекінгу провайдер потрібен для запису дзвінків, статистики та переадресації. Налаштування на стороні провайдера (Callibri, CoMagic, Mango):
- Орендуємо потрібну кількість номерів
- Для кожного номера — налаштовуємо правило: «якщо дзвінок на номер X, вважати джерелом Y»
- Переадресація з підмінного номера на основний робочий
- (Опціонально) Запис розмов
З Бітрікс жодної API-взаємодії з провайдером при статиці не потрібно — вся логіка визначення каналу на стороні провайдера.
Склад робіт
- Оренда підмінних номерів у провайдера, налаштування переадресації
- Розробка PHP-модуля визначення каналу та зберігання в cookie
- Реалізація JS-підміни телефону (кеш-сумісний варіант)
- Адаптація шаблонів компонентів (шапка, підвал, спливаючі форми)
- Налаштування маппінгу каналів через адміністративний інтерфейс
Терміни: повне налаштування під 4–6 каналів — 3–7 робочих днів.







