Настройка телефонии

Колтрекинг: подмена номера и источники звонков

Колтрекинг для маркетинговой атрибуции: динамическая подмена номера (DNI) на сайте, отдельные номера для офлайн-каналов, окно атрибуции, источник в истории звонков и отчет.

11 минДля администратора

Колтрекинг: подмена номера и источники звонков

Колтрекинг (Call Tracking) показывает, из какого источника пришел каждый входящий звонок. Работает в двух режимах, которые можно использовать одновременно:

  1. Динамическая подмена номера на сайте (DNI, Dynamic Number Insertion). Платформа показывает каждому посетителю сайта отдельный номер из вашего пула и затем связывает входящий звонок с источником трафика этого посетителя. Так вы видите не просто «звонков было 40», а из какой рекламы, кампании и ключевого слова пришел конкретный звонок.
  2. Номера офлайн-источников. За каналом вне сайта закрепляется отдельный номер: один для Instagram, другой для Telegram, третий для баннера или визитки. Подмены здесь нет, номер постоянный, но каждый звонок на него сразу помечается вашим источником.

К звонку привязываются UTM-метки, идентификаторы кликов рекламных систем (gclid, yclid, fbclid), roistat, реферер, страница входа и текущая страница, а также устройство и браузер посетителя.

Что такое колтрекинг и зачем он нужен

Обычная схема «один номер на все» не дает понять, какая реклама приносит звонки: все вызовы выглядят одинаково. Колтрекинг решает это так.

Для трафика с сайта:

  1. посетитель открывает ваш сайт, скрипт собирает данные о его источнике;
  2. посетителю показывается персональный номер из пула;
  3. посетитель звонит на этот номер;
  4. входящий вызов сопоставляется с сессией посетителя, и в отчете появляется источник звонка.

Для мест вне сайта:

  1. вы выделяете отдельный номер под канал и указываете его источник, например instagram;
  2. этот номер публикуется только в своем канале;
  3. любой звонок на него попадает в отчет с этим источником, без скриптов и сессий.

В результате вы можете честно сравнить каналы и кампании по реальным звонкам, а не по кликам.

Как включить колтрекинг

Фича выключена по умолчанию у всех тенантов. Включить ее может только платформенный администратор 4phone (роль SUPERADMIN или ADMIN) галкой Call Tracking в карточке тенанта, в разделе «Основная информация».

Важно

Владелец тенанта не может включить колтрекинг самостоятельно. На странице Колтрекинг (/dashboard/call-tracking) он видит баннер со статусом (включено или выключено) и подсказку, к кому обратиться для активации. Если фича выключена, сначала запросите ее включение у поддержки 4phone.

После включения вся настройка выполняется тенантом самостоятельно в кабинете на странице Колтрекинг (/dashboard/call-tracking).

Из чего состоит настройка

Колтрекинг строится из трех сущностей:

  1. Сайт. Описывает площадку, на которой работает подмена: домен, CSS-селектор номера для замены, fallback-номер, время жизни назначения (TTL) и окно атрибуции в днях.
  2. Пул номеров. Группа номеров DID. Пул нужен и для подмены на сайте, и как контейнер для номеров офлайн-источников.
  3. Номера в пуле. Свободные номера DID, добавленные в пул. У каждого номера есть режим:
Режим Как работает Для чего
Динамический Платформа выдает номер посетителям сайта по очереди вместо статичного номера Реклама и трафик с сайта
Офлайн-источник Номер закреплен за одним каналом и никогда не выдается посетителям, у него свои источник, канал и кампания Instagram, Telegram, баннеры, визитки, справочники

Важно

Один номер DID может быть только в одном пуле и только в одном режиме. Номер офлайн-источника полностью выведен из ротации: посетителю сайта он не достанется даже в момент, когда все динамические номера заняты.

Сайты, пулы и номера можно изменять и удалять на той же странице. Удаление всегда просит подтверждение, потому что затрагивает работу подмены:

Что удаляете Что происходит
Сайт Подмена номера на этом сайте прекращается, визиты посетителей удаляются. Пулы сохраняются и показываются как «Без сайта», их можно привязать к другому сайту
Пул Номера выходят из трекинга и снова доступны для добавления в другой пул
Номер Номер DID остается у вас и продолжает принимать звонки, но перестает участвовать в определении источника

Важно

Источники уже состоявшихся звонков не пропадают: отчет и история звонков сохраняют источник, канал и кампанию даже после удаления сайта, пула или номера. Удаление меняет только дальнейшую работу подмены.

Пошаговая настройка

Порядок настройки колтрекинга

  1. убедитесь, что платформенный администратор включил Call Tracking для тенанта;
  2. создайте сайт и задайте его параметры;
  3. создайте пул номеров;
  4. добавьте в пул свободные номера DID: динамические для подмены на сайте, отдельные для офлайн-источников;
  5. установите скрипт колтрекинга на свой сайт;
  6. сделайте тестовый звонок и проверьте отчет.

Шаг 1. Создайте сайт

На странице Колтрекинг добавьте сайт и заполните параметры:

Параметр Что задает
Название Понятное имя площадки в кабинете, обязательное поле
Домен Площадка, на которой будет работать подмена номера, обязательное поле
CSS-селектор Элемент на странице, в котором отображается номер и который скрипт заменит на персональный
Fallback-номер Номер, который покажется, если в пуле нет свободных номеров или колтрекинг выключен
TTL назначения На сколько персональный номер закрепляется за посетителем
Окно атрибуции Сколько дней входящий звонок еще связывается с прошлым визитом посетителя

Совет

CSS-селектор должен указывать на тот элемент, где у вас на сайте написан телефон. Скрипт находит этот элемент и подставляет в него персональный номер вместо статичного.

Домен вводится без протокола и путей: example.uz или shop.example.uz. Префикс https:// и www. платформа отрезает сама, а пустое или некорректное значение не примет. Название и домен обязательны: сайт без них создать нельзя.

Шаг 2. Создайте пул номеров

Пул это набор номеров, привязанный к сайту. Дайте пулу понятное имя: оно же подставляется как название кампании, когда посетитель набрал динамический номер вручную, без сессии (см. раздел про типы атрибуции).

Шаг 3. Добавьте номера DID в пул

При добавлении номера выберите его режим.

Динамический номер участвует в подмене на сайте. Чем больше одновременных посетителей вы ожидаете, тем больше таких номеров нужно в пуле, потому что один номер в один момент закреплен максимум за одним посетителем.

Проверьте

Динамических номеров в пуле должно хватать на пиковое число одновременных посетителей. Если все они заняты, новому посетителю покажется fallback-номер, и его источник не будет отслежен.

Номер офлайн-источника закрепляется за каналом вне сайта. Для него заполняются собственные метки:

Поле Обязательное Пример Что показывает в отчете
Источник Да instagram, telegram, banner Канал, откуда пришел звонок
Канал Нет social, offline, qr Тип трафика, для группировки нескольких источников
Кампания Нет autumn-sale, bilbord-chilanzar Конкретное размещение или акция

Заполняйте эти поля так же, как UTM-метки на сайте: тогда офлайн-каналы и реклама встанут в один отчет и их можно будет сравнивать между собой. Источник обязателен, без него номер офлайн-источника создать нельзя, иначе звонок было бы не к чему отнести.

Совет

Выделяйте отдельный номер под каждое место, где вы публикуете телефон. Один номер на Instagram и Telegram сразу лишит вас возможности понять, какая из площадок приносит звонки.

Режим уже добавленного номера можно поменять: при переключении на динамический метки источника очищаются, потому что номер возвращается в общую ротацию.

Шаг 4. Установите скрипт на сайт

На странице Колтрекинг в кабинете есть готовый сниппет для копирования. Вставьте его на все страницы сайта перед закрывающим тегом </body>:

<script async src="https://api.4phone.uz/api/call-tracking/script.js?siteId=ВАШ_ID"></script>

Здесь siteId это идентификатор вашего сайта в колтрекинге. В кабинете сниппет уже содержит правильный siteId, поэтому проще скопировать его оттуда.

Блок Сайты на странице Колтрекинг со сниппетом скрипта
Блок Сайты: готовый сниппет скрипта с вашим siteId, а также формы создания сайтов и пулов и добавления номеров DID.

Как работает подмена номера

Когда посетитель открывает страницу, скрипт собирает данные о его источнике (UTM-метки, идентификаторы кликов, реферер, страницу входа, устройство и браузер) и запрашивает у платформы персональный номер. Затем происходит следующее:

  1. Закрепление номера. Свободный динамический номер из пула закрепляется за сессией посетителя на время TTL. Номера выдаются по приоритету. Номера офлайн-источников в этой выдаче не участвуют.
  2. Повторные визиты. Если тот же посетитель снова обращается за номером, ему отдается тот же номер, а его TTL продлевается.
  3. Продление сессии. Пока вкладка открыта, скрипт примерно раз в 90 секунд продлевает сессию (keepalive). На скрытой вкладке продление ставится на паузу и возобновляется, когда посетитель вернется.
  4. Защита от гонок. Выдача номера атомарна: один и тот же номер не будет одновременно показан двум разным посетителям.

Важно

Скрипт получает номер через resolve.js (метод JSONP, который не требует настройки CORS) или через запрос POST /resolve. Подходящий способ выбирается автоматически, отдельно настраивать ничего не нужно.

Особые ситуации:

  1. Все номера заняты. Если в пуле не осталось свободных динамических номеров, посетителю отдается fallback-номер (ситуация POOL_OVERFLOW). Такой звонок не получит источник.
  2. Колтрекинг выключен. Если фича отключена, скрипт отдает статичный fallback-номер (TRACKING_DISABLED) и ничего не записывает.

Окно атрибуции и типы атрибуции

Когда на номер пула приходит входящий звонок, платформа решает, как его атрибутировать. Логика построена так, чтобы обычные, не связанные с рекламой звонки не засорялись ложным источником.

Тип Когда возникает Что попадает в отчет
Офлайн-источник Звонок на номер, помеченный как номер офлайн-источника Источник, канал и кампания, заданные вами при настройке номера. Если кампания не задана, подставляется имя пула. Сессия не нужна, точность максимальная
DYNAMIC Звонок на персональный номер сопоставился с последним назначением этого номера в пределах окна атрибуции Источник из сессии посетителя (UTM, клики, кампания, ключевое слово, страница)
STATIC Звонок на динамический номер активного пула, но сессии посетителя нет (номер набрали вручную или сохранили ранее) Кампания равна имени пула, источник не выдумывается
Нет атрибуции Совпадения нет, и номер не входит в активный пул Запись об источнике не создается

Для трафика с сайта атрибуция работает по принципу last-touch (последнее касание). Звонок связывается с последним назначением номера, даже если TTL уже истек, но визит был в пределах окна атрибуции. По умолчанию окно равно 30 дням и настраивается в диапазоне от 1 до 180 дней. При совпадении назначение помечается сконвертированным.

Номера офлайн-источников от окна атрибуции не зависят: у них нет визита, с которым нужно сопоставлять звонок, поэтому источник берется прямо из настроек номера.

Важно

Если звонок пришел на номер, который не входит в активный пул, и не совпал ни с одной сессией, источник не записывается. Это сделано специально: обычные не-трекинговые звонки не должны получать выдуманный источник.

Какие источники поддерживаются

К звонку привязывается широкий набор параметров атрибуции:

Группа Параметры
UTM-метки source, medium, campaign, content, term
Идентификаторы кликов gclid (Google), yclid (Yandex), fbclid (Facebook), roistat
Контекст визита Реферер, страница входа, текущая страница
Устройство Тип устройства, браузер
Свое Произвольные custom-параметры для сквозной аналитики

Совет

Custom-параметры удобны для сквозной аналитики: вы можете передавать собственные метки и затем группировать по ним звонки в отчете.

Где смотреть результаты

Страница Колтрекинг в кабинете тенанта
Страница Колтрекинг: статус фичи, метрики звонков, отчет по источникам, а также сайты и пулы номеров.

Данные трекаемых звонков попадают в три места:

  1. Отчет колтрекинга на странице Колтрекинг (/dashboard/call-tracking). Здесь видно число звонков, отвечено и пропущено, с группировкой по источнику, каналу, кампании, ключевому слову, странице входа и номеру DID за выбранный период.
  2. История звонков на странице Звонки (/dashboard/calls). Под номером звонящего показывается метка с источником, а в карточке звонка блок Источник звонка с каналом, кампанией, ключевым словом и страницей входа. Источник и кампания выгружаются и в Excel вместе с остальными данными звонка. Так источник виден сразу в общей истории, без перехода в отчет.
  3. CRM. Источник звонка добавляется в заметки сделок и лидов в Bitrix24 и amoCRM, а также в переменные сценариев amoCRM (tracking_source, tracking_campaign и другие). Подробнее про подключение CRM в статье CRM-интеграции: amoCRM, Bitrix24, Webhook.

Важно

В отчет, в историю звонков и в CRM попадают только реально трекаемые звонки: офлайн-источники и атрибуция DYNAMIC или STATIC. Звонки без совпадения остаются в истории без метки источника, поэтому статистика не разбавляется случайными вызовами.

Маркетинговые интеграции и сквозная аналитика

На странице Колтрекинг есть раздел Маркетинговые интеграции. Он решает две задачи: возврат офлайн-конверсий звонков в рекламные системы и импорт рекламных расходов для расчета окупаемости. Ключи и доступы тенант вводит сам, секреты хранятся в зашифрованном виде, наружу не отдаются.

Возврат конверсий звонка

Когда трекаемый звонок завершается, платформа сама отправляет конверсию в подключенную систему. Отправляются только звонки с динамической атрибуцией и подходящим идентификатором:

Система Идентификатор Что отправляется
Google Analytics 4 client_id из cookie _ga (gaClientId) Событие (по умолчанию generate_lead) с валютой и ценностью через Measurement Protocol
Yandex Metrika yclid или ClientID (ym getClientID) Офлайн-конверсия type=CALLS на указанную цель
Google Ads gclid Конверсия через UploadClickConversions, order_id = callId (защита от дублей)

Фильтры на уровне интеграции: только отвеченные (onlyAnswered), минимальная длительность (minDurationSec), ценность конверсии и валюта. Звонки со статической атрибуцией или без идентификатора помечаются как SKIPPED без сетевого вызова. Доставка идемпотентна: одна конверсия уходит в провайдера один раз.

Звонки с номеров офлайн-источников в рекламные системы не отправляются: у них нет клика и идентификатора, к которому рекламная система могла бы привязать конверсию. В отчете и в истории звонков они при этом видны полностью.

Совет

Включите dry-run, чтобы проверить настройку без реальной отправки: GA4 валидируется через debug-эндпоинт, Google Ads уходит с validateOnly, остальные просто не отправляются.

Импорт рекламных расходов и ROI

Для Google Ads и Yandex Direct платформа раз в несколько часов импортирует расходы по кампаниям (стоимость, клики, показы) и сохраняет валюту как есть, без автоконвертации. В блоке Сквозная аналитика (ROI) расходы сопоставляются со звонками по кампании (или по источнику google/yandex) и считаются метрики:

  • Доход — отвеченные звонки умноженные на заданную ценность звонка;
  • Стоимость звонка — расходы делить на число звонков;
  • ДРР (доля рекламных расходов) — расходы делить на доход, в процентах;
  • ROMI — (доход минус расходы) делить на расходы, в процентах.

Расходы, для которых не нашлось звонков, показываются отдельно как несопоставленные.

Модели атрибуции

В отчете можно переключать модель атрибуции:

  • Last-touch (по умолчанию) — группировка по последнему касанию;
  • First-touch — по первому касанию сессии;
  • Assisted — вспомогательные каналы, участвовавшие в сессиях сконвертированных звонков.

Важно

Маркетинговые интеграции работают только при включенном Call Tracking у тенанта и при наличии настроенной интеграции. Для боевой отправки в Google Ads и Yandex нужны реальные доступы (developer token, OAuth-приложение); без них путь работает в безопасном режиме (graceful no-op) и проверяется в dry-run.

Частые вопросы и ограничения

  1. Колтрекинг не показывает номера. Проверьте, что платформенный администратор включил Call Tracking, скрипт установлен на сайт, а CSS-селектор указывает на реальный элемент с телефоном.
  2. Звонок без источника. Скорее всего, все динамические номера пула были заняты в момент визита (показался fallback) либо звонок пришел на номер вне активного пула.
  3. Источник «прилип» к пулу, а не к рекламе. Это атрибуция STATIC: посетитель позвонил без сессии (например, набрал номер вручную), поэтому кампанией стало имя пула.
  4. Номер офлайн-источника показался посетителю сайта. Так не бывает: такие номера исключены из ротации. Если номер все же подставился на сайте, проверьте его режим, скорее всего он остался динамическим.
  5. Нужно поменять источник у офлайн-номера. Отредактируйте номер на странице Колтрекинг. Новый источник применится к последующим звонкам, ранее собранная статистика не пересчитывается.
  6. Не создается сайт. Название и домен обязательны, домен вводится без протокола: example.uz, а не https://example.uz/.

Проверьте

Главное ограничение это размер пула для сайта. Один динамический номер в один момент закреплен максимум за одним посетителем, поэтому при нехватке номеров часть посетителей получит fallback и останется без атрибуции. Планируйте размер пула под пиковую посещаемость. Для офлайн-каналов ограничения нет: номер нужен один на канал независимо от числа звонящих.

Следом полезно открыть Как настроить номер DID и маршрут и CRM-интеграции: amoCRM, Bitrix24, Webhook.