База знаний

Launch Stats →

Воронка предзаписи на Salebot: от комментария под рилсом до закрытого канала

Разбор целиком собранной воронки: человек пишет комментарий под роликом, получает сообщение в директ, переходит в Телеграм-бот, получает личную ссылку и попадает в закрытый канал — а каждый шаг считается в Launch Stats.

Здесь всё показано на Salebot, но принцип одинаковый для любого конструктора (BotHelp, Puzzlebot, ГетКурс): отличаются только названия полей.

Что получится

  1. Человек оставляет комментарий под роликом
  2. В директ ему приходит сообщение со ссылкой на бота
  3. В боте он нажимает «Старт» и получает личную одноразовую ссылку в канал
  4. По ссылке заходит в закрытый канал предзаписи
  5. Каждый шаг виден в воронке Launch Stats

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

Зачем вообще бот в середине

Заманчиво сократить путь и дать ссылку на канал сразу в директ. Но тогда вы теряете главное: бот в Телеграме не может написать человеку первым. Право отправить сообщение появляется только после того, как человек сам нажал «Старт».

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

Часть 1. Подготовка в Телеграме

Создайте закрытый канал

Меню Телеграма → «Создать канал» → тип частный. Название запомните: оно понадобится в текстах бота.

Добавьте бота администратором

«Управление каналом» → «Администраторы» → «Добавить администратора» → найдите своего бота.

Обязательное право одно — «Добавление подписчиков» (в некоторых версиях «Добавление участников»). Именно оно позволяет боту создавать пригласительные ссылки. Остальные права можно выключить.

Права бота в канале: включено только добавление подписчиков

Права стоит урезать не из вредности: если доступ к боту когда-нибудь уведут, лишние права превратятся в возможность переименовать канал или удалить посты.

«Управление публикациями» оставьте включённым, только если планируете публиковать посты прогрева через бота.

Узнайте номер канала

Перешлите любой пост из канала боту @getidsbot. В ответе найдите блок «Исходный чат» — там номер вида -100…. Он понадобится дальше.

Ответ getidsbot с номером канала

Часть 2. Вход по метке

Зачем метка

У бота обычно уже есть сценарий для обычного /start. Если добавить в него ещё и предзапись, люди с рекламы попадут в старый сценарий — например, увидят сообщение о том, что набор прошлого потока закрыт.

Поэтому делается отдельный вход по метке: ссылка вида

t.me/ваш_бот?start=predzapis_7

Номер потока в метке — не формальность. Для следующего потока вы сделаете predzapis_8, и статистика переходов по старым ссылкам не смешается с новой.

Создайте отдельный блок

Новый блок, в поле «Условие» — только метка, соответствие «Полное совпадение». Существующий блок с /start не трогайте.

Блок с условием predzapis_7 и текстом сообщения

Настройте выдачу ссылки

В блоке есть поле «Калькулятор». Впишите туда одну строку, подставив свой номер канала:

invite = tg_create_chat_invite_link(ВАШ_НОМЕР_КАНАЛА, 1)

Вместо ВАШ_НОМЕР_КАНАЛА подставьте число из прошлого шага — вместе со знаком минус, без кавычек. Выглядеть будет примерно так: (-100…, 1).

Единица в конце означает «ссылка на одного человека».

Поле «Калькулятор» со строкой создания ссылки

Напишите текст сообщения

В тексте обязательно используйте переменную #{invite} — в неё подставляется созданная ссылка. Без неё человек получит сообщение без ссылки.

Пример:

Вы записаны на седьмой поток.

Ваша личная ссылка в закрытый канал «Название канала»:

#{invite}

Потеряете канал — напишите мне слово КАНАЛ, пришлю вход заново.

Последняя строка важнее, чем кажется, — почему, в следующей части.

Часть 3. Что делать, когда человек потерял канал

Это случится обязательно. Люди листают список чатов, не помнят названий каналов и приходят в бота с вопросом «а где канал?».

Сразу две ловушки.

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

Вторая, менее очевидная. Если просто выдавать ему новую одноразовую ссылку, она останется неизрасходованной — ведь он уже в канале, и вступления не происходит. Такую живую ссылку можно переслать кому угодно, и посторонний войдёт в канал мимо вашей воронки.

Решение: блок с ключевыми словами и двумя кнопками

Создайте блок, который ловит обращения про канал. В условии — несколько слов через точку с запятой, соответствие «По наличию ключевых слов»:

канал; ссылка; вступить; предзапись; не могу зайти

Именно «по наличию», а не «полное совпадение»: человек напишет «не могу найти канал», а не голое слово «канал».

Блок с ключевыми словами и нестрогим соответствием

Поле «Калькулятор» в этом блоке оставьте пустым — здесь ссылка не создаётся.

Добавьте две кнопки.

Кнопка «Открыть канал» — с заполненным адресом вида:

https://t.me/c/ВАШ_НОМЕР_БЕЗ_МИНУС_100/1

Это внутренняя ссылка канала. Возьмите номер канала, отбросьте -100 в начале и допишите /1 в конце. Например, из номера -100987654321 получится адрес, оканчивающийся на 987654321/1. Особенность такой ссылки — она открывает канал только тому, кто уже в нём состоит. Переслать её бессмысленно: посторонний не попадёт.

Кнопка «Открыть канал» с заполненным адресом

Кнопка «Я ещё не подписался» — поле адреса пустое. Она ведёт не на сайт, а в следующий блок бота.

Кнопка «Я ещё не подписался» с пустым полем адреса

Это самая частая ошибка при настройке: заполнить адрес у обеих кнопок. Вторая тогда просто перестанет работать.

И обязательно напишите в сообщении название канала словами — часть людей после этого найдёт его поиском и больше не вернётся с этим вопросом.

Третий блок: новая ссылка для тех, кто ещё не подписался

Кнопка «Я ещё не подписался» ведёт в отдельный блок. Он устроен почти так же, как первый, — в нём снова создаётся одноразовая ссылка.

Создайте новый блок и заполните три вещи.

Условие — текст кнопки, слово в слово:

Я ещё не подписался

Соответствие — «Полное совпадение». Когда человек нажимает кнопку, боту приходит ровно тот текст, который на ней написан. Если условие и надпись на кнопке разойдутся хотя бы одной буквой или в одной из них будет «е» вместо «ё», нажатие ни во что не попадёт, и человек не получит ответа.

Калькулятор — та же строка, что в первом блоке:

invite = tg_create_chat_invite_link(ВАШ_НОМЕР_КАНАЛА, 1)

Сообщение — с переменной #{invite}:

Вот новая ссылка в канал «Название канала»:

#{invite}

Она работает один раз и только для вас.

Кнопки в этом блоке не нужны.

Почему ссылка создаётся именно здесь

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

Разделение на два блока это закрывает: ссылка, способная кого-то впустить, достаётся только тому, кто сам сказал, что ещё не подписан. А он заинтересован использовать её сам — иначе останется без канала и придёт за новой.

Тем, кто уже внутри, достаётся внутренняя ссылка из предыдущего шага — она никого не впускает и потому безопасна при пересылке.

Часть 4. Счётчики в Launch Stats

Теперь сделаем так, чтобы каждый шаг считался сам.

В Launch Stats откройте «Воронку» и у нужного этапа выберите источник «Вебхук (ссылка для бота)». Нажмите «Сохранить».

Выбор источника «Вебхук» у этапа воронки

После сохранения рядом с выпадающим списком появится значок копирования — по нему копируется ссылка этого этапа. У каждого этапа она своя, привязать один вебхук к двум этапам нельзя.

Значок копирования ссылки рядом с этапом

Этап «Старт в боте»

Вернитесь в блок с меткой predzapis_7, откройте вкладку «API-запрос» и заполните:

  • Тип запроса: GET
  • URL запроса: ссылка этапа, а в конце допишите ?client_id=#{platform_id}

Остальные поля не трогайте.

Вкладка «API-запрос»: тип GET и ссылка с client_id

Про client_id — это важно. #{platform_id} — идентификатор человека в Телеграме. Launch Stats запоминает его и при повторном обращении тем же идентификатором этап второй раз не засчитывает. Без этого хвоста человек, дважды нажавший «Старт», посчитается как два человека, и конверсия будет врать.

Проверка бессрочная и отдельная по каждому этапу: вернётся через месяц — всё равно останется одной единицей.

Этап «Вступил в канал»

Этот этап честнее считать по факту вступления, а не по числу выданных ссылок: часть людей ссылку получает, но в канал так и не заходит.

Создайте новый блок. В поле «Условие» нажмите «Конструктор условий» → вкладка «Мессенджеры»Telegram → в списке выберите «Добавлен новый пользователь (new_chat_member)» → «Заменить условие».

Выбор события «Добавлен новый пользователь» в конструкторе условий и настроенный запрос

Соответствие — «Полное совпадение»: это служебное событие, а не живой текст, нечёткое сравнение здесь только добавит ложных срабатываний.

Поле сообщения оставьте пустым. Блок срабатывает на событие внутри канала, и если в нём будет текст, бот начнёт публиковать его в канале при каждом вступлении.

Во вкладке «API-запрос» — ссылка этапа «Канал предзаписи», так же с ?client_id=.

Часть 5. Проверка

Проверяйте с телефона, полным путём, а не по отдельности.

  1. Откройте t.me/ваш_бот?start=predzapis_7, нажмите «Старт» — должно прийти сообщение со ссылкой
  2. Загляните в воронку: этап «Старт в боте» стал единицей
  3. Нажмите «Старт» ещё раз — должна остаться единица, а не двойка. Если стало две, значит не подставился client_id
  4. Войдите по ссылке в канал — этап «Вступил в канал» стал единицей
  5. Попробуйте открыть ту же ссылку повторно — она уже не работает, это правильно
  6. Напишите боту «не могу найти канал» — придут две кнопки
  7. Нажмите «Открыть канал» — канал открывается

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

Частые ошибки

Метка добавлена в общее условие рядом с /start. Тогда человек с рекламы попадает в старый сценарий. Нужен отдельный блок.

В сообщении нет #{invite}. Ссылка создаётся, но человек её не видит.

У бота нет права добавлять подписчиков. Ссылки не создаются вообще.

Адрес заполнен у обеих кнопок. Кнопка, ведущая в следующий блок бота, должна иметь пустое поле адреса.

В блоке события есть текст сообщения. Бот начнёт писать его в канал при каждом вступлении.

Забыт ?client_id= в ссылке вебхука. Цифры воронки завышены: один человек считается несколько раз.

Соответствие «Полное совпадение» у блока с ключевыми словами. Сработает только на голое слово, а живые формулировки пройдут мимо.

Что ещё стоит знать

Единица в воронке не снимается, если человек вышел из канала. Воронка фиксирует факт прохождения этапа — из этого считается конверсия. Текущее число подписчиков смотрите в самом Телеграме; разница между цифрами и будет оттоком за время прогрева.

Добровольный выход отследить нельзя. В списке событий есть только «удалён администратором».

Подтверждение вступления и одноразовая ссылка несовместимы. Это ограничение Телеграма: либо ссылка на одного человека, либо заявка с одобрением. Для описанной схемы подтверждение и не нужно — чтобы получить ссылку, надо пройти всю воронку.

Верхние этапы воронки (просмотры роликов, комментарии) настраивать вебхуками не нужно — в Launch Stats для них есть готовые источники, достаточно привязать ролики к нужной воронке в разделе «Контент».