Запрос "lava оплата в telegram боте для курса" обычно появляется в момент, когда онлайн-школа уже продает через Telegram, но платежи еще живут отдельно: ссылка в личке, таблица оплат, ручная выдача доступа, поддержка с вопросом "я оплатил, где уроки". Правильное решение не сводится к кнопке "Оплатить". Нужно связать оффер, сумму, ученика, внешний номер заказа, webhook от LAVA, статус покупки, CRM и сценарий доступа.
Короткий вывод: LAVA подходит для продажи курса в Telegram, если бот не просто отправляет ссылку, а создает счет под конкретного ученика, хранит pending-заказ, принимает подписанный webhook и только после подтверждения переводит покупку в оплаченный статус. В Strelo эта логика собирается вокруг ноды заказа, карточки контакта, покупок, тегов, полей и последующих веток сценария.
Кому поможет этот разбор
Онлайн-школа
Нужно принимать оплату за курс, тариф, клуб или вебинар и автоматически выдавать доступ после подтверждения.
Продюсер запуска
Важны кнопка оплаты, дожим неоплативших, статусы заказа, выручка и понятный контроль менеджеров.
Администратор воронки
Нужно настроить LAVA, webhook, переменные заказа, теги после оплаты и безопасную ветку поддержки.
Что на самом деле нужно онлайн-курсу
Для курса важен не сам факт оплаты, а операционная цепочка после нее. Ученик должен понять, что он покупает, оплатить в удобной форме, вернуться в Telegram, получить доступ, а команда должна увидеть выручку, статус, источник и точку, где люди бросают оплату.
Официальная страница LAVA про Telegram прямо описывает сценарии монетизации бота или канала, выставление счетов в мессенджерах, API для автоматизации и выдачу ссылок или файлов после успешной оплаты. Для онлайн-школы это полезная база, но в продуктовой реализации нужен еще слой CRM и контроля статусов.
Что закрывает LAVA и что должен закрывать бот
Платежная форма полезна только вместе с учетом заказа, статусом ученика и следующим действием после оплаты.
| Критерий | LAVA | Telegram-бот | CRM и курс |
|---|---|---|---|
| До оплаты | Создание счета и платежной ссылки | Оффер, сумма, тариф, кнопка и объяснение результата | Контакт, продукт, внешний номер заказа, источник |
| Во время оплаты | Checkout и обработка платежа | Ожидание статуса и fallback на поддержку | pending-покупка без завышения выручки |
| После оплаты | Webhook с результатом счета | Сообщение об успехе и следующий шаг | completed, тег, доступ, аналитика, поддержка |
Как выглядит рабочий маршрут
В рабочем маршруте Telegram-бот не спрашивает администратора, прошла ли оплата. Он заранее создает заказ, получает платежную ссылку, отправляет ее ученику, ждет webhook и меняет статус только после проверки подписи. Такой подход защищает от дублей, случайных сообщений, ручной выдачи доступа без оплаты и потери контекста в поддержке.
Как проходит оплата курса через LAVA
Выбор курса
Ученик выбирает продукт или тариф в Telegram. Бот фиксирует сумму, описание и контакт.
Создание счета
Strelo отправляет в LAVA сумму, orderId, shopId, hookUrl и дополнительные поля.
Оплата
Ученик переходит по платежной ссылке, оплачивает и возвращается к инструкциям в Telegram.
Подтверждение
LAVA присылает webhook, обработчик проверяет подпись и переводит покупку в completed.
Доступ
Бот выдает доступ, ставит тег, обновляет поле контакта и запускает сопровождение.
Какие части уже связаны в рабочем контуре
В настройках хранится проект LAVA, секрет для запросов и ключ проверки webhook.
Нода заказа создает счет, сохраняет ссылку и внешний номер заказа.
Покупка появляется до оплаты, но не считается выручкой до статуса completed.
После webhook можно применить теги, метки, поля и ветку доступа.
Что настроить в LAVA и Strelo
Для подключения нужны проект LAVA, идентификатор магазина, ключ для подписи запросов и ключ для проверки webhook. В интерфейсе Strelo это хранится в интеграции продаж. В сценарии курса администратор выбирает подключение LAVA, задает сумму, товар или описание платежа, срок действия счета и действия после оплаты.
Важный момент: описание платежа должно быть понятно ученику и поддержке. Не стоит писать только "курс" или "доступ". Лучше фиксировать конкретный продукт: "Курс по запускам, тариф База" или "Клуб, месяц июль". Тогда при споре, возврате или вопросе менеджер видит контекст без поиска в переписке.
Какие поля нужны до запуска
Лучше заполнить их заранее, чем разбирать ошибки во время продаж.
| Критерий | Поле | Зачем нужно | Ошибка при пропуске |
|---|---|---|---|
| shop_id | Проект LAVA | Понимать, от какого магазина создается счет | Счет не создается |
| secret_key | Подпись запросов | Подписать JSON тела создания счета | LAVA отклонит запрос или вернет ошибку подписи |
| additional_key | Проверка webhook | Проверять входящее уведомление от LAVA | Нельзя безопасно доверять payload |
| Название интеграции | Внутренний ориентир | Отличать школу, продукт или проект | Команда путает подключения |
Какие данные уходят в LAVA invoice
Поля должны помогать не только оплате, но и последующему учету ученика.
| Критерий | Поле | Что означает | Практика для курса |
|---|---|---|---|
| sum | Сумма счета | Число с точностью до копеек | Брать из каталога продукта или переменной тарифа |
| orderId | Внешний номер заказа | Уникальный ID в системе мерчанта | Связывать webhook с pending-покупкой |
| hookUrl | URL уведомлений | Куда LAVA отправляет результат | Вести на endpoint интеграции Strelo |
| customFields | Дополнительные поля | До 500 символов по документации LAVA | Передавать contactId как запасной контекст |
| expire | Срок жизни счета | По документации LAVA максимум 5 дней | Для вебинара ставить короче, для курса без дедлайна длиннее |
Почему webhook важнее кнопки
Кнопка оплаты отвечает только за переход ученика на checkout. Решение о доступе должно принимать не сообщение ученика и не успешный редирект, а webhook от платежного провайдера. В документации LAVA для счета есть поле hookUrl, куда отправляется уведомление, а подпись строится через HMAC SHA256 по точной JSON-строке запроса. Поэтому интеграция должна подписывать исходящий запрос и проверять входящий webhook по сырым данным.
В Strelo webhook принимает публичный endpoint коммерческой интеграции. Сначала загружается интеграция, затем проверяется подпись, потом payload разбирается в нормализованную покупку. Для LAVA контакт сначала ищется по уже созданной pending-записи с тем же order_id, а customFields используется как запасной контекст. Это снижает риск, что произвольный payload подменит ученика.
- 1Бот создал заказ и payment_url
- 2CRM сохранила pending-покупку
- 3Ученик оплатил счет LAVA
- 4Webhook подтвердил статус completed
- 5Бот выдал доступ и запустил сопровождение
Pending, completed и доступ к курсу
Самая частая ошибка в оплате курса через Telegram: считать покупку оплаченной сразу после клика по кнопке. Между кликом и подтверждением есть несколько состояний. Ученик мог открыть форму, закрыть ее, не пройти банк, оплатить позже или оплатить, но webhook задержался. Поэтому в CRM нужен pending-заказ, а не мгновенная выручка.
Когда LAVA возвращает успешный статус, покупка становится completed. В этот момент можно применить тег, метку CRM, поле контакта, отправить доступ, открыть ветку сопровождения или запустить задачу менеджеру. Если статус failed или refunded, доступ не выдается автоматически, а команда видит причину для поддержки.
Как читать состояния платежа
Статус нужен не для красоты в CRM, а для правильного действия в боте.
| Критерий | Статус | Что значит | Что делает бот |
|---|---|---|---|
| pending | Счет создан | Ученик еще не подтвердил оплату | Показывает кнопку, поддержку и напоминание |
| completed | Оплата подтверждена | Webhook прошел проверку | Выдает доступ, ставит тег, запускает курс |
| failed | Оплата не завершена | Ошибка, отмена или истекший счет | Предлагает новую попытку или поддержку |
| refunded | Возврат | Деньги возвращены или платеж отменен после оплаты | Отмечает контакт и передает в ручной процесс |
Что можно автоматизировать в момент completed
Доступ
Отправить ссылку на уроки, кабинет, закрытый канал или инструкцию по старту.
CRM
Поставить тег покупателя, метку тарифа и поле с датой покупки.
Сопровождение
Запустить цепочку онбординга, напоминаний и контроль первого шага.
Аналитика
Передать сумму, продукт, источник и статус в отчет по воронке.
Пример ветки после оплаты
Проверить статус
Ветка запускается только для completed-покупки с подписанным webhook.
Обновить контакт
CRM получает тег курса, тариф, дату оплаты и внешний номер заказа.
Выдать инструкцию
Ученик получает ссылку на обучение, правила доступа и первый шаг.
Оставить поддержку
Если доступ не открылся, ученик сразу видит кнопку связи с менеджером.
Как учитывать разные тарифы курса
У курса редко бывает только одна цена. Есть базовый тариф, расширенный тариф с куратором, VIP-доступ, рассрочка, клубная подписка, ранняя цена и спецпредложение после вебинара. Если все эти варианты вести одной безымянной ссылкой, команда быстро потеряет связь между оплатой и обещанным форматом участия.
Лучше заранее договориться, что именно попадает в заказ. Название продукта отвечает на вопрос "что купил ученик", тариф отвечает на вопрос "какой объем доступа обещан", сумма отвечает на вопрос "сколько денег должно быть в отчете", внешний номер заказа отвечает на вопрос "какой webhook обновил статус". Тогда даже при ручной поддержке менеджер видит не просто "оплачен", а конкретную покупку.
Если тариф выбирается в боте, сумму можно брать из каталога продукта или из переменной. Если тариф выбирается на вебинаре, сценарий может заранее поставить переменную с нужной ценой и описанием. Если цена персональная, менеджер должен понимать, где она появилась и почему именно такая сумма ушла в LAVA.
Как разные модели курса влияют на оплату
Чем сложнее тарифная сетка, тем важнее хранить в заказе не только сумму.
| Критерий | Модель | Что записать в заказ | Что выдать после оплаты |
|---|---|---|---|
| Один курс | Название, цена, дата покупки | productId, amount, orderId | Ссылка на уроки и стартовое сообщение |
| Несколько тарифов | База, куратор, VIP или клуб | tierId, тариф, срок доступа | Разные теги, разные инструкции и разные чаты |
| Вебинарный оффер | Цена зависит от дедлайна | expire, сегмент, источник | Бонус, запись вебинара или консультация |
| Ручная продажа | Менеджер согласовал цену | Комментарий, сумма, ответственный | Задача менеджеру и проверка доступа |
Как не смешать оплату и выдачу доступа
Оплата и доступ - разные события. Оплата означает, что деньги прошли и webhook подтвердил счет. Доступ означает, что ученик получил право войти в уроки, канал, кабинет или закрытый чат. Иногда эти события происходят почти одновременно, но в системе их лучше разделять.
Такой разрыв помогает в спорных ситуациях. Например, ученик оплатил, но написал другой email для LMS. Или оплатил тариф с куратором, но попал в общий поток. Или прошел возврат, а доступ еще активен. Если в CRM есть отдельные поля "статус оплаты", "тариф", "срок доступа" и "канал выдачи", поддержка решает вопрос быстрее и без поиска по нескольким таблицам.
В простом запуске достаточно тега "оплатил курс", метки тарифа и сообщения со ссылкой. В зрелом запуске добавляются дата старта, срок доступа, куратор, группа, источник заявки, UTM или пост, из которого пришел ученик. Главное не пытаться собрать все сразу. Сначала зафиксируйте платежный минимум, потом расширяйте модель данных.
Что хранить отдельно от факта оплаты
Статус оплаты
pending, completed, failed или refunded. Это основание для следующего действия.
Тариф
Название продукта, уровень доступа, срок и обещанные материалы.
Срок доступа
Когда ученик начинает обучение и когда нужно продлить или закрыть доступ.
Ответственный
Кто помогает ученику при проблеме с оплатой, LMS или входом в канал.

Как написать сообщение с кнопкой оплаты
Сообщение перед кнопкой влияет на конверсию не меньше, чем провайдер. В нем должны быть продукт, сумма, что произойдет после оплаты и куда писать, если банк или checkout не открылись. Чем меньше неопределенности, тем меньше нагрузка на поддержку.
Плохой вариант: "Оплатите по ссылке". Хороший вариант: "Вы выбрали курс по запускам, тариф База. Стоимость 18 900 рублей. После оплаты бот пришлет ссылку на личный кабинет и инструкцию по старту. Если форма не открылась, нажмите Поддержка". В таком сообщении нет перегруза, но есть все, что нужно ученику.
Что должно быть рядом с кнопкой
Что покупает ученик
Название курса, тариф, период доступа и формат результата.
Сколько и как оплатить
Сумма, валюта, кнопка и короткое объяснение платежной формы.
Что будет после оплаты
Когда придет доступ, где искать уроки и что делать при задержке.
Куда писать
Кнопка поддержки снижает тревогу и снимает часть ручных вопросов.

Что должна видеть поддержка
После оплаты ученик чаще всего пишет в поддержку не потому, что система сломалась, а потому что он не понял следующий шаг. Поэтому карточка контакта должна отвечать на простые вопросы: какой курс куплен, какая сумма, какой статус, когда создан счет, когда пришло подтверждение, какая ссылка была отправлена и какая ветка сценария сработала.
Если поддержка видит только переписку, она вынуждена спрашивать чек, искать оплату в кабинете провайдера и сверять имя вручную. Это медленно и плохо выглядит для ученика. Если поддержка видит покупку рядом с диалогом, она может ответить сразу: "Оплата прошла, доступ отправлен в сообщении выше" или "Вижу счет, но webhook еще не подтвердил платеж, пришлю новую ссылку".
Для дорогого курса это критично. Покупатель уже сделал сильное действие, и любой ручной хаос после оплаты снижает доверие к продукту. Хорошая оплата в боте должна быть незаметной: ученик нажал, оплатил, получил доступ, а менеджер вмешался только при отклонении банка или нестандартном вопросе.
Что помогает отвечать без ручной сверки
Покупка в CRM
Менеджер видит сумму, продукт, статус и внешний номер заказа.
Ссылка оплаты
Можно отправить повторно или понять, какой счет открыл ученик.
История webhook
Помогает отделить задержку банка от ошибки интеграции.
Готовые ответы
Для failed, pending, completed и возврата нужны разные шаблоны.
Как считать платежную воронку
После подключения LAVA нужно смотреть не только итоговую выручку. Для курса важно разделить путь на шаги: увидели оффер, нажали оплату, открыли форму, оплатили, получили доступ, начали обучение. Если провал находится до кнопки, проблема в оффере. Если после кнопки, проверьте checkout, способы оплаты, доверие, срок действия счета и понятность возврата в Telegram.
Какие шаги считать в оплате курса
Примерная модель диагностики. После запуска замените значения реальными данными.
Стартовая аудитория предложения
Проверяет оффер, доверие и цену
Проверяет ссылку, форму и устройство
Показывает качество платежного шага
Проверяет webhook и post-payment ветку
Что делать с неоплаченным счетом
Пауза
Подождите разумное время после создания счета, не давите сразу.
Напоминание
Напомните, что место, тариф или бонус сохраняются до указанного срока.
Поддержка
Дайте кнопку для вопроса, если форма не открылась или банк отклонил оплату.
Новый счет
Если срок истек, создайте новый счет вместо повторного использования старой ссылки.
Какие данные нужны для отчета
Отчет по продажам курса должен отвечать не только на вопрос "сколько денег пришло". Он должен показывать, какие офферы привели к оплатам, где люди бросили платеж, какие тарифы покупают чаще и какие источники дают учеников с меньшим числом обращений в поддержку.
Минимальный набор данных: contactId, orderId, invoiceId, сумма, валюта, продукт, тариф, статус, время создания счета, время подтверждения, источник входа и ссылка на сценарий. Для рекламы полезно дополнить это UTM, каналом, постом или сегментом. Для операционной команды полезны метки: доступ выдан, поддержка нужна, возврат, ручная проверка.
Если этих данных нет, владелец курса видит только итоговую выручку. Он не понимает, сколько людей нажали оплату, сколько открыли форму, сколько не завершили банк и сколько дошли до доступа. Поэтому интеграция LAVA должна быть частью аналитики, а не отдельной платежной ссылкой.
Минимальный контракт данных по оплате курса
Эти поля позволяют связать рекламу, Telegram, платеж и доступ.
| Критерий | Данные | Зачем нужны | Кому полезны |
|---|---|---|---|
| contactId | Ученик в CRM | Связать оплату с перепиской и тегами | Поддержке и менеджеру |
| orderId | Внешний номер заказа | Сопоставить счет, webhook и покупку | Администратору и разработчику |
| product и tier | Курс и тариф | Понять, какой доступ обещан | Куратору и LMS-администратору |
| source | Канал входа | Считать окупаемость оффера | Маркетологу и владельцу |

Где обычно ломается запуск
Большинство проблем появляется не из-за LAVA как провайдера, а из-за неполной схемы вокруг него. Нет описания товара, срок счета слишком короткий, webhook не проверяется, дубль уведомления создает повторную покупку, а поддержка не видит, какой заказ открывал ученик.
Четыре сбоя, которые нужно закрыть
Webhook не дошел
Проверьте доступность endpoint, логи, повтор доставки и ответ обработчика.
Подпись не совпала
Не выдавайте доступ. Логируйте ошибку без секретов и проверяйте ключи.
Нет pending-заказа
Платеж трудно связать с учеником. Нужны orderId и сохраненная покупка до оплаты.
Нет поддержки
Ученик оплатил, но не понял следующий шаг. Добавьте явный маршрут помощи.
Как связать Telegram-продажу и обучение
LAVA подтверждает оплату, но место выдачи уроков может быть разным.
| Критерий | Где учится ученик | Что делает Telegram | Что проверить |
|---|---|---|---|
| Закрытый канал | Материалы в Telegram | Выдает ссылку и инструкцию | Правила доступа, модерация, удаление после возврата |
| LMS | Уроки в отдельной системе | Передает оплату, тариф и контакт | Матчинг ученика, email, срок доступа |
| Ручной доступ | Менеджер выдает доступ | Создает задачу и показывает статус | SLA поддержки и журнал действий |
Минимальный запуск за один день
Для первой версии не нужно строить сложную LMS-архитектуру. Достаточно одного продукта, одной цены, понятного сообщения, LAVA-интеграции, pending-покупки, webhook, тега "оплатил", сообщения с доступом и отдельной ветки поддержки для проблемных оплат. Сложность лучше добавлять после первых реальных платежей.
Минимальный checklist перед продажей
Подключение
shop_id, secret_key и additional_key сохранены, проверка соединения прошла.
Продукт
Указаны название курса, тариф, сумма, валюта и понятное описание платежа.
Webhook
Подпись проверяется, orderId связывается с pending-покупкой, дубль не создает выручку дважды.
Доступ
После completed ученик получает инструкцию, тег, поддержку и следующий шаг.
Тесты перед рекламным трафиком
Проверяйте не только оплату, но и весь путь ученика.
| Критерий | Тест | Что должно случиться | Что считать ошибкой |
|---|---|---|---|
| Успешный платеж | Оплатить тестовый курс | completed, тег, доступ, сообщение | Доступ не выдан или нет покупки в CRM |
| Отказ оплаты | Закрыть форму или получить failed | Доступ не выдается, есть повторная попытка | Курс открыт без confirmed webhook |
| Дубль webhook | Повторить уведомление с тем же orderId | Покупка не задваивается, триггер не стреляет второй раз | Две покупки или два доступа |
| Поддержка | Написать вопрос после оплаты | Менеджер видит заказ, статус и продукт | Нужно искать оплату вручную |
Когда не стоит усложнять
Если вы продаете первый мини-курс на маленькую аудиторию, не нужно сразу строить сложную карту статусов, LMS-синхронизацию и десяток тарифов. Начните с одного продукта, одной цены, понятного сообщения и одного сценария после оплаты. Цель первой версии - доказать, что ученик может пройти путь без ручной сверки.
Но даже в самой простой версии не стоит жертвовать тремя вещами. Первая - уникальный orderId, чтобы webhook можно было связать с заказом. Вторая - pending-покупка, чтобы команда видела, кто начал оплату. Третья - проверка подписи, чтобы доступ не открывался от случайного запроса. Все остальное можно нарастить после первых платежей.
Когда появятся повторные запуски, несколько тарифов, кураторы и партнерские источники, структура уже будет готова. Вы добавите сегменты, отчеты, дожимы, новые поля контакта и интеграцию с LMS без переделки базовой платежной логики. Это и есть смысл правильной связки LAVA и Telegram-бота: сначала надежность, потом масштабирование.
Итог
LAVA в Telegram-боте для курса стоит внедрять как платежный контур, а не как отдельную ссылку. Счет должен быть связан с учеником, статус должен приходить через webhook, CRM должна хранить pending и completed, а доступ должен выдаваться только после подтверждения. Тогда Telegram становится не просто местом переписки, а каналом продажи, оплаты, учета и сопровождения ученика.
Для команды онлайн-школы это меняет ежедневную работу. Продюсер видит выручку и потери на шагах, администратор понимает, кому выдан доступ, менеджер отвечает с контекстом заказа, а ученик не ждет ручной сверки. Именно такая связка нужна, когда курс продается внутри Telegram, а не через набор разрозненных ссылок.
Соберите оплату LAVA как часть Telegram-воронки
В Strelo можно связать курс, счет LAVA, кнопку оплаты, webhook, CRM, доступ, теги и аналитику без ручной сверки оплат в таблицах.
Открыть StreloЧастые вопросы
LAVA сама выдаст доступ к курсу?
Нет. LAVA принимает платеж и отправляет уведомление. Доступ должен выдать бот или LMS после проверки статуса оплаты.
Можно ли отправлять ученику обычную ссылку LAVA без CRM?
Можно, но это слабая схема для курса. Без CRM труднее понять, кто оплатил, кому выдан доступ и где потерялись заявки.
Что такое hookUrl в оплате LAVA?
Это адрес, на который LAVA отправляет уведомление о результате счета. Для автоматизации курса он должен вести на обработчик интеграции.
Почему нельзя выдавать доступ сразу после перехода на successUrl?
Редирект показывает маршрут пользователя, но не является надежным подтверждением платежа. Для доступа нужен подписанный webhook и статус completed.
Какие поля нужны в сообщении с кнопкой оплаты?
Название курса, тариф, сумма, что произойдет после оплаты, срок действия предложения и кнопка поддержки.
Как обрабатывать повторный webhook?
Система должна использовать orderId и idempotency-логику, чтобы повтор уведомления не создавал вторую покупку и не запускал доступ дважды.
