«Навигатор»: Telegram-бот, который превращает офлайн‑выступление в воронку продаж
Кейс Telegram-бота, работающего синхронно с живым выступлением спикера: участники в реальном времени отвечают боту, он собирает персональную PDF-«карту стратегии» через модель, на экране в зале крутится live word-cloud, а после мероприятия бот сам догоняет аудиторию до платной диагностики. Мини-CRM на форум‑топиках, 8 модулей, персистентный планировщик.
Бот работает синхронно с живым офлайн‑выступлением: пока спикер ведёт мастермайнд для предпринимателей, участники в реальном времени отвечают боту, а он собирает из ответов персональную PDF-«карту стратегии». Параллельно на экране в зале крутится живое облако слов из ответов. После мероприятия бот сам догоняет людей серией сообщений и приводит их на платную диагностику.

Проект вырос из простого квиз‑бота (ТЗ на один экран) в полноценную маркетинговую систему из 8 модулей с планировщиком, сегментацией и ежедневной аналитикой. На каждого лида бот заводит отдельный «досье‑топик» в супергруппе — получается мини-CRM прямо внутри Telegram.
Стек: Python · aiogram 3 · aiosqlite · OpenAI · FastAPI · APScheduler · fpdf2.
Контекст и задача
Ко мне пришёл Роман Дусенко — психолог и стратег, который проводит офлайн‑мастермайнды для предпринимателей под метафорой «Яхтенная стратегия». Формат живой: спикер на сцене, зал с телефонами.
Проблема таких мероприятий классическая: энергия в зале есть, а конверсии в следующий продукт — нет. Люди уходят вдохновлённые, но контакт теряется, и никто не доходит до платной диагностики.
Задача формулировалась так:
- Дать участникам интерактивный опыт прямо во время выступления — чтобы бот был «бортовым журналом», а не раздаткой.
- На выходе выдать каждому персональный артефакт (PDF), который хочется сохранить.
- Не потерять аудиторию после мероприятия и привести её на платную диагностику.
- Дать спикеру инструмент вовлечения зала — визуализацию коллективного состояния на большом экране.
Вся концепция держится на морской метафоре: пользователь «всходит на борт», проходит «шторм», встаёт на «якорную стоянку» и «швартуется» с готовой стратегией. Эта метафора проросла в каждую формулировку интерфейса.
Что получилось: два интерфейса
1. Диалог в Telegram — «бортовой журнал»
Сердце проекта — сценарий‑разговор. Бот ведёт человека по 7 шагам: от социальной роли к внутреннему ощущению, через мини‑тест «Шторм», паузу‑медитацию на 60 секунд и финальный вопрос, который человек «забирает с собой».

Ключевые UX-решения:
- Гейткипер на входе. Доступ к боту только после подписки на канал спикера — проверка через
get_chat_member. Это конвертирует зал в подписчиков ещё до первого вопроса. - Ответы одним словом. Осознанное ограничение: короткие ответы легче давать в зале с телефона, и они же идеально ложатся в облако слов и в PDF.
- Пауза-«якорь» на 60 секунд. Единственное место, где бот просит ничего не писать. Это часть режиссуры выступления — синхронизация с моментом тишины на сцене.
2. Живое облако слов на экране в зале
Пока зал отвечает на вопрос «кем ты ощущаешь себя изнутри?», ответы стекаются в веб‑дашборд на FastAPI, который выводит облако слов и обновляется каждые 5 секунд. Спикер выводит его на проектор — зал видит своё коллективное «внутреннее состояние» в реальном времени.

Это самый сильный «вау‑эффект» мероприятия: человек пишет «пустота», и через 5 секунд видит на большом экране, что он не один.
Как это работает: путь пользователя
flowchart TD
A["/start<br/>(+ UTM-метка из рекламы)"] --> B{Подписан<br/>на канал?}
B -- Нет --> C["Экран-гейткипер:<br/>кнопка «Подписаться» + «Я подписался»"]
C --> B
B -- Да --> D["Приветствие +<br/>кнопка «Принять управление»"]
D --> E["Роль внешняя / внутренняя<br/>(один вопрос — один шаг FSM)"]
E --> F["Тест «Шторм»<br/>3 вопроса Да/Нет"]
F --> G{"Да ≥ 2?"}
G -- Да --> H["Сегмент: «Переход»"]
G -- Нет --> I["Сегмент: «Курс устойчив»"]
H & I --> J["Семья · Якорь (60 сек) ·<br/>Цена откладывания · Финальный вопрос"]
J --> K["Генерация PDF<br/>через модель"]
K --> L["Персональная «Карта стратегии»"]
L --> M["Запуск follow-up цепочки<br/>(планировщик)"]
style B fill:#1e3a5f,color:#fff
style G fill:#1e3a5f,color:#fff
style L fill:#166534,color:#fff
style M fill:#7c2d12,color:#fff
Каждый шаг — это отдельное состояние конечного автомата (FSM) на aiogram. Ответы пишутся в SQLite сразу, чтобы ничей прогресс не терялся, даже если человек закроет Telegram посреди сценария.
Архитектура системы
Проект осознанно разбит на изолированные модули — так его легче поддерживать и расширять. Здесь нет «одного файла на 3000 строк»: у планировщика, генерации PDF, работы с моделью и аналитики — свои зоны ответственности.
flowchart LR
subgraph TG["Telegram"]
U["Пользователь"]
end
subgraph CORE["Ядро бота (aiogram 3.x, async)"]
BOT["bot.py<br/>FSM-сценарий · хендлеры · админка"]
STATES["states.py<br/>состояния FSM"]
end
subgraph DATA["Данные"]
DB[("database.py<br/>aiosqlite<br/>users · scheduled_messages")]
end
subgraph AI["Интеллект"]
OAI["openai_assistant.py<br/>PDF-разбор · валидация"]
PDF["pdf_gen.py<br/>fpdf2 · кириллица"]
end
subgraph GROWTH["Маркетинг-автоматизация"]
SCH["scheduler.py<br/>APScheduler + SQLite"]
CONV["conversion_messages.py<br/>AI-разбор · drip · «зеркало»"]
ANALYTICS["admin_analytics.py<br/>воронка · лиды · CSV"]
end
subgraph WEB["Дашборд"]
FA["web.py — FastAPI<br/>/cloud + /api/words"]
end
U <--> BOT
BOT --> STATES
BOT <--> DB
BOT --> OAI
BOT --> PDF
OAI --> PDF
BOT --> SCH
SCH --> CONV
CONV --> OAI
CONV --> DB
BOT --> ANALYTICS
DB --> FA
FA -.->|облако слов| SCREEN["Экран в зале"]
style CORE fill:#0f2942,color:#fff
style GROWTH fill:#3b1a0f,color:#fff
style AI fill:#1a2e05,color:#fff
Технический стек
| Слой | Технология | Почему так |
|---|---|---|
| Бот | aiogram 3.x (async) | Быстрый отклик при одновременной работе всего зала |
| Хранилище | SQLite + aiosqlite | Ноль инфраструктуры, персистентность из коробки |
| Модель | GPT-4o-mini | Дёшево и быстро для генерации разбора и валидации |
| fpdf2 + Roboto TTF | Полная поддержка кириллицы, кастомная вёрстка | |
| Планировщик | APScheduler + SQLite job store | Отложенные задачи переживают рестарт |
| Дашборд | FastAPI + wordcloud2.js | Лёгкий live-экран без сборки фронта |
Самое интересное: система, которая продаёт после мероприятия
Изначальное ТЗ заканчивалось на выдаче PDF. Но выдать PDF — это ещё не продажа. Поэтому вторая, большая, часть проекта — автоматическая воронка дожима, которая запускается в момент, когда человек получает свою «карту стратегии».
timeline
title Follow-up цепочка после выдачи PDF
Через 30 минут : AI-разбор ответов + CTA «Записаться на диагностику»
День 1 : Провокационный вопрос (сгенерирован под ответы человека)
День 3 : История клиента с похожим запросом
День 7 : Прямое предложение диагностики
День 7 : «Зеркало» — возврат к собственному финальному вопросу
Брошенная сессия : Реактивация тех, кто не дошёл до конца
Как это устроено:
- Персистентный планировщик. APScheduler с job store в SQLite. Даже если бот перезапустят, все запланированные «касания» останутся в силе.
- Сегментация на лету. Результат теста «Шторм» делит аудиторию на сегменты «Переход» и «Курс устойчив». Тексты дожима и промпты для этих сегментов разные.
- Персонализация каждого сообщения. Провокационный вопрос на день 1 генерируется под конкретные ответы человека (его роль, его главный вопрос), а не берётся из шаблона.
- Реактивация брошенных. Отдельная задача раз в час находит тех, кто начал, но не закончил сценарий, и мягко возвращает их — один раз, без спама.
- Ежедневный отчёт спикеру. Каждое утро в 10:00 по Москве в админ‑группу падает сводка по воронке за сутки.
Что видит спикер каждое утро
Пример суточной сводки (цифры иллюстративные):
📊 Отчёт по воронке за 24 часа:
• Новых запусков: 128
• С рекламы: 74
• Дошли до PDF: 91 (конверсия: 71,1%)
Сегментация:
• Сегмент «Переход»: 63
• Сегмент «Курс устойчив»: 28
• Ответили на «Зеркало»: 34
• 🎯 Записались на диагностику: 11
Плюс команды /leads (горячие лиды с сегментацией) и /export (выгрузка базы в CSV) — чтобы спикер и его команда работали с аудиторией руками, когда это нужно.
CRM внутри Telegram: отдельный «досье‑топик» на каждого лида
Отдельная фича, которую особенно оценила команда спикера, — автоматическая мини-CRM прямо в Telegram, без единой внешней системы. Как только новый человек запускает бота, тот создаёт под него персональный топик в супергруппе‑форуме и складывает туда всю воронку по мере прохождения: откуда пришёл, каждый ответ на каждый вопрос и, в финале, сгенерированный PDF.
Менеджеру не нужно никуда заходить и ничего выгружать — он открывает Telegram, видит список тем с именами лидов и внутри каждой полное досье: контекст человека, его роль, страхи, главный вопрос и готовую стратегию. Можно писать заметки прямо в топике.
Как это устроено технически:
sequenceDiagram
participant U as Пользователь
participant B as Бот
participant DB as SQLite
participant G as Супергруппа-форум
U->>B: /start (+ UTM)
B->>DB: topic_id есть?
alt Топик ещё не создан
B->>G: create_forum_topic("Имя (@username)")
G-->>B: message_thread_id
B->>DB: сохранить topic_id
end
B->>G: 🚀 Новый лид · ID · источник → в топик
loop Каждый шаг сценария
U->>B: ответ одним словом
B->>G: 💬 Вопрос + ответ → в тот же топик
end
B->>G: 📄 Готовый PDF-документ → в топик
Note over G: Топик лида = полное досье:<br/>путь, ответы, стратегия
Ключевые решения:
- Идемпотентность.
topic_idкэшируется в памяти и дублируется в БД — на одного пользователя всегда ровно один топик, даже после рестарта бота. - Отказоустойчивость. Если создать топик не удалось (например, бот потерял права админа), логирование мягко деградирует и не ломает основной сценарий пользователя.
- Ноль внешней инфраструктуры. Вся «CRM» живёт в том же Telegram, где работает команда — не нужно учить менеджеров новому интерфейсу и платить за отдельную систему.
Модель внутри: три роли одной модели
GPT-4o-mini в проекте выполняет три разные функции, и под каждую — свой промпт и свои параметры:
- Генерация «Лоции» для PDF. Системный промпт заставляет модель писать голосом самого спикера — спокойно, глубоко, без дешёвой мотивации, строго по 4 блокам (Диагноз → Штормовое предупреждение → Точка опоры → Ориентир).
temperature 0.8— нужна литературность. - Валидация ответов. Модель на лету проверяет, осмысленный ли ответ дал человек.
temperature 0.3— здесь важна строгость, а не креатив. - Генерация follow-up вопросов под конкретного пользователя в drip-цепочке.
Одна модель, три температуры, три промпта — дёшево и точно под задачу.
Результат
- Из квиза — в маркетинговую систему. Стартовое ТЗ описывало квиз‑бота на один экран. Финальная система — 8 модулей: ядро на FSM, слой данных с миграциями, генерация PDF, три роли модели, персистентный планировщик, модуль дожима, аналитика и веб‑дашборд.
- Замкнутая воронка. UTM-метки на входе (
/startс deep-link из рекламы) → интерактив в зале → персональный PDF → 5-шаговый автодожим → запись на платную диагностику → ежедневный отчёт. Путь пользователя прослеживается от рекламного клика до продажи. - Двойная ценность мероприятия. Для участника — личный артефакт и опыт. Для спикера — инструмент вовлечения зала (облако слов) и работающая после мероприятия машина конверсии.
- Заявленная цель — рост конверсии в 2–2,5 раза за счёт того, что контакт с аудиторией больше не обрывается на выходе из зала.
Чему научил проект
Главный вывод — техническая часть здесь вторична, первична режиссура. Пауза на 60 секунд, ответы одним словом, морская метафора в каждой кнопке — это не «фичи», это сценарий переживания, который синхронизирован с живым выступлением человека на сцене. Хорошая автоматизация тут не заменяет спикера, а усиливает момент, который он создаёт в зале.
А с инженерной стороны — стоило заранее заложить модульность. Когда проект вырос в пять раз относительно ТЗ, именно чистое разделение на модули (scheduler, conversion_messages, analytics, openai_assistant) позволило наращивать функциональность без переписывания ядра.

Для того же клиента я делал и веб‑присутствие — продающие лендинги «Персональная стратегия» и «Семейная стратегия» с доставкой заявок в тот же Telegram.
Посмотреть вживую
Телеграм‑бот@QuizPDFgen_bot Исходники на GitHubNeuroQuizBotСледующий шаг: хотите превратить офлайн‑выступление в воронку продаж — с ботом, PDF и дожимом, напишите мне в Telegram.








Комментарии
Войдите через Telegram, чтобы оставить комментарий:
Пока нет комментариев. Будьте первым.