К содержимому
Андрей Афонин
Назад
case note

Telegram-квиз для лидогенерации: grammY + Postgres вместо ManyChat

Telegram-квиз на grammY + TypeScript с Postgres state machine вместо grammyjs/conversations. Hot/warm/cold классификация лидов. Продакшн за один день.

Telegram-квиз для лидогенерации: grammY + Postgres вместо ManyChat

Цветочная школа в Казани. Пять курсов в LMS, реклама не запускается — нет квалифицированных лидов. Нужен Telegram-бот для лидогенерации с квизом и автоматической сегментацией. Без ManyChat, без конструктора — кастомный стек.

Почему ManyChat и Tilda не подходят для квалификации лидов

Tilda-форма — посетитель заполнит и забудет. Нет контекста, нет диалога, нет сегментации. Строчка в таблице с именем и телефоном — и всё.

ManyChat — визуальный конструктор без кода. Простые автоответы работают. Кастомная логика — нет. Написать классификатор, который смотрит на комбинацию ответов и выдаёт сегмент, через клики в интерфейсе нельзя. Медленно и негибко.

Нужна своя логика: канал → бот → анкета → сегмент → уведомление владельцу. Это не собирается на конструкторе.

Postgres state machine вместо grammyjs/conversations

Первая попытка — плагин grammyjs/conversations. Описываешь диалог как функцию с await conversation.wait(). Выглядит красиво, пишется быстро.

Проблема: состояние хранится в памяти процесса. Бот упал, pm2 перезапустил — все незавершённые сессии потеряны. Пользователь дошёл до третьего вопроса, бот перезагрузился — начинает сначала. В продакшне неприемлемо.

Отказались. Перешли на Postgres state machine.

Три таблицы: promo_campaigns, promo_quiz_sessions, quiz_responses. Каждый шаг квиза — строка в базе. Текущий вопрос хранится в promo_quiz_sessions.current_step. Ответ — инсерт в quiz_responses. Бот падает — сессия сохранена. При следующем сообщении от пользователя бот читает состояние из базы и продолжает с нужного шага.

Это дольше писать. Зато надёжно.

Hot/warm/cold сегментация за 4 вопроса: как работает классификатор

Анкета — четыре вопроса. Цель: квалифицировать лид за секунду, прежде чем тратить время менеджера.

Вопросы про уровень опыта, готовность к покупке, бюджет и цель. Каждый ответ даёт балл. По сумме баллов классификатор присваивает сегмент:

СегментПризнакДействие
hotготов купить, бюджет есть, цель конкретнаянемедленное уведомление менеджеру
warmинтерес есть, нужен прогревпоказать программу, закрыть возражения
coldсмотрит, сравниваетминимальный приоритет
non_targetне наша аудиторияне тратим время

Результат — мгновенное уведомление в личку владельцу и менеджеру. Имя пользователя, Telegram-username, сегмент. Менеджер видит «hot» — звонит первым. Видит «cold» — ставит в прогрев. Никаких таблиц, никакого ручного разбора.

Telegram-бот для лидогенерации за один день: стек grammY + TypeScript

Утром — схема БД, миграции. После обеда — бот-хендлеры, subscription gate, классификатор. Вечером — smoke-тест в test-канале. На следующее утро — production-пост в канале школы. Live в 09:21.

Стек: grammY + TypeScript + Postgres + pm2 на Hetzner VPS.

Пишите: @afonin900.


Поделиться:

Предыдущая
Массовая рассылка в Telegram и VK через API: 6029 доставлено за день