Как узнать, из какой рекламы пришёл пользователь 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_oct | QR на встрече, октябрь | Здравствуйте! Вот материалы по приглашению с QR-кодом. |
2. Отделите открытие ссылки от запуска бота
В обычной ссылке на бота параметр start передаётся после нажатия Start, то есть кнопки запуска. Согласно документации Telegram, при наличии этого параметра кнопка показывается и человеку, который уже общался с ботом. Просто открыть адрес недостаточно: проверяйте полученную команду отдельно от появления окна чата.
После запуска по первой ссылке ожидается /start post_oct. После второй — /start site_oct, после третьей — /start qr_oct. Схема ниже показывает именно путь через нажатие Start. Она не означает, что бот видит каждое открытие URL или каждое сканирование напечатанного QR-кода.

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 до печати: декодированный адрес и полученное приветствие должны соответствовать третьей строке реестра.
Если приветствие правильное, а сохранённого события нет, учёт ещё не готов. Если старый пользователь каждый раз попадает в число новых, исправьте подсчёт до сравнения размещений. Ответственный должен уметь воспроизвести результат по тестовой записи, без догадок по тексту переписки.
| Действие по порядку | Ожидаемый результат | Первый / последний |
|---|---|---|
| Новый пользователь запускает A | valid; приветствие поста | A / A |
| Тот же пользователь запускает B | valid; приветствие сайта; тот же пользователь | A / B |
| Повторно запускает B | Ещё одно событие; пользователь прежний | A / B |
| Отправляет /start | missing; общее меню | A / B |
| Отправляет /start other_oct | unknown; общее меню | A / B |
| Открывает A, не нажимая Start | Нет команды от этого открытия | A / B |
6. Правильно назовите результат в отчёте
Пересланная ссылка сохраняет код: post_oct может прийти от друга, хотя человек не видел исходный пост ВКонтакте. Поэтому запись подтверждает использованную метку запуска, а не первоначальный контакт с рекламой. Количество команд, число отдельных пользователей, заявки и продажи считайте раздельно: один /start не доказывает покупку.
Для закрытого канала применяется другой путь: заявки на вступление по рекламным ссылкам позволяют организовать допуск участников. Не заменяйте эту настройку ссылкой на бота, если фактическая цель — приём в канал. Для планирования размещений вернитесь к стратегии Telegram-маркетинга для своей аудитории и заранее определите нужное событие.
PSYKE проверяет предоставленные списки телефонных номеров. Если у вас есть отдельная задача проверки своего списка, посмотрите актуальный каталог услуг PSYKE; обработчик start-кодов и описанный реестр источников настраивает владелец вашего бота.
Частые вопросы
Можно ли просто добавить utm_source к ссылке бота?
Не рассчитывайте, что произвольные UTM-параметры сайта попадут в команду /start. Для этого сценария используйте поддерживаемый start-код и сопоставление с кампанией в приложении. Проверяйте фактически полученную команду.
Обновится ли источник у старого пользователя без нажатия Start?
Одного открытия обычной ссылки с start-параметром недостаточно. Кнопка Start показывается и при существующем диалоге; после её нажатия приложение получает параметр и применяет настроенное правило сохранения. Без полученной команды этот запуск не фиксируется.