UTM-метки в Telegram-боте: считаем источники через /start
«С какой рекламы пришёл этот человек?» — вопрос, на который Telegram сам не отвечает. Но есть приём: зашить метку в ссылку на бота и прочитать её в первом /start. Дальше — дело техники. Покажу формат, ограничения и как не запутаться в десятке кампаний.
Deep link: ссылка с параметром
Фокус простой. Обычная ссылка на бота — https://t.me/your_bot. Добавляем параметр start:
https://t.me/your_bot?start=vk_jan_promo
Когда человек переходит и нажимает «Начать», Telegram отправляет боту не просто /start, а /start vk_jan_promo. Эту нагрузку (payload) бот читает в первом же сообщении — и знает, откуда пришёл пользователь. Никакой магии, обычная фича Bot API.
Ограничения, о которые все спотыкаются
- длина payload — до 64 символов;
- разрешены только латиница, цифры,
_и-; - пробелов, кириллицы и
?,&,=нет.
То есть полноценную UTM-строку utm_source=vk&utm_campaign=Январь впихнуть не выйдет. Два рабочих подхода: либо короткие коды-ярлыки (vk_jan, ig_bio), которые вы сами расшифровываете, либо base64url от компактной строки. Чаще достаточно первого — читается глазами и не упирается в лимит.
Как прочитать в коде
async def start(message):
text = message.text or ""
payload = text.partition(" ")[2].strip() # всё после "/start "
source = payload or "direct" # пусто = прямой заход
save_source(message.from_user.id, source)
Пустой payload — человек открыл бота напрямую, без вашей метки. Это тоже полезная категория: «прямые заходы».
Генерируем ссылки под кампании
Заведите таблицу соответствий заранее, иначе через месяц забудете, что значит x7. Пример осмысленной схемы:
| Ссылка | Канал |
|---|---|
?start=vk_post_jan | пост ВК, январская акция |
?start=ig_bio | ссылка в шапке профиля |
?start=ya_search | контекст в Яндексе |
?start=qr_flyer | QR с офлайн-листовки |
Как это считает MaxBotStat
Если бот ходит через наш прокси, payload из /start разбирается автоматически — отдельный код писать не нужно. В кабинете появляется разрез «Источники»: сколько контактов привёл каждый ярлык, кто из них остался активным, какие источники докручивают до цели. Дальше по источнику можно собрать сегмент и отправить ему рассылку. Подробнее — в разделе про источники.
Считайте не клики, а удержание. Источник, который привёл 1000 человек, из которых назавтра вернулись трое, — хуже источника на 100 человек с половиной активных. Почему так — разбираем в статье про метрики бота.
Используете deep-ссылки? MaxBotStat разложит источники сам. Подключите бота бесплатно.
Открыть кабинет →