Собрал в Telegram-боте информационный портал, профтест и новогоднюю игру с кубиком. Пул из 710 подарков выдаётся по одному, каждая выдача записана в базу, а весь портал живёт внутри одного сообщения.
Привет! Это портал Практикума.
Выберите раздел, я всё покажу здесь же, не засоряя чат.
Яндекс Практикум учит цифровым профессиям. Аудитория большая и разношёрстная: кто-то ещё только думает сменить работу, кто-то уже выбрал направление и ищет, с чего начать бесплатно.
Нужен был канал в Telegram, который закрывает сразу три вещи. Точка входа в бесплатные материалы и сервисную информацию. Промо-механики с подарками: книги, промокоды, доступы к курсам. И честная аналитика, кто и куда дошёл после нажатия кнопки.
Отдельное требование было к ощущению от бота. Не «простыня» переписки на сорок сообщений, а компактный интерфейс, в котором понятно где ты находишься.
Меню с разделами по бесплатным материалам, историям выпускников, консультациям и блогу. Навигация должна быть быстрой, без возврата на сайт.
Механика в рассылке, где пользователь реально бросает кубик, а результат броска решает какой подарок он получит.
Пул промокодов и курсов конечный. Нужно знать кто, когда и что получил, и не выдать один и тот же код дважды.
Понимать не только кто получил сообщение, а кто действительно дошёл до лендинга или курса, и по какой механике.
Помочь человеку определиться с направлением и дальше вести его контентом, а не сразу продавать обучение.
Бот не должен превращать чат в ленту. Ощущение мини-приложения, а не переписки, было отдельным требованием.
Обычный бот на каждое нажатие отправляет новое сообщение. Через двадцать кликов чат превращается в свалку, и человек уже не понимает, где он и как вернуться назад.
Все экраны портала собраны на одном сообщении с картинкой. Нажатие кнопки не шлёт новое сообщение, а переписывает подпись и клавиатуру у текущего. Пользователь остаётся в том же окне, история чата не растёт.
Побочный эффект оказался приятным. Раз экран один, то и навигация проектируется как в приложении: есть текущий раздел, есть кнопка назад, есть предсказуемая глубина. Бот перестаёт быть чатом и становится интерфейсом.
Бесплатные материалы про IT
Подборка вводных курсов, вебинаров и статей. Начать можно без оплаты и без установки чего-либо.
В Telegram есть встроенный анимированный кубик, и его результат приходит боту как обычное сообщение. Значит подарок можно разыграть по-настоящему, а не показать псевдослучайную анимацию с заранее известным исходом.
КНИГА
КНИГА
КНИГА
КНИГА
ПРОМОКОД
ИЛИ КУРС
ПРОМОКОД
ИЛИ КУРС
Рассылка приглашает бросить кубик
Пользователь получает новогоднее сообщение с предложением сыграть за подарок и переходит в бота.
Бросок уходит через Dice API
Это штатный анимированный кубик Telegram. Человек видит настоящую анимацию, результат приходит на бэкенд вместе с сообщением.
Бэкенд читает значение
От 1 до 4 бот дарит бесплатную книгу. Выпало 5 или 6, включается ветка с ограниченным пулом.
Из пула забирается следующий подарок
Сначала промокоды. Когда они заканчиваются, логика сама переключается на уникальные ссылки к бесплатному курсу.
Выдача фиксируется в базе
Дата, время, user_name, ссылка на диалог и сам код. После этого подарок помечен занятым и второму человеку не достанется.
Бросайте кубик.
От результата зависит подарок: книга, промокод на обучение или доступ к бесплатному курсу.
Механика нативна для мессенджера. Человек не заполняет поля и не переходит на лендинг, он просто играет там, где и так сидит. Отклик на такую рассылку заметно выше, чем на обычное «заберите подарок по ссылке».
Промокод, выданный дважды, это не мелкая неточность. Это либо человек с нерабочим кодом и обидой, либо лишние деньги на стороне клиента. Поэтому пул сделан не списком в таблице, а нормальной сущностью в базе.
Когда выпадает 5 или 6, серверная часть берёт следующий свободный промокод и сразу помечает его выданным. Если промокоды кончились, выдача без остановки переключается на пул уникальных ссылок.
Пользователь этой развилки не видит. Для него это просто подарок, который пришёл в чат.
| Дата и время | Пользователь | Диалог | Что выдано | Тип |
|---|---|---|---|---|
| 31.12 · 12:04 | @user_name | ссылка на чат | PRACTICUM-XXXX | промокод |
| 31.12 · 12:07 | @user_name | ссылка на чат | PRACTICUM-XXXX | промокод |
| 31.12 · 12:11 | @user_name | ссылка на чат | книга | без лимита |
| 31.12 · 12:15 | @user_name | ссылка на чат | course/uniq-link | курс |
Развилка на входе
Человек выбирает что ему ближе: не может определиться с профессией, хочет учиться бесплатно или нужна консультация.
Уточнение этапа
Только думает о смене профессии или уже выбрал направление. От этого зависит дальнейший тон и глубина вопросов.
Вопросы и баллы
Ответы складываются в счёт, по нему бот выдаёт персональный результат с конкретной рекомендацией.
Рекомендация и подборка
Например, бесплатный курс про выбор профессии в программировании, следом подборка вебинаров про IT и digital.
Догрев на следующий день
Уходит рассылка с материалами про рынок Казахстана и востребованные профессии. Ещё не продажа, но уже про деньги и карьеру.
Приглашение и заявка
Финал воронки: пройти бесплатные вводные части курсов за 7 дней с бонусной скидкой, и оставить заявку на консультацию если остались вопросы.
Три дня контента до первого предложения купить. Профтест закрывает главную боль аудитории EdTech, которая звучит как «я не знаю, кем хочу быть», и только после ответа на неё разговор переходит к обучению.
Заявка на консультацию стоит в конце как опция, а не как шлагбаум на входе. Кто готов, тот оставит.
Обычная ссылка в боте показывает только факт отправки сообщения. Дошёл ли человек до курса, было неизвестно. Чтобы это закрыть, между ботом и целевой страницей встала промежуточная HTML-страница.
Никак. Переход занимает около секунды и остаётся незаметным, страница не показывает ни заглушки, ни спиннера. Человек нажал кнопку в боте и оказался на курсе.
Важная деталь в реализации: редирект срабатывает и при ошибке API. Аналитика не должна ломать пользовательский путь, поэтому её сбой не может стать причиной того, что человек не дошёл до курса.
Кнопка с параметризованной ссылкой вместо прямого URL на лендинг.
Разбирает параметры, дёргает Chat2Desk, сразу отправляет дальше.
Клиенту проставлен тег кампании. Основа для сегментов и отчётов.
Курс или лендинг. Переход занимает секунду и не мешает пользователю.
Промо-кампания это короткий пик нагрузки на конечный ресурс. Всё интересное происходит на краях, а не в счастливом сценарии, поэтому края я закладывал сразу.
Когда промокоды исчерпаны, выдача не падает с ошибкой и не отдаёт пустоту. Логика сама переходит на пул уникальных ссылок к бесплатному курсу. Для пользователя это выглядит как обычный подарок.
В пике рассылки люди играют одновременно. Подарок забирается и помечается использованным в момент выдачи, поэтому два человека не могут получить одну и ту же строку из пула.
Редирект срабатывает и при ошибке Chat2Desk. Сбор данных полезен, но он не стоит того, чтобы человек не попал на курс. Аналитика в этой схеме подчинённая, а не главная.
В журнале рядом с кодом лежит ссылка на диалог в боте. Когда приходит вопрос «мой промокод не работает», поддержка поднимает конкретный случай за минуту, а не ищет по выгрузкам.
Главное в этом проекте не бот как таковой, а то что промо-кампания стала измеримой. Видно сколько подарков ушло и кому, какая механика привела человека на курс, и какой сегмент реально кликает. Механику с кубиком после этого можно честно сравнивать с любой другой, а не спорить о впечатлениях.
Нужен Telegram-бот с промо-механикой, учётом подарков и нормальной аналитикой? Напишите, разберём задачу.