«Навигатор»: Telegram-бот, который превращает офлайн‑выступление в воронку продаж

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

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

Капитан на борту яхты — метафора «Навигатора»

Проект вырос из простого квиз‑бота (ТЗ на один экран) в полноценную маркетинговую систему из 8 модулей с планировщиком, сегментацией и ежедневной аналитикой. На каждого лида бот заводит отдельный «досье‑топик» в супергруппе — получается мини-CRM прямо внутри Telegram.

Стек: Python · aiogram 3 · aiosqlite · OpenAI · FastAPI · APScheduler · fpdf2.


Контекст и задача

Ко мне пришёл Роман Дусенко — психолог и стратег, который проводит офлайн‑мастермайнды для предпринимателей под метафорой «Яхтенная стратегия». Формат живой: спикер на сцене, зал с телефонами.

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

Задача формулировалась так:

  1. Дать участникам интерактивный опыт прямо во время выступления — чтобы бот был «бортовым журналом», а не раздаткой.
  2. На выходе выдать каждому персональный артефакт (PDF), который хочется сохранить.
  3. Не потерять аудиторию после мероприятия и привести её на платную диагностику.
  4. Дать спикеру инструмент вовлечения зала — визуализацию коллективного состояния на большом экране.

Вся концепция держится на морской метафоре: пользователь «всходит на борт», проходит «шторм», встаёт на «якорную стоянку» и «швартуется» с готовой стратегией. Эта метафора проросла в каждую формулировку интерфейса.


Что получилось: два интерфейса

1. Диалог в Telegram — «бортовой журнал»

Сердце проекта — сценарий‑разговор. Бот ведёт человека по 7 шагам: от социальной роли к внутреннему ощущению, через мини‑тест «Шторм», паузу‑медитацию на 60 секунд и финальный вопрос, который человек «забирает с собой».

Диалог с ботом в Telegram: приветствие, вопросы о роли, тест «Шторм», якорная стоянка

Ключевые 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 Дёшево и быстро для генерации разбора и валидации
PDF 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 в проекте выполняет три разные функции, и под каждую — свой промпт и свои параметры:

  1. Генерация «Лоции» для PDF. Системный промпт заставляет модель писать голосом самого спикера — спокойно, глубоко, без дешёвой мотивации, строго по 4 блокам (Диагноз → Штормовое предупреждение → Точка опоры → Ориентир). temperature 0.8 — нужна литературность.
  2. Валидация ответов. Модель на лету проверяет, осмысленный ли ответ дал человек. temperature 0.3 — здесь важна строгость, а не креатив.
  3. Генерация follow-up вопросов под конкретного пользователя в drip-цепочке.

Одна модель, три температуры, три промпта — дёшево и точно под задачу.


Результат

  • Из квиза — в маркетинговую систему. Стартовое ТЗ описывало квиз‑бота на один экран. Финальная система — 8 модулей: ядро на FSM, слой данных с миграциями, генерация PDF, три роли модели, персистентный планировщик, модуль дожима, аналитика и веб‑дашборд.
  • Замкнутая воронка. UTM-метки на входе (/start с deep-link из рекламы) → интерактив в зале → персональный PDF → 5-шаговый автодожим → запись на платную диагностику → ежедневный отчёт. Путь пользователя прослеживается от рекламного клика до продажи.
  • Двойная ценность мероприятия. Для участника — личный артефакт и опыт. Для спикера — инструмент вовлечения зала (облако слов) и работающая после мероприятия машина конверсии.
  • Заявленная цель — рост конверсии в 2–2,5 раза за счёт того, что контакт с аудиторией больше не обрывается на выходе из зала.

Чему научил проект

Главный вывод — техническая часть здесь вторична, первична режиссура. Пауза на 60 секунд, ответы одним словом, морская метафора в каждой кнопке — это не «фичи», это сценарий переживания, который синхронизирован с живым выступлением человека на сцене. Хорошая автоматизация тут не заменяет спикера, а усиливает момент, который он создаёт в зале.

А с инженерной стороны — стоило заранее заложить модульность. Когда проект вырос в пять раз относительно ТЗ, именно чистое разделение на модули (scheduler, conversion_messages, analytics, openai_assistant) позволило наращивать функциональность без переписывания ядра.

Роман Дусенко — психолог и стратег, для которого сделан проект

Открыть бота в Telegramt.me/QuizPDFgen_bot Исходники на GitHubtelegram-bot-quiz-pdf

Для того же клиента я делал и веб‑присутствие — продающие лендинги «Персональная стратегия» и «Семейная стратегия» с доставкой заявок в тот же Telegram.

Посмотреть вживую

Телеграм‑бот@QuizPDFgen_bot Исходники на GitHubNeuroQuizBot

Следующий шаг: хотите превратить офлайн‑выступление в воронку продаж — с ботом, PDF и дожимом, напишите мне в Telegram.

Комментарии

Войдите через Telegram, чтобы оставить комментарий:

Пока нет комментариев. Будьте первым.