·Евгений Крук·8 мин чтения

Как отследить конверсии из Telegram Ads

Международный телефонный коммутатор, операторы соединяют линии с табличками городов

Кабинет Telegram Ads считает показы, клики и потраченные деньги. Что произошло после клика, он не знает и знать не будет: пользователь ушёл в бота или на сайт, и дальше это ваша территория. Значит, связь «объявление - регистрация» надо строить самому. Разбираем рабочую схему: метка в ссылке, приём события у себя, разметка пачки и места, где эта цепочка рвётся чаще всего.

Что кабинет показывает и на чём заканчивается

В статистике объявления есть показы, клики, CTR и расход. Дальше пустота. Кабинет не увидит, что человек нажал Start, прошёл регистрацию и положил деньги: у Telegram нет доступа ни к вашему боту, ни к вашей базе.

Два объявления с одинаковым CTR могут отличаться по цене регистрации в разы, и по кабинету вы этого не увидите. Клик в Telegram Ads дешёвый и ни к чему не обязывает. Насколько он мусорный, покажет только событие на вашей стороне. Мы разбирали эти цифры в статье про воронку Telegram Ads, здесь речь про механику: как вообще получить эти события в разрезе объявлений.

Почему пиксель вам, скорее всего, не поможет

На вопрос про конверсии рунет чаще всего отвечает «поставьте Pixel Tag». Ответ верный, но не на этот вопрос. В официальной документации у поля с пиксельным событием стоит прямая оговорка: оно применимо, только если вы продвигаете внешнюю ссылку. То есть пиксель это про сайт и лендинг, а не про бота или канал, на которые льёт большинство.

У того же поля есть вторая особенность: установленное событие потом не поменять. Выбрали один раз, живёте с ним весь срок жизни объявления.

Второй встроенный механизм это клики и UTM-метки в ссылке. Он честно работает, но считает переходы, а не события: вы узнаете, сколько человек нажали, и не узнаете, сколько из них дошли до регистрации. Для бота остаётся третий путь, дальше речь про него.

Метка живёт в хвосте ссылки на бота

Единственное место, куда вы можете положить свой идентификатор, это параметр в deep link бота: t.me/yourbot?start=ab12cd34. Когда пользователь открывает такую ссылку и жмёт Start, бот получает команду /start ab12cd34 и видит вашу метку первым же сообщением.

Правила Telegram простые. В ?start= помещается до 64 символов, разрешены латиница, цифры, подчёркивание и дефис. Мы у себя генерируем метку из 12 символов латиницы и цифр без подчёркиваний и дефисов: часть клиентских бэкендов спотыкалась на этих двух символах при разборе строки. Дюжины знаков хватает: комбинаций столько, что метку нельзя подобрать перебором, и она сама работает ключом доступа к приёму событий.

ПУТЬ МЕТКИОБЪЯВЛЕНИЕt.me/bot?start=ab12cdБОТвидит ab12cd в /startВАШ БЭКЕНДхранит ab12cd у юзераПОСТБЭКhash=ab12cd&event=regСТАТИСТИКАсобытие у объявлениярвётся на 2 и 3: бот затёр метку, бэкенд не сохранил
Путь метки от объявления до строки в статистике. Два звена в середине живут на вашей стороне, и рвётся обычно там.

Постбэк: как событие возвращается к объявлению

Возврат события устроен как обычный HTTP-запрос от вашего бэкенда в систему, которая ведёт статистику. Минимальный набор: метка и тип события, для денежных событий ещё сумма. У нас это выглядит так:

GET /api/postback?hash=ab12cd34&event=registration
GET /api/postback?hash=ab12cd34&event=ftd&amount=25

Типов событий пять, и они закрывают две разные воронки. В финансовой вертикали это registration, ftd (первый депозит) и rd (повторный). У ботов-рассылок и каналов события другие: sms, когда человек написал боту и завязался диалог, и pdp, когда он подписался. Разработчику клиента проще присылать событие под тем именем, что уже есть в его коде, поэтому синонимы принимаются: reg, register, message, subscribe разбираются в те же пять типов.

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

Про задвоение, оно массовое. Бэкенды арбитражников часто шлют один и тот же постбэк сразу на несколько адресов, чтобы точно дошло. Если приёмник считает каждый запрос отдельной конверсией, статистика раздувается вдвое и втрое. Нормальный приёмник схлопывает такие повторы по метке и типу события в одно.

Как разметить пачку, не вписывая метки руками

Одну метку можно вписать руками. На шестидесяти объявлениях одна опечатка, и половина трафика приезжает без метки, а узнаете вы об этом через неделю по пустым колонкам.

Рабочих подхода два. Первый: каждому объявлению своя случайная метка, соответствие метка-объявление хранит система. Второй: осмысленный шаблон, который разворачивается в читаемые метки. У нас второй выглядит так: пишете в ссылке t.me/bot?start=mar_{channel}, и на заливке {channel} подставляется хэндлом цели. Из одной строки получается mar_cryptodaily, mar_tradenotes и так далее, по метке на каждый канал пачки. Есть ещё {n} - номер в пачке с единицы, он выручает, когда у цели нет публичного имени.

Читаемая метка нужна не ради красоты. Её видит бэкенд клиента, и если внутри неё лежит хэндл канала, партнёрская статистика на той стороне тоже раскладывается по площадкам, без запросов в ваш кабинет.

Пачку с метками мы льём через Zaliv: метка проставляется каждому объявлению на создании, а события по ней приходят в ту же таблицу, где показы и расход. Посмотреть, как выглядит таблица с колонками конверсий, можно в демо-режиме.

Где метка теряется

Цепочка из пяти звеньев рвётся в предсказуемых местах, и рвётся она чаще, чем кажется. У нас заведено около двух с половиной тысяч трек-ссылок, и хотя бы одно событие пришло примерно по каждой шестой. Остальные пять из шести молчат: ссылка создана, метка в объявлении стоит, а событий нет ни одного. Часть этих объявлений просто не сработала, но большая часть молчит потому, что вторую половину цепочки так и не довели до конца.

Вот места, где она рвётся, в порядке частоты.

Бот не читает параметр. Самое частое. Разработчик поставил обработчик на /start и разбирает только саму команду, а хвост игнорирует. Проверяется за минуту: открываете свою же ссылку с меткой, жмёте Start, смотрите в логах бота, что пришло.

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

Ссылку меняли после запуска. Правка ссылки в активном объявлении отправляет его на повторную проверку, и на время проверки открут встаёт. Мы про это подробно писали в разборе правок без потери открута. Вывод для разметки такой: метку ставят до первого запуска, а не потом.

Официальный API тут не поможет. Смену ссылки он отбивает кодом PROMOTE_URL_MODIFY_NOT_ALLOWED. Забытая метка лечится только через браузерный кабинет или новой копией объявления.

У объявления несколько целей. Метка привязана к объявлению, а не к каналу. Если в одном объявлении десять каналов, все конверсии приедут в одну строку, и понять, какой канал их дал, невозможно. Отсюда правило: нужны конверсии по площадкам, значит один канал на объявление. Тот же принцип работает и при сборе целей для пачки, подробнее в статье про каналы.

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

Если трафик идёт на сайт, а не в бота

С сайтом проще: в ссылку кладутся любые параметры, привычные utm_source и utm_campaign работают как везде. Разница в том, что переход по объявлению Telegram Ads не несёт в себе реферера с именем канала, поэтому имя площадки вы кладёте в ссылку сами, так же, как в случае с ботом.

Схема стандартная: параметр приезжает в вашу аналитику, событие привязывается к нему там же. Если хочется видеть конверсии рядом с расходом по объявлениям, шлите постбэк точно так же, как из бота, с меткой в том же формате.

Одна ссылка до пачки

Не размечайте пачку, пока не прошла одна ссылка целиком: переход, Start, запись метки в базе, тестовый постбэк с вашего бэкенда. Это полчаса против недели, которую вы иначе потратите на догадки.

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

Источники

Zaliv - массовое создание объявлений в Telegram Ads
50 объявлений за пару минут, аналитика и автоматизация. 30 дней бесплатно.