Как построить воронку продаж в Telegram-боте
Практика3 минРедакция Innovialabs
Коротко
Разбейте путь клиента на этапы от /start до повторной покупки, метьте источник глубокой ссылкой, сегментируйте вопросами-кнопками, возвращайте отвалившихся короткими напоминаниями и записывайте каждый этап как событие, чтобы считать конверсию.
Короткий ответ
Воронка в боте — это цепочка этапов, где на каждом шаге бот предлагает одно понятное действие:
- вход по глубокой ссылке с меткой источника;
- первая польза — подборка, расчёт, подарок;
- квалификация — два-три вопроса кнопками;
- предложение под сегмент;
- заявка или оплата;
- дожимающие сообщения для тех, кто остановился;
- повторная покупка и рекомендации.
Каждый этап записывается как событие в базу — так вы видите, где люди уходят.
Карта воронки
| Этап | Что делает бот | Событие |
|---|---|---|
| Вход | принимает /start с меткой | start |
| Польза | отдаёт обещанный материал | lead_magnet |
| Квалификация | задаёт вопросы кнопками | qualified |
| Предложение | показывает товар или тариф | offer_viewed |
| Оплата | выставляет счёт или передаёт менеджеру | checkout, paid |
| Повтор | напоминает, даёт бонус | repeat |
Глубокие ссылки: откуда пришёл человек
Ссылка вида https://t.me/your_bot?start=ig_reels_oct открывает бота, и при нажатии «Старт» он получает команду /start ig_reels_oct. Параметр — до 64 символов из латиницы, цифр, _ и -. Делайте отдельную ссылку для каждого канала: сторис, блогер, сайт, листовка.
from aiogram.filters import CommandStart, CommandObject
@router.message(CommandStart(deep_link=True))
async def start_with_source(message: Message, command: CommandObject):
source = command.args # например "ig_reels_oct"
await save_first_source(message.from_user.id, source) # только если ещё не сохранён
await track(message.from_user.id, "start", source)
await message.answer("Привет! Подберём вариант за минуту?", reply_markup=start_kb)
Сохраняйте первый источник отдельно — иначе повторный переход по другой ссылке перезапишет происхождение клиента. С сайта метку можно передать в той же ссылке, сократив UTM до короткого кода.
Сегментация
Спросите только то, что меняет предложение: что интересует, для кого, какой объём или бюджет, город доставки. Каждый вопрос — кнопки, а не свободный ввод. Ответы храните как теги пользователя: по ним бот выбирает предложение, а вы — аудиторию для рассылки.
Дожимающие сообщения
Если человек остановился на этапе, через заданное время бот напоминает о себе с одним действием: «Оформить», «Задать вопрос менеджеру», «Не сейчас». Правила:
- писать можно только тем, кто запускал бота и не заблокировал его; ответ с ошибкой
403означает блокировку — отмечайте пользователя неактивным; - одно-два напоминания на этап, потом пауза;
- в каждом напоминании — кнопка «Не присылать напоминания»;
- задачи храните в базе и запускайте планировщиком, а не таймером в памяти — после перезапуска они не пропадут;
- соблюдайте лимиты Telegram на скорость отправки и при ответе
429ждите время изretry_after.
Оплата и повторная покупка
Оплату можно принять прямо в боте через Telegram Payments с платёжным провайдером, цифровые товары — через Telegram Stars, либо дать ссылку на оплату на сайте. После покупки воронка не заканчивается:
- подтвердите заказ и присылайте статусы;
- через время попросите оценку;
- напомните о повторной покупке, когда товар обычно заканчивается;
- дайте реферальную ссылку вида
?start=ref_12345, чтобы видеть, кто кого привёл.
Учёт конверсии
Достаточно одной таблицы событий:
CREATE TABLE funnel_events (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL,
event TEXT NOT NULL,
source TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
SELECT source, event, COUNT(DISTINCT user_id) AS users
FROM funnel_events
GROUP BY source, event
ORDER BY source, event;
Деление числа пользователей соседних этапов даёт конверсию шага, а разбивка по source показывает, какой канал приводит покупателей, а не просто подписчиков.
Частые ошибки
- продажа в первом сообщении — без пользы и вопросов человек уходит;
- одна ссылка на все каналы — невозможно понять, что работает;
- напоминания без отписки — растёт число блокировок;
- нет передачи менеджеру — сложный вопрос упирается в меню.