Налаштування заміни номерів за джерелами трафіку 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С-Бітрікс

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