EDTECH · TELEGRAM · ЯНДЕКС ПРАКТИКУМ · 2025

Портал
Практикума
в одном окне

Практикуму нужен был Telegram-бот, где человек находит бесплатные материалы, проходит профтест, а под Новый год бросает кубик за подарок. Я собрал его так, что весь портал помещается в одно сообщение. Каждый из 710 подарков уходил одному человеку и записывался в базу. В Chat2Desk было видно, кто на самом деле перешёл по ссылке, а не только кому дошло сообщение.

Telegram Bot API Dice API Chat2Desk База данных Redirect-аналитика
ГЛАВНОЕ МЕНЮ · TELEGRAM-БОТ
ЯП
Практикум
BOT

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

Бесплатные материалы про IT
Помощь в выборе профессии
Истории выпускников
Консультация с выпускниками
Отзывы о Практикуме
Что-то спросить
Блог Практикума
editCaption 1 СООБЩЕНИЕ · 7 ЭКРАНОВ
Схема интерфейса · нажатие обновляет то же сообщение
7
разделов портала
710
подарков в пуле
0
дублей при выдаче
1
сообщение на весь портал
01 · КЛИЕНТ

Аудитория разная,
вход нужен один

Яндекс Практикум учит цифровым профессиям. Аудитория у него большая и пёстрая. Один ещё думает, не сменить ли работу, другой уже выбрал направление и ищет, с чего начать бесплатно.

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

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

Сфера
EdTech, IT-образование
Формат
Telegram-бот + рассылки
Задача
Портал внутри бота, новогодняя игра с конечным пулом подарков, учёт каждой выдачи и аналитика переходов
Стек
Telegram Bot API · Dice API · editCaption
Chat2Desk API · база данных подарков
HTML-страница-редирект для трекинга

Ещё по теме - AI-боты и ИИ-агенты для CRM · Сопровождение amoCRM и Kommo · CRM и автоматизация в Петербурге

02 · ЧТО НУЖНО БЫЛО

Пять задач
и требование к интерфейсу

01

Портал внутри бота

Меню с бесплатными материалами, историями выпускников, консультациями и блогом. Ходить по нему быстро и не возвращаться на сайт.

02

Новогодняя игра с кубиком

Рассылка, в которой человек по-настоящему бросает кубик, и от выпавшего числа зависит его подарок.

03

Учёт каждого подарка

Промокодов и курсов ограниченное число. Надо знать, кто, когда и что получил, и не отдать один код двоим.

04

Аналитика переходов

Видеть не только, кому дошло сообщение, но и кто открыл лендинг или курс и после какой механики.

05

Профтест с воронкой

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

→

Аккуратный интерфейс

Чат не должен превращаться в ленту. Бот должен ощущаться как мини-приложение, а не как переписка.

03 · ИНТЕРФЕЙС

Весь портал
в одном сообщении

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

Как сделал - editCaption

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

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

ЧТО ЭТО ДАЁТ
✓ Чат не забивается служебными сообщениями
✓ Понятно, в каком разделе находишься
✓ Возврат в меню одним нажатием, без скролла
✓ Внутри Telegram это похоже на мини-приложение
ТО ЖЕ СООБЩЕНИЕ, ДРУГОЙ ЭКРАН
ЯП
Практикум
BOT

Бесплатные материалы про IT
Подборка вводных курсов, вебинаров и статей. Начать можно без оплаты и без установки чего-либо.

Вводные части курсов
Вебинары про IT и digital
← Назад в меню
Задать вопрос
message_id тот же ЭКРАН 2 / 7
04 · КУБИК

Новогодний кубик
вместо формы заявки

В Telegram есть встроенный анимированный кубик, и его результат приходит боту как обычное сообщение. Значит, подарок можно разыграть по-настоящему, а не крутить анимацию с заранее известным исходом.

1

КНИГА

2

КНИГА

3

КНИГА

4

КНИГА

5

ПРОМОКОД
ИЛИ КУРС

6

ПРОМОКОД
ИЛИ КУРС

  1. 01

    Рассылка приглашает бросить кубик

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

  2. 02

    Бросок уходит через Dice API

    Это штатный анимированный кубик Telegram. Человек видит настоящую анимацию, а результат приходит на бэкенд вместе с сообщением.

  3. 03

    Бэкенд читает значение

    Выпало от 1 до 4, и бот дарит бесплатную книгу. На 5 или 6 включается ветка с ограниченным пулом.

  4. 04

    Из пула забирается следующий подарок

    Сначала идут промокоды. Когда они кончаются, бот сам переходит на уникальные ссылки к бесплатному курсу.

  5. 05

    Выдача фиксируется в базе

    Дата, время, user_name, ссылка на диалог и сам код. С этого момента подарок помечен занятым, и второму человеку он не достанется.

МОМЕНТ БРОСКА
ЯП
Практикум
BOT

Бросайте кубик.
От результата зависит подарок - книга, промокод на обучение или доступ к бесплатному курсу.

6
DICE VALUE = 6
ВЕТКА: ПРОМОКОД
Забрать промокод
sendDice ОТВЕТ БОТА ПОСЛЕ АНИМАЦИИ
ПОЧЕМУ НЕ ФОРМА

Кубик родной для мессенджера. Человек не заполняет поля и не уходит на лендинг, он играет там, где и так сидит. Отклик на такую рассылку заметно выше, чем на привычное "заберите подарок по ссылке".

05 · УЧЁТ ПОДАРКОВ

710 подарков,
ни одного дубля

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

СОСТАВ ПУЛА
460
промокодов на обучение, каждый отдельной строкой в базе
250
уникальных ссылок на бесплатный курс, резервная ветка выдачи

Как уходит подарок

Когда выпадает 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 курс
Схема записи · значения обезличены
06 · ПРОФТЕСТ И ВОРОНКА

Сначала помочь
выбрать, потом продавать

  1. 01

    Развилка на входе

    Человек выбирает, что ему ближе. Не может определиться с профессией, хочет учиться бесплатно или ему нужна консультация.

  2. 02

    Уточнение этапа

    Только думает о смене профессии или уже выбрал направление. От этого зависят тон и глубина следующих вопросов.

  3. 03

    Вопросы и баллы

    Ответы складываются в счёт, по нему бот выдаёт персональный результат с конкретной рекомендацией.

  4. 04

    Рекомендация и подборка

    Например, бесплатный курс про выбор профессии в программировании, следом подборка вебинаров про IT и digital.

  5. 05

    Догрев на следующий день

    Уходит рассылка с материалами про рынок Казахстана и востребованные профессии. Ещё не продажа, но уже про деньги и карьеру.

  6. 06

    Приглашение и заявка

    В конце бот зовёт пройти бесплатные вводные части курсов за 7 дней с бонусной скидкой. Если вопросы остались, можно оставить заявку на консультацию.

ЛОГИКА ВОРОНКИ

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

Заявка на консультацию стоит в конце как опция, а не как шлагбаум на входе. Кто готов, тот оставит.

07 · АНАЛИТИКА ПЕРЕХОДОВ

Страница-редирект
на пути к лендингу

По обычной ссылке из бота видно только, что сообщение отправлено. Дошёл ли человек до курса, никто не знал. Поэтому между ботом и целевой страницей я поставил промежуточную HTML-страницу.

ССЫЛКА, КОТОРУЮ ПОЛУЧАЕТ ПОЛЬЗОВАТЕЛЬ
https://domain.ru/redirect?c2did=...&tag=...&link=... // на странице: // 1. читаем c2did, tag и конечный link из параметров // 2. POST /v1/tags/assign_to в API Chat2Desk, вешаем тег кампании на клиента // 3. редиректим на link, вне зависимости от ответа API

Как это выглядит для человека

Никак. Переход занимает около секунды и остаётся незаметным, страница не показывает ни заглушки, ни спиннера. Человек нажал кнопку в боте и оказался на курсе.

Редирект срабатывает и тогда, когда API ответил ошибкой. Аналитика не должна ломать человеку дорогу, поэтому если она упала, он всё равно попадает на курс.

Что появляется в отчётах

От какого клиента пришёл переход, по c2did, его номеру в Chat2Desk
Какой тег и какая кампания сработали
По какой ссылке человек в итоге прошёл
Сегменты в Chat2Desk строятся по кликам, а не по доставке
→
01

Бот / рассылка

В кнопке ссылка с параметрами, а не прямой адрес лендинга.

→
02

Redirect-страница

Разбирает параметры, дёргает Chat2Desk, сразу отправляет дальше.

→
03

Chat2Desk

У клиента появляется тег кампании, по нему строятся сегменты и отчёты.

04

Целевая страница

Курс или лендинг. Человек попадает туда примерно через секунду и ничего не замечает.

08 · КРАЙНИЕ СЛУЧАИ

Где такие механики
обычно ломаются

Промо-кампания это короткий пик нагрузки на конечный запас подарков. Всё интересное происходит на краях, а не в счастливом сценарии, поэтому края я закладывал сразу.

ПУЛ ЗАКОНЧИЛСЯ

Переключение на резервную ветку

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

ОДНОВРЕМЕННЫЕ БРОСКИ

Код помечается занятым при выдаче

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

АНАЛИТИКА УПАЛА

Трекинг не блокирует переход

Редирект срабатывает и при ошибке Chat2Desk. Данные полезны, но не ценой того, что человек не попадёт на курс. В этой схеме аналитика на втором месте.

РАЗБОР ЖАЛОБ

По коду находится диалог

В журнале рядом с кодом лежит ссылка на диалог в боте. Когда приходит вопрос "мой промокод не работает", поддержка поднимает конкретный случай за минуту, а не ищет по выгрузкам.

09 · ИТОГ

Что было
и что стало

7
разделов портала
в одном окне
710
подарков в пуле,
каждый на учёте
0
дублей и утечек
промокодов
~1с
на редирект с трекингом,
человек его не замечает
БЫЛО
× Материалы разбросаны, за каждым надо идти на сайт
× Промо сводится к форме или ссылке в рассылке
× Подарки считают вручную и рискуют выдать код дважды
× Видно только доставку сообщения, а не переход
× Бот засыпает чат сообщениями
СТАЛО
✓ Один вход в материалы, отзывы и консультации
✓ Игра с настоящим кубиком прямо в мессенджере
✓ Каждая выдача в базе, второй раз код не выдаётся
✓ Видно, кто дошёл до курса и после какой механики
✓ Одно окно вместо ленты переписки

Для меня главное здесь не сам бот. Промо-кампанию стало можно измерить. Видно, сколько подарков ушло и кому, какая механика привела человека на курс и какой сегмент на самом деле кликает. Кубик теперь можно сравнивать с любой другой механикой по цифрам, а не спорить о впечатлениях.

10 · СТЕК

Из чего
собрано

Telegram Bot API
Ядро бота · меню, сценарии, рассылки
editCaption
Интерфейс в одном окне · навигация без новых сообщений
Dice API
Штатный кубик Telegram · настоящий бросок и результат
База данных
Пул подарков и журнал выдач · защита от дублей
Chat2Desk API
Теги и сегменты · аналитика переходов
СЛЕДУЮЩИЙ ШАГ

Обсудим
задачу

Задумали промо в Telegram с подарками и не хотите потом выяснять, кому ушёл какой код? Напишите. Разберу механику и скажу, где она может сломаться на пике рассылки.

TELEGRAM @Edgar_Pucinsh EMAIL pucinsh@yandex.ru КЕЙС Яндекс Практикум · Telegram-портал, 2025