Запрос "telegram бот с robokassa для онлайн школы" обычно возникает в момент, когда простая ссылка на оплату уже не устраивает. Нужно, чтобы ученик увидел оффер в Telegram, оплатил курс, получил чек, попал в нужный сегмент, открыл доступ и не завис между платежным кабинетом, LMS и менеджером.
Короткий вывод: Robokassa закрывает прием платежа и фискальный контур, а Telegram-бот должен закрыть клиентский путь вокруг него. В Strelo этот путь можно собрать как коммерческий сценарий: создать заказ, отправить платежную ссылку, принять подписанный ResultURL, записать покупку в CRM и запустить ветку после оплаты.
Кому подойдет статья
Онлайн-школа
Нужно принимать оплату за курс, вебинар, тариф или клуб и автоматически понимать, кому выдавать доступ.
Продюсер запуска
Важны платежные статусы, дожим неоплативших, передача менеджеру и понятная картина выручки.
Администратор воронки
Нужно проверить ResultURL, SuccessURL, FailURL, чек, повторные уведомления и сценарий поддержки.
Что должна закрывать связка Telegram и Robokassa
Платежный провайдер отвечает за оплату, но бизнес-результат появляется только когда платеж связан с контактом, доступом и следующим шагом.
| Критерий | Robokassa | Telegram-бот | Операционный контур |
|---|---|---|---|
| До оплаты | Платежная форма и способы оплаты | Оффер, тариф, кнопка, объяснение следующего шага | Продукт, сумма, источник, внешний ID заказа |
| Во время оплаты | Обработка платежа и фискальный контур | Ожидание статуса, fallback и кнопка поддержки | pending-заказ без завышения выручки |
| После оплаты | ResultURL с подписью и номером заказа | Сообщение об успехе, доступ и инструкции | CRM, теги, рассылка, аналитика, поддержка |
Где Robokassa находится в контуре онлайн-школы
Robokassa не заменяет Telegram-бот, CRM или учебную платформу. Ее роль конкретная: принять деньги, обработать платежный статус, помочь с чеком и вернуть техническое подтверждение в систему школы. Ошибка начинается, когда платежный сервис воспринимают как всю продажную систему.
У онлайн-школы обычно есть четыре слоя. Первый слой - витрина: вебинар, пост, рассылка, консультация или Telegram-воронка. Второй слой - платеж: сумма, способ оплаты, чек, статус. Третий слой - доступ: курс, группа, закрытый канал, кабинет или запись на созвон. Четвертый слой - учет: контакт, источник, покупка, менеджер, повторные касания и аналитика.
Если Robokassa подключена только как кнопка, бизнес видит деньги, но не видит путь ученика. Если платеж привязан к заказу и контакту, появляется нормальная операционная схема: кто оплатил, какой продукт купил, где выдан доступ, почему часть людей бросила оплату и кому нужно написать.
Четыре зоны платежного контура
Ученик должен понять, что именно покупает и что будет после платежа.
Провайдер принимает деньги, обрабатывает платеж и возвращает статус.
Чек, номенклатура, email и налоговый режим проверяются до запуска.
Покупка связывается с учеником, тарифом, источником и веткой сценария.
Путь заказа от Telegram до доступа
Выбор продукта
В боте выбран курс, тариф или вебинар. Система фиксирует сумму, валюту, название и контакт.
Создание платежа
Robokassa получает параметры заказа и выдает ссылку на оплату. У заказа появляется внешний номер.
ResultURL
После успешного платежа Robokassa отправляет уведомление. Обработчик проверяет подпись и связывает событие с заказом.
Доступ
Бот подтверждает оплату, выдает инструкцию, ставит тег покупателя и запускает нужную ветку.
Для кого такой сценарий особенно полезен
Онлайн-школа с одним недорогим вебинаром может временно жить на ручных ссылках. Но как только появляется несколько тарифов, рассрочка, менеджеры, повторные продажи или учебная группа, ручная сверка превращается в источник ошибок.
Первый тип проекта - эксперт или продюсер с запуском. В день продаж приходит много одинаковых вопросов: где оплатить, прошла ли оплата, когда придет доступ, где чек. Бот должен снять базовую нагрузку и передать человеку только спорные случаи.
Второй тип - школа с evergreen-воронкой. Трафик приходит каждый день, оплата идет без вебинара, а доступ нужен сразу. Здесь опасно ждать ручной проверки: ученик платит вечером, а доступ получает утром, пишет в поддержку и теряет доверие.
Третий тип - команда, которая оставляет уроки в GetCourse или другой LMS, но хочет продавать через Telegram. В этом варианте Telegram становится продажным фронтом, Robokassa - платежным шлюзом, LMS - учебным слоем, а CRM отвечает за контакт и повторные касания.
Где связка особенно окупается
Вечерние оплаты
Ученик платит после вебинара ночью и сразу получает доступ без ожидания администратора.
Менеджеры
Отдел продаж видит, кто оплатил, кто бросил checkout и кому нужен ручной ответ.
Реклама
Можно отличить проблему оффера от проблемы платежной формы и считать конверсию по шагам.

Как выглядит правильный путь ученика
Начинать нужно не с кабинета Robokassa, а с карты пути. Ученик видит оффер, выбирает тариф, получает понятное платежное сообщение, оплачивает, возвращается в Telegram и сразу понимает следующий шаг. Если оплата не прошла, он получает спокойный fallback, а не пустоту.
Технически у Robokassa есть три важные точки: страница оплаты, ResultURL для уведомления о успешной оплате, SuccessURL для возврата клиента после оплаты и FailURL для неуспешного сценария. Для бизнеса самая важная точка - ResultURL, потому что именно она подтверждает оплату для системы, а не просто для человека.
По официальной документации ResultURL получает уведомление после успешного платежа. Обработчик должен проверить подпись и вернуть текст OK плюс номер заказа. Если подпись не сходится, событие нельзя считать оплатой. Если обработчик не отвечает корректно, платежная система будет ретраить уведомление.
Что проверить в обработчике Robokassa
ResultURL нужен не для красивого возврата пользователя, а для серверного подтверждения оплаты.
| Критерий | Правильно | Опасно |
|---|---|---|
| Подпись | Проверять SignatureValue с Password 2 до любых действий | Считать оплатой любой входящий запрос |
| Ответ | Вернуть OK плюс InvId, если событие принято | Вернуть HTML-страницу или JSON там, где протокол ждет текст |
| Идемпотентность | Использовать InvId или внешний ID заказа как стабильный ключ | Создавать новую покупку при каждом повторном webhook |
| Контакт | Связать платеж с contactId, заказом или pending-записью | Искать ученика только по email, если email мог не прийти |
Что делает Strelo вокруг Robokassa
В Strelo Robokassa подключается через commerce-слой. Нода Заказ создает внешний заказ, сохраняет pending-запись в contact_purchases, получает payment_url и кладет ссылку в переменную сценария. Дальше сообщение в боте может отправить эту ссылку ученику.
Когда Robokassa присылает ResultURL, Strelo проверяет подпись через Password 2, разбирает данные, связывает событие с контактом и обновляет покупку. Для Robokassa обработчик возвращает plain text OK с InvId, как требуется протоколом. Это важно: платежный вебхук не должен быть просто страницей успеха.
У Strelo есть и отдельная нода Оплата Robokassa как платежный gate. Она отправляет кнопку оплаты и кнопку проверки платежа. Если webhook уже подтвердил заказ, нода может продолжить сценарий по paid-ветке. Если платеж еще не найден, пользователь остается на шаге и видит понятное сообщение ожидания.
Что уже есть в платежном слое
Нода Заказ создает внешний orderId и сохраняет ссылку оплаты в переменную сценария.
Robokassa-событие проверяется до записи покупки и до запуска ветки после оплаты.
Заказ и покупка живут рядом с контактом, продуктом, суммой, валютой и внешним ID.
Повторный webhook не должен второй раз выдавать доступ или задваивать выручку.
Как нода оплаты ведет пользователя
Сообщение с кнопкой
Бот отправляет понятный текст и кнопку Оплатить со ссылкой Robokassa.
Ожидание
Если оплата еще не найдена, пользователь остается на шаге и может проверить платеж позже.
Подтверждение
Когда ResultURL подтвердил заказ или проверка статуса нашла оплату, сценарий идет по ветке paid.
Поддержка
Если платеж отменен или не проходит, бот дает безопасный маршрут к оператору.
Чек и фискализация: где нужна осторожность
Для онлайн-школы чек - не декоративная деталь. Покупатель ожидает подтверждение, бухгалтерия ожидает корректный состав заказа, а поддержка должна понимать, что отвечать на вопрос "где чек". Robokassa публично описывает несколько решений для чеков и онлайн-кассы, включая Robokassa Online, Robocheki и Robocheki SMZ.
Практический вывод простой: до запуска проверьте не только оплату картой, но и чек. Кто является продавцом, какой налоговый режим, какая номенклатура попадает в чек, как передается email покупателя, как отправляется чек, что происходит при возврате. Это зона юридической и бухгалтерской настройки, а не только настройки бота.
Важно не обещать ученику автоматический доступ раньше, чем платеж подтвержден. Кнопка, клик и переход на checkout не равны оплате. Оплаченным считается только заказ, который получил доверенный статус от Robokassa и прошел проверку подписи.
Что нельзя смешивать в одном шаге
Фискализация, доступ и CRM - разные процессы. Их нужно проверить вместе, но не заменять один другим.
| Критерий | Чек | Доступ | CRM |
|---|---|---|---|
| Кто отвечает | Robokassa, кассовое решение и настройки продавца | Telegram-сценарий, LMS или администратор | Strelo или другая учетная система |
| Когда проверять | До рекламного запуска, включая состав позиции | После подтвержденного платежа | При каждом изменении статуса заказа |
| Типовая ошибка | Не передали email или номенклатуру | Выдали доступ после клика, но до оплаты | Не связали заказ с конкретным контактом |
Где чаще ломается запуск
Чек проверили последним
Команда убедилась, что карта списывается, но не проверила состав чека, email и сценарий возврата.
Доступ зависит от человека
Оплаты вечером и в выходные копятся до ручной сверки, а поддержка получает вопросы от уже оплативших учеников.
CRM не знает тариф
Деньги пришли, но в контакте не видно, какой продукт куплен и какую ветку запускать дальше.
Как не потерять оплату между Robokassa и Telegram
Самая неприятная поломка выглядит так: деньги списались, ученик вернулся в Telegram, а бот молчит. Обычно причина в том, что сценарий полагался на SuccessURL или на ручной клик, а не на серверное уведомление.
SuccessURL удобен для UX: человек возвращается после оплаты и видит понятное сообщение. Но он не должен быть единственным источником правды. Пользователь может закрыть окно, сеть может оборваться, встроенный браузер может не вернуться в Telegram. ResultURL от Robokassa должен оставаться авторитетным сигналом.
Вторая зона риска - дубли. Платежные уведомления могут приходить повторно. Нормальная система должна использовать внешний номер заказа как идемпотентный ключ. Повторный вебхук обновляет известный заказ, а не создает вторую покупку и не выдает доступ второй раз.
Три ситуации, которые нужно отработать
ResultURL не дошел
Провайдер повторяет уведомление. Обработчик должен быть доступен и возвращать корректный OK-ответ.
Подпись не совпала
Запрос нельзя принимать как оплату. Нужен лог ошибки и безопасный ответ без выдачи доступа.
Контакт не найден
Система должна найти pending-заказ или связать платеж по сохраненному contactId, иначе поддержка останется без контекста.
Как не задвоить выручку и доступ
Платежные уведомления могут приходить повторно. Это нормальное поведение, если система хранит стабильный ключ заказа.
| Критерий | Что хранить | Почему важно | Что будет без этого |
|---|---|---|---|
| external_order_id | InvId или собственный orderId | Связывает webhook с исходным заказом | Повторный webhook создаст дубль |
| contact_id | ID ученика в CRM | Понимаем, кому выдать доступ | Оплата есть, а получатель неизвестен |
| status | pending, completed, failed, refunded | Деньги считаются только после completed | Аналитика покажет выручку, которой нет |
Как писать платежное сообщение в боте
Платежное сообщение не должно выглядеть как техническая ссылка. Ученик должен понять пять вещей: что он покупает, сколько платит, каким способом можно оплатить, что будет после оплаты и куда писать, если что-то не открылось.
Хороший текст короткий. Например: "Вы выбрали тариф Практика. Стоимость 9900 руб. Нажмите Оплатить, после подтверждения бот пришлет доступ и инструкцию. Если ссылка не открылась, нажмите Помощь". В таком сообщении нет лишней SEO-воды, зато есть снятие тревоги.
Для дорогих курсов добавьте выбор тарифа до платежа. Для консультаций добавьте выбор времени после оплаты. Для закрытого клуба добавьте проверку, что человек вошел в канал или получил инструкцию. Это разные сценарии, хотя платежный провайдер один и тот же.
Что должно быть в платежном сообщении
Что покупает
Название курса, тариф, срок доступа и главный результат без длинного описания.
Сколько платит
Итоговая сумма и валюта, без сюрпризов на checkout.
Что делать при сбое
Кнопка помощи, повторная ссылка или операторский маршрут для спорных случаев.
Какие шаги нужно считать отдельно
Примерная модель для диагностики. После запуска замените значения реальными данными из воронки.
Стартовая база конкретного предложения
Проверяет текст, цену и доверие к офферу
Показывает качество платежной формы и способы оплаты
Проверяет ResultURL, CRM и post-payment ветку
Тарифы, рассрочка и промокоды
У онлайн-школ редко бывает один единственный платеж. Обычно есть базовый тариф, тариф с куратором, VIP-пакет, ранняя цена, промокод, рассрочка или частичная предоплата. Все это нельзя прятать в свободный текст, иначе поддержка не поймет, что именно человек купил.
Перед отправкой в Robokassa бот должен знать продукт и тариф. В заказе полезно хранить не только сумму, но и код оффера, название тарифа, источник скидки, срок доступа, ответственного менеджера и правило post-payment. Тогда после оплаты не нужно угадывать, какой доступ открывать.
Если школа продает рассрочку или предоплату, разделите ее в сценарии. Первый платеж может открывать бронь места, а не полный курс. Полная оплата может открывать весь модуль. Возврат может переводить ученика в поддержку и убирать доступ. Все эти состояния лучше описать до настройки платежа.
Как разные модели оплаты меняют сценарий
Robokassa принимает платеж, но логика доступа зависит от того, что именно продает школа.
| Критерий | Модель | Что хранить в заказе | Что делать после оплаты |
|---|---|---|---|
| Один курс | Фиксированная сумма за один продукт | product_id, сумма, срок доступа | Открыть курс и отправить инструкцию |
| Несколько тарифов | База, куратор, VIP или пакет | tier_id, код тарифа, состав пакета | Открыть правильный уровень доступа |
| Предоплата | Бронь места или первый платеж | тип платежа, остаток, дедлайн доплаты | Поставить тег брони и запустить напоминание |
| Промокод | Скидка от запуска, партнера или менеджера | код скидки и источник | Считать экономику канала без ручных пометок |
Что делать с неоплаченными заказами
Заказ в pending - это не провал. Это теплый сигнал. Человек дошел до оплаты, значит он понял оффер и готов сравнивать условия. Если его бросить, часть денег уйдет в тишину.
Дожим должен быть аккуратным. Через 20-30 минут можно напомнить о ссылке и дать способ написать менеджеру. Через сутки можно спросить, что остановило: цена, способ оплаты, сомнение по программе или техническая проблема. После этого контакт лучше перевести в отдельный сегмент, а не гонять по той же ветке.
Важно разделять неоплаченный заказ и отказ. Если человек нажал кнопку оплаты, но не завершил платеж, это один сценарий. Если человек выбрал "не сейчас", это другой сценарий. Если платеж отменен или возвращен, это третий сценарий с отдельной поддержкой.
Как работать с неоплаченным заказом
20-30 минут
Напомнить о ссылке, но не давить. Добавить кнопку помощи, если checkout не открылся.
Через сутки
Спросить, что остановило: способ оплаты, цена, программа или техническая проблема.
Передача менеджеру
Если курс дорогой или человек задавал вопрос, создать задачу менеджеру с контекстом заказа.
Сегмент
Перенести контакт в сегмент теплых, но не оплативших. Не повторять ту же ветку бесконечно.
Как различать неоплату, отказ и сбой
Одинаковые сообщения всем pending-контактам снижают доверие. Лучше разделять причину.
| Критерий | Состояние | Действие | Тон сообщения |
|---|---|---|---|
| Нажал оплату и не завершил | pending с payment_url | Повторная ссылка и помощь | Спокойный, без давления |
| Написал вопрос | Есть диалог или тег возражения | Передача менеджеру | Персональный |
| Платеж отменен | failed или refunded | Поддержка и проверка причины | Аккуратный, без автодоступа |
Интеграция с LMS и GetCourse
Многие школы не хотят переносить уроки из LMS. Это нормально. Telegram-боту не обязательно становиться учебным кабинетом. Его задача - продать, объяснить, принять оплату, зафиксировать контакт и передать ученика туда, где лежит обучение.
Если GetCourse остается учебным слоем, Telegram-сценарий должен хранить минимум: внешний ID заказа, контакт, тариф, статус оплаты, продукт, источник и дату. После оплаты можно выдать ссылку на кабинет, отправить инструкцию, поставить тег покупателя и создать задачу менеджеру, если доступ требует ручной проверки.
Самая опасная архитектура - когда бот, платежный кабинет и LMS знают разные версии правды. Например, в Robokassa оплата есть, в Telegram доступа нет, в LMS ученик не найден. Поэтому перед рекламой нужно пройти тестовый заказ от начала до конца и проверить все три слоя.
Что передавать после оплаты курса
Даже если обучение живет в другой системе, Telegram-продажа должна сохранять контекст.
| Критерий | Поле | Зачем нужно | Ошибка без поля |
|---|---|---|---|
| Тариф | Код продукта или tier | Выдать правильный доступ | Ученик получает не тот пакет |
| Контакт | Telegram ID, email или CRM ID | Связать оплату с учеником | Поддержка ищет платеж вручную |
| Источник | Канал, UTM, пост или рассылка | Понять, какой трафик окупается | Маркетинг видит только общую выручку |

Проверка перед рекламным трафиком
Не запускайте рекламу сразу после того, как появилась платежная ссылка. Минимальный тест должен пройти как реальный ученик: новый контакт, выбор тарифа, переход на Robokassa, оплата в тестовом или боевом режиме на малой сумме, ResultURL, запись покупки, выдача доступа, повторный вебхук, вопрос в поддержку.
Отдельно проверьте мобильные сценарии. Часть учеников открывает Telegram на телефоне, часть платит из встроенного браузера, часть уходит в банковское приложение. После возврата человек должен видеть понятный следующий шаг, а не старую кнопку оплаты без статуса.
В аналитике нужно считать не только оплаченные заказы. Полезны четыре числа: дошли до оффера, нажали оплату, завершили платеж, получили доступ без обращения в поддержку. Тогда понятно, где чинить воронку: текст оффера, checkout, webhook или post-payment ветку.
Проверка перед трафиком
Тестовый платеж
Проведите заказ от Telegram до Robokassa и обратно, включая мобильный сценарий.
Webhook
Проверьте подпись, OK-ответ, повторное уведомление и недоступность обработчика.
Чек
Проверьте фискализацию, email, состав позиции, возврат и поддержку вопроса о чеке.
CRM
Убедитесь, что в контакте видны заказ, статус, сумма, продукт и источник.
Доступ
Проверьте, что доступ выдается только после confirmed payment и не дублируется.
Поддержка
Подготовьте ответ для случаев: оплата прошла, доступа нет, чек не пришел, карта не проходит.
Минимальный сценарий проверки
Этот список стоит пройти до первой рекламной кампании на вебинар или курс.
| Критерий | Проверка | Ожидаемый результат | Что фиксировать |
|---|---|---|---|
| Новая оплата | Новый контакт проходит по ветке | Заказ pending, потом completed | external_order_id, contact_id, сумма |
| Повтор webhook | То же уведомление отправлено второй раз | Дубль покупки не создан | Лог dedup или известный заказ |
| Ошибка подписи | SignatureValue не совпадает | Доступ не выдан | Безопасный отказ и лог |
| Неоплата | Клик был, платежа нет | Контакт ушел в pending-дожим | Причина и следующий контакт |
Итог
Robokassa для онлайн-школы полезна, когда платеж встроен в управляемый клиентский путь. Сама по себе ссылка на оплату не решает доступ, чек, CRM, поддержку и дожим. Правильная схема строится вокруг заказа: created, pending, completed, доступ выдан, поддержка видит контекст.
Если школа продает через Telegram, удобнее собирать этот контур в платформе, где воронка, покупка, контакт и постплатежные действия связаны. В Strelo Robokassa может быть частью такого сценария: заказ создается в боте, ResultURL подтверждает оплату, CRM фиксирует покупку, а дальше запускается нужная ветка для ученика.
Соберите оплату Robokassa как часть Telegram-воронки
В Strelo можно связать оффер, заказ, платежную ссылку, ResultURL, покупку в CRM, доступ и дожим неоплативших без отдельной связки из таблиц и ручной сверки.
Открыть StreloЧастые вопросы
Можно ли продавать курс через Telegram-бота и Robokassa?
Да. Рабочая схема: бот создает заказ, отправляет платежную ссылку Robokassa, принимает ResultURL, записывает покупку в CRM и выдает доступ или инструкцию после подтверждения.
Что важнее для бота: SuccessURL или ResultURL?
ResultURL важнее для учета оплаты, потому что это серверное уведомление. SuccessURL полезен для возврата клиента, но не должен быть единственным основанием для выдачи доступа.
Нужно ли онлайн-школе проверять чек отдельно?
Да. Перед запуском проверьте фискализацию, состав позиции, email покупателя, налоговый режим и возвраты. Платежная ссылка сама по себе не гарантирует корректную операционную настройку чека.
Что делать, если человек оплатил, но бот не выдал доступ?
Сначала проверьте ResultURL, подпись, связь с contactId и статус заказа. Поддержка должна видеть внешний номер платежа, тариф, сумму и контакт, чтобы быстро восстановить доступ.
Как Strelo помогает с Robokassa?
Strelo помогает собрать платеж как часть Telegram-воронки: заказ, payment_url, ResultURL, contact_purchases, CRM, ветка после оплаты, дожим pending-заказов и операторская поддержка.
Можно ли оставить обучение в GetCourse, а продавать через Telegram?
Да. В таком варианте Telegram-бот продает и подтверждает оплату, Robokassa принимает платеж, а LMS остается учебным кабинетом. Главное - передавать правильный доступ и хранить связь с контактом.
Почему нельзя считать клик по кнопке оплаты покупкой?
Клик означает только намерение. Покупка считается оплаченной после доверенного статуса от Robokassa, обычно через подписанный ResultURL.
