Как узнать, из какой рекламы пришёл пользователь Telegram-бота

Чтобы отличить посетителей из поста ВКонтакте, с сайта и с печатного QR-кода, задайте каждому размещению отдельный start-код. Затем настройте бота: он должен прочитать полученную команду /start, сопоставить код с названием размещения и сохранить результат. Сама ссылка не создаёт отчёт об источниках.

Ниже — условная октябрьская кампания с приглашением на встречу. На выходе получится конкретное задание владельцу бота: три адреса, три приветствия, правила сохранения источника и проверка шести ситуаций. Такой учёт отвечает на вопрос, с какой меткой запустили бота; для общей подготовки размещений пригодится стратегия Telegram-маркетинга для своей аудитории.

1. Назначьте код каждому размещению

В примерах your_bot — только заполнитель имени: замените его на username своего бота без @. Не публикуйте примеры как рабочие приглашения. Сначала согласуйте значения кодов и приветствия, затем вставьте соответствующий адрес в пост, кнопку сайта или генератор QR-кода.

Пост ВКонтакте: https://t.me/your_bot?start=post_oct

Страница сайта: https://t.me/your_bot?start=site_oct

QR-код на встрече: https://t.me/your_bot?start=qr_oct

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

КодНазвание источникаПриветствие после запуска
post_octПост ВКонтакте, октябрьЗдравствуйте! Вот программа встречи из октябрьского поста.
site_octСайт, октябрьЗдравствуйте! Вот подробности встречи со страницы сайта.
qr_octQR на встрече, октябрьЗдравствуйте! Вот материалы по приглашению с QR-кодом.

2. Отделите открытие ссылки от запуска бота

В обычной ссылке на бота параметр start передаётся после нажатия Start, то есть кнопки запуска. Согласно документации Telegram, при наличии этого параметра кнопка показывается и человеку, который уже общался с ботом. Просто открыть адрес недостаточно: проверяйте полученную команду отдельно от появления окна чата.

После запуска по первой ссылке ожидается /start post_oct. После второй — /start site_oct, после третьей — /start qr_oct. Схема ниже показывает именно путь через нажатие Start. Она не означает, что бот видит каждое открытие URL или каждое сканирование напечатанного QR-кода.

Пост, Сайт и QR-код ведут к Start, затем к блоку «Код источника»
Источник передаётся при нажатии Start; открытие ссылки само по себе не подтверждает получение кода ботом.

3. Передайте разработчику точное правило обработки

Документация Telegram разрешает в start-параметре латинские буквы A–Z и a–z, цифры 0–9, знак подчёркивания и дефис; максимальная длина — 64 символа. Эти три кода подходят. Длинное название размещения храните в своей таблице, а в ссылке оставьте короткий ключ.

Обработчик личного чата должен разбирать команду целиком. Для данного примера допустимы /start без аргумента и /start с ровно одним аргументом. Сопоставляйте post_oct, site_oct и qr_oct точно, с учётом регистра; дополнительные слова, другой регистр и посторонние значения не должны случайно превращаться в известный источник.

Псевдокод для согласования: parts = split_whitespace(text); если parts пуст или parts[0] != '/start', выйти; если len(parts) == 1, status = missing; иначе если len(parts) == 2 и parts[1] входит в {post_oct, site_oct, qr_oct}, status = valid и code = parts[1]; иначе status = unknown. Сохранить событие; для valid выбрать приветствие из таблицы; для missing или unknown показать общее меню.

Это описание логики, которую необходимо реализовать в приложении или конструкторе. Сохранение события, выбор приветствия и поля источников не возникают от добавления параметра к URL. Попросите владельца бота показать входящую команду и соответствующую запись, а не только красивый ответ в чате.

4. Сохраните первый источник и последующие возвраты

Предлагаемое правило приложения: first_source заполняется при первом допустимом коде и дальше сохраняется; latest_source обновляется при каждом допустимом запуске. События привязываются к одному пользователю Telegram и времени получения. Это выбранная модель учёта, а не встроенные поля аналитики Telegram.

Допустим, человек впервые нажал Start по post_oct, а через неделю вернулся по site_oct. Тогда first_source = post_oct, latest_source = site_oct. Повторный запуск по site_oct добавляет взаимодействие, но не нового пользователя. Команда без кода получает статус missing, неизвестный код — unknown; оба случая открывают общее меню и сохраняют прежние допустимые источники.

Для нового пользователя без известного кода оставьте оба поля незаполненными. Общее приветствие может звучать так: «Здравствуйте! Выберите программу встречи или задайте вопрос». Если после выбора нужен сотрудник, используйте правила автоответа и передачи диалога человеку: источник запуска и дальнейшая обработка вопроса решают разные задачи.

5. Проверьте шесть ситуаций перед размещением

Проверку начните с тестового пользователя, у которого очищены только тестовые поля источников. После каждого шага сравните команду, статус события, приветствие и сохранённые first_source/latest_source. Для последовательности ниже A означает post_oct, B — site_oct. Отдельно проверьте qr_oct до печати: декодированный адрес и полученное приветствие должны соответствовать третьей строке реестра.

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

Действие по порядкуОжидаемый результатПервый / последний
Новый пользователь запускает Avalid; приветствие постаA / A
Тот же пользователь запускает Bvalid; приветствие сайта; тот же пользовательA / B
Повторно запускает BЕщё одно событие; пользователь прежнийA / B
Отправляет /startmissing; общее менюA / B
Отправляет /start other_octunknown; общее менюA / B
Открывает A, не нажимая StartНет команды от этого открытияA / B

6. Правильно назовите результат в отчёте

Пересланная ссылка сохраняет код: post_oct может прийти от друга, хотя человек не видел исходный пост ВКонтакте. Поэтому запись подтверждает использованную метку запуска, а не первоначальный контакт с рекламой. Количество команд, число отдельных пользователей, заявки и продажи считайте раздельно: один /start не доказывает покупку.

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

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

Посмотреть проверки своего списка номеров

Частые вопросы

Можно ли просто добавить utm_source к ссылке бота?

Не рассчитывайте, что произвольные UTM-параметры сайта попадут в команду /start. Для этого сценария используйте поддерживаемый start-код и сопоставление с кампанией в приложении. Проверяйте фактически полученную команду.

Обновится ли источник у старого пользователя без нажатия Start?

Одного открытия обычной ссылки с start-параметром недостаточно. Кнопка Start показывается и при существующем диалоге; после её нажатия приложение получает параметр и применяет настроенное правило сохранения. Без полученной команды этот запуск не фиксируется.

Источники и дополнительные материалы

Похожие руководства