Настройка подмены номеров по источникам трафика 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка подмены номеров по источникам трафика 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • 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С-Битрикс

Маркетолог хочет знать, сколько звонков приходит с Яндекс.Директа, а сколько с органики. Если на сайте один номер телефона, это невозможно без коллтрекинга. Подмена номеров (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 если пользователь авторизован, или к сессионному идентификатору.