Колтрекинг: подмена номера и источники звонков
Колтрекинг (Call Tracking) показывает, из какого источника пришел каждый входящий звонок. Работает в двух режимах, которые можно использовать одновременно:
- Динамическая подмена номера на сайте (DNI, Dynamic Number Insertion). Платформа показывает каждому посетителю сайта отдельный номер из вашего пула и затем связывает входящий звонок с источником трафика этого посетителя. Так вы видите не просто «звонков было 40», а из какой рекламы, кампании и ключевого слова пришел конкретный звонок.
- Номера офлайн-источников. За каналом вне сайта закрепляется отдельный номер: один для Instagram, другой для Telegram, третий для баннера или визитки. Подмены здесь нет, номер постоянный, но каждый звонок на него сразу помечается вашим источником.
К звонку привязываются UTM-метки, идентификаторы кликов рекламных систем (gclid, yclid, fbclid), roistat, реферер, страница входа и текущая страница, а также устройство и браузер посетителя.
Что такое колтрекинг и зачем он нужен
Обычная схема «один номер на все» не дает понять, какая реклама приносит звонки: все вызовы выглядят одинаково. Колтрекинг решает это так.
Для трафика с сайта:
- посетитель открывает ваш сайт, скрипт собирает данные о его источнике;
- посетителю показывается персональный номер из пула;
- посетитель звонит на этот номер;
- входящий вызов сопоставляется с сессией посетителя, и в отчете появляется источник звонка.
Для мест вне сайта:
- вы выделяете отдельный номер под канал и указываете его источник, например
instagram; - этот номер публикуется только в своем канале;
- любой звонок на него попадает в отчет с этим источником, без скриптов и сессий.
В результате вы можете честно сравнить каналы и кампании по реальным звонкам, а не по кликам.
Как включить колтрекинг
Фича выключена по умолчанию у всех тенантов. Включить ее может только платформенный администратор 4phone (роль SUPERADMIN или ADMIN) галкой Call Tracking в карточке тенанта, в разделе «Основная информация».
Важно
Владелец тенанта не может включить колтрекинг самостоятельно. На странице Колтрекинг (/dashboard/call-tracking) он видит баннер со статусом (включено или выключено) и подсказку, к кому обратиться для активации. Если фича выключена, сначала запросите ее включение у поддержки 4phone.
После включения вся настройка выполняется тенантом самостоятельно в кабинете на странице Колтрекинг (/dashboard/call-tracking).
Из чего состоит настройка
Колтрекинг строится из трех сущностей:
- Сайт. Описывает площадку, на которой работает подмена: домен, CSS-селектор номера для замены, fallback-номер, время жизни назначения (TTL) и окно атрибуции в днях.
- Пул номеров. Группа номеров DID. Пул нужен и для подмены на сайте, и как контейнер для номеров офлайн-источников.
- Номера в пуле. Свободные номера DID, добавленные в пул. У каждого номера есть режим:
| Режим | Как работает | Для чего |
|---|---|---|
| Динамический | Платформа выдает номер посетителям сайта по очереди вместо статичного номера | Реклама и трафик с сайта |
| Офлайн-источник | Номер закреплен за одним каналом и никогда не выдается посетителям, у него свои источник, канал и кампания | Instagram, Telegram, баннеры, визитки, справочники |
Важно
Один номер DID может быть только в одном пуле и только в одном режиме. Номер офлайн-источника полностью выведен из ротации: посетителю сайта он не достанется даже в момент, когда все динамические номера заняты.
Сайты, пулы и номера можно изменять и удалять на той же странице. Удаление всегда просит подтверждение, потому что затрагивает работу подмены:
| Что удаляете | Что происходит |
|---|---|
| Сайт | Подмена номера на этом сайте прекращается, визиты посетителей удаляются. Пулы сохраняются и показываются как «Без сайта», их можно привязать к другому сайту |
| Пул | Номера выходят из трекинга и снова доступны для добавления в другой пул |
| Номер | Номер DID остается у вас и продолжает принимать звонки, но перестает участвовать в определении источника |
Важно
Источники уже состоявшихся звонков не пропадают: отчет и история звонков сохраняют источник, канал и кампанию даже после удаления сайта, пула или номера. Удаление меняет только дальнейшую работу подмены.
Пошаговая настройка
Порядок настройки колтрекинга
- убедитесь, что платформенный администратор включил Call Tracking для тенанта;
- создайте сайт и задайте его параметры;
- создайте пул номеров;
- добавьте в пул свободные номера DID: динамические для подмены на сайте, отдельные для офлайн-источников;
- установите скрипт колтрекинга на свой сайт;
- сделайте тестовый звонок и проверьте отчет.
Шаг 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, поэтому проще скопировать его оттуда.

Как работает подмена номера
Когда посетитель открывает страницу, скрипт собирает данные о его источнике (UTM-метки, идентификаторы кликов, реферер, страницу входа, устройство и браузер) и запрашивает у платформы персональный номер. Затем происходит следующее:
- Закрепление номера. Свободный динамический номер из пула закрепляется за сессией посетителя на время TTL. Номера выдаются по приоритету. Номера офлайн-источников в этой выдаче не участвуют.
- Повторные визиты. Если тот же посетитель снова обращается за номером, ему отдается тот же номер, а его TTL продлевается.
- Продление сессии. Пока вкладка открыта, скрипт примерно раз в 90 секунд продлевает сессию (keepalive). На скрытой вкладке продление ставится на паузу и возобновляется, когда посетитель вернется.
- Защита от гонок. Выдача номера атомарна: один и тот же номер не будет одновременно показан двум разным посетителям.
Важно
Скрипт получает номер через resolve.js (метод JSONP, который не требует настройки CORS) или через запрос POST /resolve. Подходящий способ выбирается автоматически, отдельно настраивать ничего не нужно.
Особые ситуации:
- Все номера заняты. Если в пуле не осталось свободных динамических номеров, посетителю отдается fallback-номер (ситуация
POOL_OVERFLOW). Такой звонок не получит источник. - Колтрекинг выключен. Если фича отключена, скрипт отдает статичный 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-параметры удобны для сквозной аналитики: вы можете передавать собственные метки и затем группировать по ним звонки в отчете.
Где смотреть результаты

Данные трекаемых звонков попадают в три места:
- Отчет колтрекинга на странице Колтрекинг (
/dashboard/call-tracking). Здесь видно число звонков, отвечено и пропущено, с группировкой по источнику, каналу, кампании, ключевому слову, странице входа и номеру DID за выбранный период. - История звонков на странице Звонки (
/dashboard/calls). Под номером звонящего показывается метка с источником, а в карточке звонка блок Источник звонка с каналом, кампанией, ключевым словом и страницей входа. Источник и кампания выгружаются и в Excel вместе с остальными данными звонка. Так источник виден сразу в общей истории, без перехода в отчет. - 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.
Частые вопросы и ограничения
- Колтрекинг не показывает номера. Проверьте, что платформенный администратор включил Call Tracking, скрипт установлен на сайт, а CSS-селектор указывает на реальный элемент с телефоном.
- Звонок без источника. Скорее всего, все динамические номера пула были заняты в момент визита (показался fallback) либо звонок пришел на номер вне активного пула.
- Источник «прилип» к пулу, а не к рекламе. Это атрибуция
STATIC: посетитель позвонил без сессии (например, набрал номер вручную), поэтому кампанией стало имя пула. - Номер офлайн-источника показался посетителю сайта. Так не бывает: такие номера исключены из ротации. Если номер все же подставился на сайте, проверьте его режим, скорее всего он остался динамическим.
- Нужно поменять источник у офлайн-номера. Отредактируйте номер на странице Колтрекинг. Новый источник применится к последующим звонкам, ранее собранная статистика не пересчитывается.
- Не создается сайт. Название и домен обязательны, домен вводится без протокола:
example.uz, а неhttps://example.uz/.
Проверьте
Главное ограничение это размер пула для сайта. Один динамический номер в один момент закреплен максимум за одним посетителем, поэтому при нехватке номеров часть посетителей получит fallback и останется без атрибуции. Планируйте размер пула под пиковую посещаемость. Для офлайн-каналов ограничения нет: номер нужен один на канал независимо от числа звонящих.
Следом полезно открыть Как настроить номер DID и маршрут и CRM-интеграции: amoCRM, Bitrix24, Webhook.