Legan Studio
Все статьи
~ 19 мин чтения

Бот для онлайн-школы: уроки, домашки, проверки

Разбираем, как собрать бот для онлайн-школы в Telegram: уроки, домашние задания, автопроверка, чаты потоков и интеграция с GetCourse/Skillspace.

  • Telegram
  • онлайн-школа
  • сценарии
  • автоматизация

Бот для онлайн-школы — отдельная категория, где Telegram реально становится главной платформой обучения, а не «вспомогательным каналом для уведомлений». Лидген, прогрев, продажа, обучение, домашки, проверки, сертификат, ретеншн — всё это можно собрать так, что студент не уходит в стороннюю LMS и не теряется между WhatsApp, почтой и личным кабинетом. Разберём, что входит в типовой продукт, как считать экономику и где чаще всего ломается воронка.

Какие задачи закрывает бот для онлайн-школы

В порядке роста сложности и зрелости продукта:

  1. Лидген — квиз «какой курс подойдёт», запись на бесплатный вебинар, выдача лид-магнита.
  2. Прогрев — автоворонка из 5–9 касаний с кейсами, отзывами, преподавателями.
  3. Продажи и оплата — оффер, тарифы, рассрочка, подарки, дедлайн спецпредложения.
  4. Доступ к платному контенту — каналы и чаты по тарифу, подписка через Telegram Stars или ЮKassa.
  5. Расписание и напоминания — про уроки, дедлайны, эфиры, утренний дайджест дня.
  6. Уроки и материалы — структурированная подача через бот, Mini App или гибрид.
  7. Домашние задания — приём, проверка (автоматическая или куратором), обратная связь.
  8. Сообщества — чаты потоков, кураторы, нетворкинг, расписание группы.
  9. Геймификация — баллы, ачивки, стрики, лидерборд группы.
  10. Сертификаты — автогенерация PDF и публичная страница проверки по QR.
  11. Аналитика прогресса — для студента (dashboards) и для школы (cohort retention).
  12. Ретеншн и апсейл — следующий курс, скидка лояльности, продление подписки, реферальная программа.

Не всем нужен весь стек. Обычно на старте собирают «лидген + прогрев + оплата + уроки + домашки + чаты + напоминания» как ядро, а сертификаты, геймификацию и AI-проверку накручивают на втором этапе, когда воронка уже стабильна.

Воронка лида: квиз, вебинар, бесплатный урок

Бот закрывает три классических верхних канала EdTech, и каждый из них работает заметно лучше формы на сайте.

Квиз «какой курс вам подходит» — 5–8 вопросов с инлайн-кнопками, на выходе рекомендация направления и предложение записаться на консультацию или бесплатный урок. Конверсия из показа квиза в заявку — стабильно 18–35%, выше любой формы на лендинге. Каждый вопрос — отдельное сообщение с состоянием, ответы пишем в quiz_session, чтобы при выпадении пользователь смог продолжить с того же шага. Финальный экран — карточка курса с двумя кнопками: «Записаться на демо» и «Узнать подробнее».

Бесплатный урок или демо-занятие — самый сильный конвертер для языковых школ и творческих направлений. Ученик получает реальный мини-урок (15–25 минут видео + короткое задание + автопроверка) и видит формат. Конверсия в платный после качественного бесплатного урока — 12–22%, что в 3–5 раз выше, чем после простого PDF-магнита.

Запись на бесплатный вебинар — карточка эфира с датой, программой и кнопкой «Записаться». После записи бот добавляет напоминания: за сутки, утром в день эфира, за час, за 10 минут со ссылкой на трансляцию. Для intensive-формата — пинг каждые 30 минут в день эфира с обратным отсчётом. После вебинара рассылка записи в течение часа и спецпредложение на 24–72 часа с убывающей скидкой.

Канал лидгенаКонверсия в заявкуСтоимость лидаПрогрев нужен
Квиз в боте18–35%низкаяда, 3–5 касаний
Бесплатный урок/демо30–55% забирают, 12–22% покупаютсредняяда, серия после демо
Запись на бесплатный вебинар25–40% от регистрации в просмотрсредняяда, серия после эфира
PDF лид-магнит60–80% забирают, 5–10% покупаютнизкаяда, длинная серия
Прямой оффер «купить курс»1–3%низкаянет, но дорого
Консультация с менеджером8–15% доходимостьвысокаякороткая, 2 касания

Прогрев: автоворонка серии писем

Прогрев — это последовательность сообщений, отправляемых по таймеру или по событию (квиз пройден, демо-урок завершён, лид-магнит скачан). Оптимальная длина для среднего чека 30–80 тысяч ₽ — 7–9 касаний за 10–14 дней. Каждый шаг описывается записью в БД:

# Псевдокод шага автоворонки
{
  "funnel_id": "warmup_english_a2",
  "step": 4,
  "delay_after_prev": 86400,        # секунды от предыдущего шага
  "send_window": [9, 21],           # часы по таймзоне студента
  "message_template": "case_alex.md",
  "media": ["video/case_alex.mp4"],
  "buttons": [
    {"text": "Хочу так же", "callback": "step:4:cta"},
    {"text": "Подробнее о курсе", "url": "https://t.me/school_bot?start=course_a2"}
  ],
  "skip_if_tag": ["bought", "unsubscribed"]
}

Сценарии, которые обязательно должны быть в воронке:

  • кейс выпускника с цифрами «до/после» (для языковой школы — уровень CEFR + видео-интервью);
  • знакомство с преподавателем (видео-визитка 60–90 секунд, желательно с акцентом на методологию);
  • разбор частых возражений (FAQ-разворот: «у меня нет времени», «я уже пробовал», «дорого»);
  • бесплатный мини-урок как пример качества контента;
  • отзывы текущего потока с фото, должностью, городом;
  • дедлайн спецпредложения за 48–24–6 часов с обратным отсчётом.

skip_if_tag критичен: после покупки человек должен мгновенно вылететь из прогрева, иначе будет получать «купите наш курс» уже будучи студентом — самый раздражающий баг EdTech и главная причина отписок.

Продажи: тарифы, оплата, подписка

Тарифная сетка в EdTech почти всегда трёхуровневая. Бот показывает её одним сообщением с тремя кнопками — длинные простыни в чате не работают.

ПараметрБазовыйСтандартПремиум
Доступ к урокам6 месяцев12 месяцевбессрочно
Чат потокадада+ закрытый чат с преподавателем
Проверка ДЗавтопроверкакуратор за 48 чличный куратор + 1×1 созвон
Обратная связьобщаяв течение 48 чв течение 24 ч
Сертификатэлектронныйэлектронный + PDF+ рекомендательное письмо
Гарантия результатанетнетда, в договоре
Ценаотх 1.7х 3.0

Тариф — атрибут заказа, не пользователя. Студент может купить «стандарт», потом доплатить до «премиума» — это два отдельных платежа на один enrollment_id, с пересчётом разницы и логированием апгрейда.

Способы оплаты и подписка

МетодКомиссияПодходит дляОсобенности
ЮKassa (карта + СБП)2.4–2.8%основная масса оплатстандарт, рекуррент опционально
СБП напрямую0.4–0.7%мобильные, средний чектребует своего шлюза
ЮKassa рекуррент2.8–3.2%подписочные моделиавтосписание раз в месяц/неделю
Telegram Stars30% Telegramмикро-курсы, доступ к контентубез вывода в РФ напрямую
Долями (BNPL 4 платежа)4–6%чек 5 000–60 000 ₽без процентов клиенту
Тинькофф рассрочка 3–24 месбанк удерживает 7–18%чек 30 000–300 000 ₽нужна анкета и КИ
Halva от Совкомбанка5–10% магазинусредний чеккарта Halva у клиента
Ручной счёт от ИП/ООО0% эквайрингакорпоративная оплатадолго, нужен договор

Подписочная модель (доступ к библиотеке уроков с автопродлением) реализуется через рекуррентные списания ЮKassa: при первой оплате клиент даёт согласие на автосписание, дальше бот раз в период инициирует списание и обрабатывает результат. За 3 дня до списания — напоминание с кнопкой «отменить подписку», иначе чарджбеки и злость в отзывах.

Доступ к платному контенту

Базовый сценарий — после оплаты курса пользователь добавляется в закрытый канал/чат через одноразовую ссылку (createChatInviteLink с member_limit: 1). При окончании доступа — banChatMember плюс unbanChatMember, чтобы можно было снова вступить после оплаты.

Бот должен быть админом канала с правами «приглашать» и «банить». Обязательно регулярная сверка списков участников канала с активными подписками, чтобы не было «зайцев»: каждые 6 часов фоновая задача читает getChatMember для каждого студента и сверяет с таблицей enrollments. Расхождения логируются и обрабатываются вручную (часто это перевод на другой тариф или пропущенный возврат).

Проверка доступа к конкретному уроку — горячая операция, вызывается на каждый клик «Открыть урок» в Mini App или боте. Кэшируем агрессивно, инвалидируем по событию оплаты или окончания подписки:

async def can_access_lesson(user_id: int, lesson_id: int) -> bool:
    cache_key = f"access:{user_id}:{lesson_id}"
    cached = await redis.get(cache_key)
    if cached is not None:
        return cached == "1"

    enrollment = await db.fetchrow(
        """
        SELECT e.tariff, e.expires_at, l.tariff_required, l.released_at
        FROM enrollments e
        JOIN lessons l ON l.course_id = e.course_id
        WHERE e.user_id = $1 AND l.id = $2 AND e.status = 'active'
        """,
        user_id, lesson_id,
    )
    if not enrollment:
        ok = False
    elif enrollment["expires_at"] and enrollment["expires_at"] < datetime.utcnow():
        ok = False
    elif enrollment["released_at"] > datetime.utcnow():
        ok = False  # урок ещё не открыт по расписанию потока
    else:
        ok = TARIFF_LEVEL[enrollment["tariff"]] >= TARIFF_LEVEL[enrollment["tariff_required"]]

    await redis.setex(cache_key, 300, "1" if ok else "0")
    return ok

Уроки, материалы и подача через бот

Тут есть выбор:

  • Чисто бот — последовательность сообщений с текстом, видео и PDF. Подходит для микро-курсов и марафонов до 10–15 уроков.
  • Mini App — полноценный «личный кабинет студента» с разделами, прогрессом, конспектами. Подходит для серьёзных курсов на 30+ часов.
  • Гибрид — бот ведёт коммуникацию (напоминания, домашки, чат), Mini App показывает уроки и прогресс. Самый частый вариант для зрелых школ.

Видео обычно лежат не в Telegram, а на CDN (отдельный плеер в Mini App, чтобы не упереться в лимиты Telegram на размер файлов и не тормозить мобильных пользователей). Текстовые конспекты дублируют видео для тех, кто учится с телефона в шумных местах. Тесты после урока удобно делать поллами Telegram (sendPoll с is_anonymous=False, type='quiz') — у них есть встроенная проверка ответа и аналитика прохождения.

Расписание, напоминания и реактивация

Самая дешёвая вещь, которая поднимает completion rate на 15–25%, — это умные напоминания. Минимальный набор:

  • Утренний дайджест — в 9:00 по таймзоне студента: «сегодня урок 7, длительность 22 минуты, дедлайн ДЗ — завтра 23:59».
  • За час до занятия — для групповых живых уроков и эфиров.
  • Через 10 минут после старта — если студент ещё не открыл урок.
  • За 24/6/1 час до дедлайна ДЗ — с прямой кнопкой «Открыть задание».
  • Reactivation спящих — если студент не заходил 5 дней, бот пишет «вы остановились на уроке X, продолжим?». Через 14 дней — оффер «заморозить курс на месяц». Через 30 дней — личный куратор с разбором причин.

Все напоминания учитывают таймзону студента (хранится в профиле, при первом контакте определяется по language_code и уточняется в боте) и тихий час 22:00–9:00 — иначе просыпаешься в 6 утра от «дедлайн через час» и отписываешься.

Домашние задания и AI-проверка

Самая ценная часть после контента. Бот умеет:

  • отдавать задание и принимать ответ (текст, фото, файл, voice, ссылка);
  • разбивать одно задание на несколько шагов;
  • автоматически проверять простые форматы (тесты, ключи, регулярки);
  • передавать сложные ответы куратору на проверку с очередью и SLA;
  • собирать дедлайны и напоминать о них;
  • вести историю проверок и комментариев в одном треде.

Для языковых школ отдельно работает AI-проверка voice-сообщений: транскрипция через Whisper, сравнение с эталоном, оценка произношения через специализированные API (например, Speechace или Azure Pronunciation Assessment). Студент записывает фразу — бот возвращает оценку 0–100 по словам, подсвечивает проблемные звуки и предлагает повторить. По нашим замерам, такая обратная связь поднимает completion rate в speaking-курсах на 30–40% против «куратор послушает в течение 48 часов».

Маршрутизация ответов:

@router.message(StudentStates.HOMEWORK_SUBMIT)
async def receive_homework(msg: Message, state: FSMContext):
    data = await state.get_data()
    lesson_id = data["lesson_id"]
    enrollment = await db.get_enrollment(msg.from_user.id, lesson_id)

    submission_id = await save_artifacts(msg, lesson_id)

    if enrollment.tariff == "basic":
        await tasks.enqueue("autocheck", submission_id)
    elif msg.voice and enrollment.course_type == "language":
        await tasks.enqueue("ai_pronunciation_check", submission_id)
    else:
        await tasks.enqueue("route_to_curator", submission_id, enrollment.curator_id)

    await msg.answer("ДЗ принято. Результат пришлёт бот в течение 48 часов.")
    await state.clear()

Без дедлайнов и напоминаний завершаемость курса падает в 2–3 раза — это самое дешёвое улучшение программы из возможных.

Геймификация: стрики, баллы, лидерборд

Несколько простых механик, дающих заметный прирост вовлечения:

  • Баллы за выполненные задания, активность в чате, просмотренные уроки;
  • Стрики — «5 дней подряд занимался» с visual-счётчиком и бонусом за 7/14/30 дней;
  • Бейджи и ачивки в профиле («первая сданная домашка», «без пропусков 2 недели», «лучший по speaking»);
  • Лидерборд группы или потока — обновляется раз в день, показывает топ-10 и место текущего студента;
  • Мини-награды — доступ к бонусным урокам, скидка на следующий курс, мерч.

Важно не переборщить: геймификация должна усиливать обучение, а не отвлекать. Лидерборд хорошо заходит на коротких марафонах (до 4 недель) и плохо на длинных полугодовых программах, где постоянное «вы 47-й из 200» демотивирует средний сегмент. Для длинных курсов лучше работает персональный progress bar и стрики без публичного сравнения.

Чат-канал группы, куратор, расписание

Параллельно с уроками работает чат потока с куратором. Куратор в боте получает:

  • ленту новых тикетов и вопросов с тегами по темам;
  • кнопки «Ответить», «Передать», «Закрыть», «Эскалировать преподавателю»;
  • SLA-таймер по тарифу (24 часа в стандарте, 4 часа в премиуме);
  • автоматическую перекидку дежурства при разнице таймзон ±5 часов;
  • дайджест на утро: «вчера: 12 ответов, среднее время 38 минут, 2 эскалации».

В чате потока бот публикует расписание недели (закреплённое сообщение, обновляется автоматически), напоминания о ДЗ, объявления преподавателя и поздравления выпускников. Без модерации (антиспам, фильтры мата, лимит сообщений в минуту) токсичные участники быстро убивают атмосферу — модерация обязательна с первого дня.

Сертификаты с QR-проверкой

Сертификат должен выдаваться автоматически при выполнении 80% программы (порог настраивается). PDF содержит имя студента, название курса, даты, подпись преподавателя, уникальный cert_id и QR-код со ссылкой на публичную страницу проверки. Публичная страница /cert/cert_id — обязательна, на ней имя выпускника, курс, даты, кнопка «скачать PDF». Без публичной проверки сертификат теряет смысл для HR.

Тонкий момент: сертификаты «государственного образца» можно выдавать только при наличии лицензии Рособрнадзора. Большинство EdTech продаёт «информационно-консультационные услуги» и выдаёт сертификат школы — это законно при правильно прописанной оферте.

Платформы и интеграции

Чаще всего онлайн-школа уже работает на готовой LMS, и бот ходит к ней через API. Карта совместимости:

ПлатформаAPIWebhooksОсобенностиЗрелость интеграции
GetCourseREST + экспорт CSVограниченныебольшая аудитория, медленный APIвысокая
Skillbox-style LMSRESTдадля крупных школ, гибкие тарифывысокая
AntiTrainingRESTбазовыесильна воронками, средний LMSсредняя
Tilda EducationREST через Zapierчерез Zapierпростой старт, ограниченный LMSсредняя
Bizon365RESTдасилён вебинарами и автовебинарамивысокая
MoodleREST + LTIчерез плагинopen-source, академиявысокая
iSpring LearnRESTдакорпоративное обучениевысокая
amoCRMRESTдаCRM-слой поверх любой LMSвысокая
Битрикс24RESTдаCRM плюс порталывысокая

Универсальное правило: у школы всегда есть внутренняя БД студентов и заказов, а синхронизация с LMS/CRM идёт асинхронно (очередь плюс ретраи). Если GetCourse упал на час, бот продолжает принимать оплаты и ставит задачи в очередь, синхронизация догоняется потом. Прямой синхронный «создать заказ в GetCourse при оплате» — гарантированный downtime школы при любой проблеме у платформы.

Ретеншн и апсейл

EdTech живёт повторными покупками. Студент, прошедший один курс, в 4–7 раз дешевле в привлечении на второй, чем холодный лид.

  • через 7 дней после получения сертификата — рассылка про следующий курс с предзаказной скидкой 15–25%;
  • через 30 дней — приглашение в клуб выпускников (закрытый чат, ежемесячные эфиры);
  • скидка лояльности — автоматически 10–20% всем выпускникам на любой курс школы;
  • продление подписки на платформу или клуб — за 14 дней до окончания напоминание с кнопкой «продлить со скидкой 30%»;
  • реферальная программа — выпускник приводит друга, получает 10% от его оплаты бонусами.

Сегментация обязательно по специализации: выпускник «английского A2» хорошо берёт «английский B1», но плохо — «бизнес-английский» с другим преподавателем. Без сегментации рассылки превращаются в спам и выжигают базу.

Метрики онлайн-школы

МетрикаФормулаНорма для EdTech
Conversion в платныйкупили / лиды3–8% (холодный трафик), 12–22% (после демо)
Course completion rateпрошли 80% / купили25–45% (без бота), 40–65% (с ботом)
Lesson drop-offушли после урока N / дошлиплавная кривая без обрывов
Homework submission rateсданные ДЗ / общее число50–80%
Retention по неделям курсаактивны на неделе N / стартовали75% на неделе 2, 50% на неделе 6
NPS курса(промоутеры − критики) / всего × 10040 и выше
Retention на следующий курскупили второй / получили сертификат15–30% за 90 дней
LTV студентасумма всех покупоксредний чек × 1.4–2.2 за 12 мес
ROI на лида(выручка − затраты) / затраты × 100150% и выше
Cost per Leadбюджет / лидыот 50 до 800 ₽ по каналу

Когортный анализ retention по урокам — самая полезная картинка. Если на уроке 4 «обрыв» 30% — там либо плохой контент, либо слишком сложная домашка, либо технический баг с воспроизведением видео. Без когорт это не увидеть.

Чек-лист готовности школы к запуску

  • Согласие на ПДн собирается до первой реальной обработки, версия и consent_at в БД.
  • Уведомление оператора ПДн подано в РКН.
  • Уведомление о трансграничной передаче (Telegram) подано в РКН.
  • Оферта на оказание услуг опубликована и принимается до оплаты.
  • Все три тарифа имеют разные entitlements в БД, не «один прайс с примечанием».
  • Оплата через ЮKassa плюс СБП плюс Долями плюс Тинькофф рассрочка.
  • Webhook оплаты идемпотентный (уникальный индекс по payment_id).
  • После оплаты студент в течение минуты получает доступ к каналу и первому уроку.
  • Автоворонка прогрева имеет skip_if_tag = ['bought'].
  • ДЗ принимается во всех форматах (текст/фото/файл/voice) и сохраняется в S3.
  • Дедлайны ДЗ имеют напоминания за 24/6/1 час с учётом таймзоны.
  • Очередь куратора с SLA-таймером и эскалацией на дежурного.
  • Сертификат генерируется автоматически при 80%+ выполнения.
  • Публичная страница проверки сертификата по QR работает.
  • Reactivation спящих студентов через 5/14/30 дней.
  • Сегментированные рассылки выпускникам с отпиской.
  • Аналитика по когортам, completion, NPS, ROI канала.

Итого

Бот для онлайн-школы — это сквозная воронка от лид-магнита до сертификата и апсейла, а не просто канал уведомлений. Ядро — лидген (квиз, бесплатный урок, вебинар), прогрев, оплата с тремя тарифами и рассрочкой, доступ к закрытому контенту, домашние задания с автопроверкой и AI-проверкой voice, чаты потоков, сертификаты с QR-проверкой и сегментированный ретеншн. На зрелом продукте бот становится главной платформой студента, а LMS остаётся бэкендом для админов и методологов. Сроки разработки — 4–8 недель для типового набора, бюджет обычно 250 000–800 000 ₽ в зависимости от глубины Mini App, количества интеграций и сложности геймификации.

Частые вопросы

Какие задачи закрывает Telegram-бот для онлайн-школы?

Сквозная воронка от лид-магнита до апсейла: лидген (квиз «какой курс подойдёт», бесплатный урок/демо, запись на бесплатный вебинар, выдача PDF), прогрев автоворонкой из 7–9 касаний, продажа с тремя тарифами и рассрочкой (Долями, Тинькофф, Halva), доступ к платному контенту через закрытые каналы и подписку (Telegram Stars, ЮKassa рекуррент), расписание и напоминания с учётом таймзоны, уроки и материалы (бот, Mini App или гибрид), приём и проверка домашних заданий с AI-проверкой voice для языковых школ, чаты потоков с куратором, геймификация, автогенерация сертификатов с QR-проверкой, ретеншн с апсейлом следующего курса.

Как устроен лидген через бот для онлайн-школы?

Три классических верхних канала. Квиз «какой курс вам подходит» из 5–8 вопросов с инлайн-кнопками — конверсия в заявку 18–35%. Бесплатный урок или демо-занятие с реальным мини-уроком и автопроверкой — конверсия в платный после качественного демо 12–22%, в 3–5 раз выше PDF-магнита. Запись на бесплатный вебинар с напоминаниями за сутки, утром, за час и 10 минут до эфира, после эфира рассылка записи и спецпредложение на 24–72 часа с убывающей скидкой. После любого из трёх входов запускается автоворонка прогрева на 7–9 касаний за 10–14 дней.

Как работает оплата и подписка в боте онлайн-школы?

Тарифная сетка трёхуровневая (базовый, стандарт, премиум) показывается одним сообщением с тремя кнопками. Способы оплаты: ЮKassa (карта плюс СБП, 2.4–2.8%), СБП напрямую (0.4–0.7%), ЮKassa рекуррент для подписок, Telegram Stars для микро-курсов, Долями BNPL четырьмя платежами, Тинькофф рассрочка 3–24 месяца, Halva от Совкомбанка, ручной счёт от ИП/ООО для корпоративных оплат. Подписочная модель реализуется через рекуррентные списания: при первой оплате клиент даёт согласие, дальше бот раз в период инициирует списание. За 3 дня до списания обязательно напоминание с кнопкой «отменить подписку», иначе чарджбеки.

Как реализовать домашние задания и AI-проверку в боте?

Бот принимает ответ в любом формате (текст, фото, файл, voice, ссылка), сохраняет артефакты в S3, в БД пишет метаданные. Маршрутизация по тарифу: базовому — автопроверка (тесты, ключи, регулярки), стандарту и премиуму — куратор с лентой тикетов в админском чате и SLA-таймером (48 часов в стандарте, 24 в премиуме). Для языковых школ отдельно работает AI-проверка voice: транскрипция через Whisper, оценка произношения через Speechace или Azure Pronunciation Assessment, бот возвращает оценку 0–100 по словам и подсвечивает проблемные звуки. Такая обратная связь поднимает completion rate в speaking-курсах на 30–40%. Дедлайны ДЗ с напоминаниями за 24/6/1 час по таймзоне студента.

Как Telegram-бот интегрируется с GetCourse, Bizon365 и другими LMS?

Чаще всего школа уже работает на готовой LMS, и бот ходит к ней через API. Универсальное правило — обмен асинхронный, через очередь с ретраями. У школы всегда внутренняя БД студентов и заказов, а синхронизация с LMS идёт фоновой задачей. Совместимость: GetCourse (REST плюс экспорт CSV, медленный API, большая аудитория), Skillbox-style LMS (REST с webhooks, для крупных школ), AntiTraining (сильна воронками), Tilda Education (через Zapier), Bizon365 (силён вебинарами и автовебинарами), Moodle (open-source, REST плюс LTI), iSpring Learn (корпоративное). Сверху часто amoCRM или Битрикс24 как CRM-слой. Если LMS упала на час, бот продолжает принимать оплаты и ставит задачи в очередь.

Какие метрики отслеживать в боте онлайн-школы?

Conversion в платный (3–8% на холодный трафик, 12–22% после демо), course completion rate (25–45% без бота, 40–65% с ботом), homework submission rate (50–80%), retention по неделям курса (75% на неделе 2, 50% на неделе 6), NPS курса (норма 40+), retention на следующий курс (15–30% за 90 дней), LTV студента (средний чек × 1.4–2.2 за год), ROI на лида (150%+), Cost per Lead (50–800 ₽ по каналу). Самая полезная картинка — когортный анализ retention по урокам: если на уроке 4 «обрыв» 30%, там либо плохой контент, либо сложная домашка, либо баг с видео. Reactivation спящих через 5/14/30 дней дополнительно поднимает completion на 10–15%.

Как генерировать сертификаты автоматически и проверять их по QR?

Фоновая задача раз в день считает progress = выполненные уроки / всего для всех активных студентов. Если progress 80%+ и сертификата ещё нет — генерирует PDF из шаблона. PDF содержит имя студента, название курса, даты, подпись преподавателя, уникальный cert_id и QR-код со ссылкой на публичную страницу проверки. Студент получает PDF в бот плюс ссылку «проверить онлайн». Публичная страница /cert/cert_id показывает имя выпускника, курс, даты, кнопку скачать PDF — без неё сертификат теряет смысл для HR. Сертификаты «государственного образца» можно выдавать только при наличии лицензии Рособрнадзора; большинство EdTech продаёт «информационно-консультационные услуги» и выдаёт сертификат школы — это законно при правильно прописанной оферте.