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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування статичного колтрекінгу на 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

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

  • 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С-Бітрікс

Статичний колтрекінг — це коли кожному рекламному каналу постійно призначений окремий номер телефону: один для Яндекс.Директ, інший для 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):

  1. Орендуємо потрібну кількість номерів
  2. Для кожного номера — налаштовуємо правило: «якщо дзвінок на номер X, вважати джерелом Y»
  3. Переадресація з підмінного номера на основний робочий
  4. (Опціонально) Запис розмов

З Бітрікс жодної API-взаємодії з провайдером при статиці не потрібно — вся логіка визначення каналу на стороні провайдера.

Склад робіт

  • Оренда підмінних номерів у провайдера, налаштування переадресації
  • Розробка PHP-модуля визначення каналу та зберігання в cookie
  • Реалізація JS-підміни телефону (кеш-сумісний варіант)
  • Адаптація шаблонів компонентів (шапка, підвал, спливаючі форми)
  • Налаштування маппінгу каналів через адміністративний інтерфейс

Терміни: повне налаштування під 4–6 каналів — 3–7 робочих днів.