Настройка статического коллтрекинга на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка статического коллтрекинга на 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка статического коллтрекинга на 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 рабочих дней.