Приветствую, Хабр! В последнем обновлении Яндекс Метрики появились цели на чаты. Я первым делом ринулся их тестировать и делиться с вами рецептом их приготовления.

Лиды из мессенджеров часто выпадают из аналитики, потому что сами мессенджеры существуют вне браузера, где живет Яндекс Метрика. Пользователь может кликнуть по объявлению, перейти на сайт и сразу нажать на кнопку «Написать в Telegram» или «WhatsApp». В этом случае визит фиксируется, но цепочка обрывается - человек уходит в приложение, где уже нет cookie и идентификаторов Метрики. Если же он переходит по прямой ссылке в мессенджер, минуя сайт, система теряет и визит, и источник клика. Добавим сюда переходы между устройствами, ручной перенос заявок менеджерами и отсутствие технической привязки ClientID - и становится понятно, почему аналитика видит «заявку», но не может ответить, откуда она взялась.
Я более 10 лет занимаюсь аналитикой, SEO и управлением командами в digital‑маркетинге. А в своем Телеграм канале пишу еще больше про всякое из реального маркетинга. Консультирую по аналитике web‑проектов и настройке инструментов маркетинга, помогаю проводить технические собеседования специалистов по различным типам трафика.
Итак, могу заявить, что импорт чатов в Яндекс Метрику решает эту проблему. Он позволяет связать переписку с визитом или рекламным кликом, сделать чаты полноценной частью воронки и автоматически добавить цель «Чат» в счетчик. После этого заявки из Telegram или WhatsApp становятся видимыми в стандартных отчетах Метрики, их можно фильтровать по источникам и использовать для оптимизации рекламных кампаний. Фактически, импорт чатов превращает «непонятные офлайн-лиды» в атрибутированные конверсии, которые можно оценивать, сегментировать и учитывать в ROI.
Результат выглядит просто, но эффект - ощутим. После настройки интеграции в Метрике появляется цель «Чат», которая автоматически собирает все загруженные обращения. Каждая заявка получает источник визита, кампанию, ключевое слово и стоимость, если она была передана в данных. Это дает полноценную сквозную аналитику - теперь можно точно сказать, сколько лидов принес Telegram, какой трафик конвертируется в переписку и какой канал дает самую дешевую заявку.
Пример бизнес-кейса
Компания получает большую часть обращений через мессенджеры, но видит в Метрике только часть этих заявок - остальные числятся как «неатрибутированные». Реклама ведет на сайт, с которого пользователи переходят в Telegram и WhatsApp, но дальше система теряет связь. Маркетолог знает, что рекламные кампании работают, но не может доказать это цифрами, а руководитель видит десятки лидов в CRM без источника.
Задача - восстановить эту связь. Нужно, чтобы каждый чат был связан с визитом и рекламным кликом, чтобы Метрика понимала, откуда пришел пользователь, и автоматически учитывала такие чаты как конверсии. Цель - получить полную картину по лидам из мессенджеров, видеть стоимость каждой заявки и использовать цель «Чат» для оптимизации рекламных кампаний.
Для решения задачи используется связка API Яндекс Метрики и внутренней CRM-системы, в которой хранятся чаты. На сайте внедряется код, собирающий идентификаторы посетителя (ClientID, Yclid или UserID) и передающий их вместе с уникальным идентификатором чата. После этого CRM экспортирует данные в формате CSV и автоматически отправляет их в Метрику через API.
После загрузки чаты появляются в отчетах, а в счетчике создается цель «Чат». После маркетолог может видеть, какие кампании приводят к реальным диалогам, а не только к кликам. Аналитик получает возможность рассчитать стоимость лида и эффективность каждого источника, а менеджеры видят свои обращения с точным каналом привлечения.

А что это даст? Все очень просто. Вы сможете оптимизировать кампании в Яндекс Директе по цели «Чат» и сократить стоимость привлечения заявки в мессенджерах минимум на треть (так по крайней мере заявляет Яндекс).
Оффтоп, как сделать тоже самое быстро и без боли
В свою бытность, когда плотно занимался аналитикой, я видел эту проблему и говорил, кто успеет сделать такое решение первым выиграет рынок сквозной аналитики мессенджеров. Вышло почти одновременно у Яндекса и у компании Radist.online. Приятно осознавать еще и то, что ребята связывались со мной, как раз по этой фиче аналитики и я прикладывал руку к ее созданию. Яндекс, конечно, сделал сложное решение, т.к. он рассчитан на широкую аудиторию аналитиков, которые смогу повторить то, что я опишу ниже. А для тех, кто хочет сделать все тоже самое но мышкой и без кода есть решение от ребят из Радиста.
[Реклама удалена модератором]
Ну и порадуйтесь что ли за меня, я вот за себя рад, доволен как слон, что помог нормальным ребятам реализовать крутую фишку одним из первых на рынке.
Подготовка данных (Шаг 1 по Яндексу)
Первый шаг - собрать все необходимые идентификаторы.
Основные параметры:
ClientID - уникальный идентификатор посетителя, создается Метрикой и хранится в cookie ymuid.
Yclid - параметр рекламного клика, автоматически передается в URL при переходе из Яндекс.Директа.
UserID - собственный ID пользователя (если он авторизован на сайте).
PurchaseID - необязательный параметр, используется, если нужно связать чат с покупкой.
Чтобы извлечь ClientID, можно добавить небольшой JS-код на сайт.
Пример:
<script>
function getMetrikaClientId() {
const match = document.cookie.match(/_ym_uid=(\d+)/);
return match ? match[1] : null;
}
console.log('ClientID:', getMetrikaClientId());
</script>
Эта функция берет идентификатор из cookie и может передавать его дальше - например, в ссылку на мессенджер или форму чата.
Типичные ошибки:
Не фиксируется ClientID - пользователь заблокировал cookie или скрипт подключен позже нужного момента.
Не совпадает время визита и время чата - Метрика не находит связь.
Yclid не сохраняется - ссылка не содержит параметр клика из Директа.

Встраивание chat-ID в ссылки (Шаг 2)
Чтобы Метрика связала чат с визитом, каждой переписке нужен уникальный идентификатор. Он может генерироваться при клике по кнопке - например, как UUID или короткий timestamp.
const chatId = 'chat-' + Date.now();
Этот chatId добавляется в ссылку:
Telegram https://t.me/your_bot?start=chat-123456789
WhatsApp https://wa.me/79990001122?text=Здравствуйте!%20chat-123456789
Таким образом, при нажатии на кнопку идентификатор автоматически передается в сообщение или параметр чата. Далее в CRM связываем этот chat-ID с ClientID, полученным на сайте. Для простых интеграций это можно делать даже через Google Sheets: в таблице сохраняются пары chat-ID и ClientID.
Подготовка и формат CSV-файла (Шаг 3)
После того как чаты накопились в CRM, их нужно выгрузить в CSV. Минимальный состав данных, необходимый для загрузки в Метрику:
Поле |
Назначение |
DateTime |
Дата и время чата |
ChatPlatform |
Telegram / WhatsApp / Viber |
ChatUsername / PhoneNumber |
Идентификатор пользователя |
ClientID или Yclid |
Связка с визитом |
Пример CSV:
DateTime,ChatPlatform,ChatUsername,ClientID,Price,Tag
2025-11-06 15:34:10,Telegram,@ivanov,7423874923847923,0,lead
2025-11-06 16:02:57,WhatsApp,+79990001122,7423874923847939,12000,sale
Если нужно обновить данные по тем же чатам, важно, чтобы DateTime был идентичен предыдущей загрузке. Это позволяет Метрике корректно обновить статус, а не создавать дубликаты.
Передача данных в Метрику (Шаг 4)
Когда CSV-файл готов, его можно загрузить через API Метрики. Используется метод:
POST /management/v1/counter/{counterId}/offline_conversions/upload?type=CHATS
Параметры:
counterId - номер счетчика Метрики,
type=CHATS - тип конверсии (в нашем случае чаты),
авторизация - через OAuth-токен.
Пример cURL-запроса:
curl -X POST \
-H "Authorization: OAuth <YOUR_TOKEN>" \
-F "file=@chats.csv" \
"https://api-metrika.yandex.net/management/v1/counter/12345678/offline_conversions/upload?type=CHATS"
Или через Python:
import requests
url = "https://api-metrika.yandex.net/management/v1/counter/12345678/offline_conversions/upload?type=CHATS"
headers = {"Authorization": "OAuth <YOUR_TOKEN>"}
files = {"file": open("chats.csv", "rb")}
response = requests.post(url, headers=headers, files=files)
print(response.json())
После отправки данные появятся в отчетах через 1–2 часа.
Проверить статус загрузки можно запросом:
GET /management/v1/counter/{counterId}/offline_conversions/uploadings/{uploadingId}
Статусы обработки:
PREPARED - загрузка началась,
UPLOADED - файл принят,
MATCHED - данные сопоставлены с визитами,
PROCESSED - успешно добавлены,
LINKAGE_FAILURE - не удалось найти связь (нет ClientID/Yclid или время не совпадает).

Проверка результата
После загрузки файлов и обработки данных в счетчике Яндекс Метрики появляется автоматическая цель «Чат» - ее можно найти в списке целей счетчика и в стандартных отчетах: «Цели» → «Список целей» и далее в любых сводных отчетах по визитам и источникам трафика. В отчете «Содержание - Цели» или в конверсии по источникам вы увидите новые строки с типом цели «Чат», а в карточке цели можно посмотреть метрику по датам и сегментам.
Цель «Чат» удобно использовать как фильтр в сегментах: создаете сегмент «Посетители, завершившие цель - Чат» и применяете его в отчетах по источникам, кампаниям, посадочным страницам и ключевым словам. Это дает точную картину, какие рекламные кампании и посадочные страницы приводят не просто клики, а реальные разговоры. Для оперативной проверки сверяйте количество загруженных строк CSV с числом записей в отчете по цели «Чат» после статуса PROCESSED. Рекомендуется сделать быстрый сверочный отчет: выгрузить за период чаты из CRM и число целей «Чат» в Метрике - отличия укажут на проблемы привязки или потери данных.
Чтобы подключить данные к сквозной аналитике, экспортируйте отчеты по цели «Чат» вместе с UTM/Yclid в BI (CSV/BigQuery/ClickHouse) и объединяйте с данными CRM. При интеграции с Яндекс.Директ просто используйте цель «Чат» как цель для оптимизации - в интерфейсе Директа указываете цель счетчика и переключаете стратегии на конверсии (например, «Целевая цена конверсии»). После этого система начнет оптимизировать показы под не клики, а реальные диалоги. Сквозной отчет покажет CPL по каждому источнику и позволит пересчитать ROI с учетом реальных лидов.
Ошибки и подводные камни
Самая частая причина, почему чат остается «непривязанным», отсутствие ключевых идентификаторов. Если в CSV не передан ClientID, UserID или Yclid, Метрика не сможет соотнести событие с визитом и пометит запись как неатрибутированную. Иногда ClientID есть в cookie, но скрипт на сайте не успевает его прочитать - например, если код выполняется после перехода по ссылке или пользователь блокирует cookie. Еще одна ловушка - несовпадение времени: в загружаемом DateTime и времени визита должна быть достаточная точность (рекомендуется сохранять секунды), иначе сопоставление не пройдет.
Ошибки формата CSV приводят к отказу загрузки или к частичной обработке. Нужен строгий формат: поле DateTime в Unix-таймстемпе или в точном формате, перечисление платформ строчными буквами (telegram, whatsapp, viber), корректные номера телефонов и отсутствие лишних скрытых символов (BOM, лишние кавычки). При обновлении записи важно не изменять ключевые поля (DateTime + платформа + идентификатор собеседника), иначе Метрика создаст новую запись, а не обновит существующую - это дает дубликаты и искажает метрику CPL.
Часовые пояса - еще одна ловушка: если CRM экспортирует время в локальном часовом поясе, а при загрузке в Метрику используется UTC или другой офсет, то совпадение по времени может не пройти. Всегда проверяйте и нормализуйте DateTime в общем часовом поясе (лучше - в UTC) перед отправкой. Наконец, дублирование записей случается, если при повторной загрузке изменяется любой элемент ключа; трендовые ошибки - генерация chat-ID на стороне CRM и одновременная его регенерация на стороне сайта при каждой новой сессии. Простая профилактика - единый источник генерации chat-ID и логирование экспортов с ID загрузки.
Результат и эффект
После корректной настройки интеграции компания получает ощутимые выигрыши: во-первых, в отчетах появляются реальные данные по источникам заявок из мессенджеров - больше не «интуиция», а цифры. Во-вторых, уточняется стоимость лида: теперь CPL можно считать по цели «Чат», сопоставляя расходы в Директе и количество атрибутированных чатов. Это дает основу для принятия решений о перераспределении бюджета.
Оптимизация рекламных кампаний по цели «Чат» обычно дает быстрый результат: стоимость привлечения диалога падает, потому что алгоритмы начинают выбирать аудитории и размещения, приводящие к реальным контактам, а не к случайным кликам. Кроме того, доля «неопознанных» конверсий резко уменьшается - в примерах из практики она падает до 10–15% от общего количества. Итог - прозрачность воронки, более точный расчет ROI и меньше споров между продажами и маркетингом о том, «откуда пришел этот лид».
