Приём оплаты в Telegram-боте: что нужно юридически и технически
Приём оплаты в Telegram-боте собирается из пяти частей: платёжная страница провайдера, чек от кассы продавца, оферта с ценой и условиями, вебхук о состоявшейся оплате и сценарий выдачи. Сам бот денег не принимает и карту не видит: он показывает счёт и отдаёт товар после подтверждения от платёжного сервиса.
Заказ обычно звучит так: «хотим бот для приёма оплаты в Telegram, чтобы человек нажал кнопку и заплатил». Кнопка — самая простая часть работы. Ниже: что нужно продавцу, что делает код, где схема ломалась на живых платежах и когда бот с оплатой не нужен.
Короткий ответ
- Частей пять, и три из них не про код. Платёжная страница, чек и оферта — на стороне продавца, вебхук об оплате и сценарий выдачи — на стороне бота.
- Деньги идут не через бота. Человек уходит на страницу платёжного сервиса и платит там. Данные карты бот не видит и не хранит — и не должен.
- Оплату подтверждает вебхук, а не кнопка. Платёжный сервис присылает уведомление с подписью; выдача уходит только после того, как подпись сошлась.
- Выдачу отправляет рантайм, не оператор. Товар в движке — цена плюс выдача: текст, кнопки-ссылки и файл. Уходит из любого сценария сразу после вебхука.
- Цены у нас две: разработка от 20 000 ₽ и поддержка от 5 000 ₽ в месяц. Точная цифра называется после разбора задачи и до начала работ.
Пять частей: кто за что отвечает
| Часть | Кто за неё отвечает | Что бывает, если её нет |
|---|---|---|
| Платёжная страница | продавец: кабинет в сервисе, договор, секретный ключ | формировать ссылку на оплату нечем, сценарий обрывается на счёте |
| Чек покупателю | продавец: касса или сервис, который её заменяет | деньги приняты без чека — вопрос к продавцу, а не к боту |
| Оферта и политика данных | продавец, обычно вместе с юристом | человек платит, не видя условий выдачи и возврата |
| Вебхук об оплате | разработчик бота | бот не узнаёт об оплате: деньги списаны, товар не выдан |
| Сценарий выдачи | разработчик вместе с продавцом | выдачу приходится отправлять руками, а платят и ночью |
Порядок в таблице — это и порядок работ: пока у продавца нет платёжного кабинета и секретного ключа, собирать бота рано — проверять нечем.
Что нужно юридически: продавец, чек, оферта
Продавец — не бот и не подрядчик. Деньги приходят на счёт вашего ИП, ООО или самозанятого, кабинет в платёжном сервисе и договор с ним оформлены на вас. Кто может подключиться и на каких условиях — вопрос к самому сервису: требования у него свои. Бот в этой схеме — витрина и курьер, а не касса.
Чек. При расчётах с физическим лицом покупателю нужен чек, и выбивает его не бот, а касса продавца или сервис, который эту задачу берёт на себя. Разработчик передаёт в платёжную ссылку название товара и цену, остальное живёт в кассовом контуре.
Оферта и то, что видно до оплаты. До нажатия «Оплатить» человек должен увидеть пять вещей: что продаётся, сколько стоит, как и когда придёт, что делать при возврате, кто продавец с реквизитами. В боте это ссылка на оферту в том же сообщении, где стоит кнопка оплаты.
Возврат. Проходит через платёжный сервис и кассу: бот может принять просьбу и позвать человека, деньги возвращает продавец.
Юристами мы не являемся. Спорные случаи — НДС, агентская схема, подписка с автосписанием — проверяйте с бухгалтером до включения приёма оплаты: технически включить можно всё, отвечать будет продавец.
Как устроен приём оплаты технически
В нашем модуле платёжный сервис один — Продамус. Работает это так.
Ссылка на оплату. Из товара и заказа собирается адрес платёжной страницы: состав, сумма, номер заказа, адрес уведомлений. Параметры подписываются секретным ключом магазина, и человек платит на стороне сервиса.
Уведомление об оплате. Сервис присылает POST на наш адрес уведомлений и ждёт в ответ код 200, подпись лежит в заголовке. Не сошлась подпись — уведомление не наше и оплатой не считается.
Сопоставление заказа. Здесь живёт главная поломка схемы, и мы на ней попались. Платежи в платёжном кабинете проходили, а в боте оставались в статусе «ожидает», и в журнале событий не было ни одной записи. По логам веб-сервера картина была другой: сервис звонил на наш адрес уведомлений и каждый раз получал 200.
Причина — два разных номера в одном уведомлении. В ссылку мы кладём свой номер заказа, а обратно сервис присылает два: наш номер в одном поле и свой внутренний в другом, очень похоже названном. Код читал не то поле, искал заказ по чужому номеру, не находил — и отвечал 200, то есть «доставлено, не повторяй». Снаружи: деньги списаны, товар не выдан, в журнале пусто.
Что из этого следует для любой интеграции:
- отвечать 200 на непонятное уведомление нельзя — после этого провайдер перестаёт повторять попытку;
- несопоставленное уведомление обязано шуметь: его тело пишется в сырой журнал вебхуков и в лог ошибок. Немота и делала поломку невидимой;
- заказ ищется по всем номерам из уведомления и с проверкой, что он принадлежит боту, чьим токеном подписан адрес вебхука;
- проверять надо подделанным уведомлением на свой же вебхук: собрать тело, подписать тем же алгоритмом, что проверяет ваш код, отправить. Так причина и была доказана.
Повторная выдача. Уведомление может прийти несколько раз — для платёжного сервиса это норма, плюс покупатель может сам нажать «Проверить оплату». Поэтому перед отправкой стоит проверка отметки «выдано».
Длина цепочки переходов. Встроенный браузер мессенджера плохо переносит цепочки редиректов, поэтому у кнопки оплаты сокращатель ссылок отключён, а последний экран рисует уже приложение платёжного сервиса.
Отказ при выставлении счёта. Раньше без подключённого сервиса сценарий писал системную строку в кабинет и останавливался: снаружи это выглядело как «бот не реагирует на кодовое слово». Теперь покупателю уходит текст, владельцу — тревога, в кабинете — баннер «приём оплаты не подключён».
Выдача после оплаты: почему её шлёт рантайм
Выдача хранится не в сценарии, а у товара: текст, кнопки-ссылки, файл. Отправляет её рантайм служебным шагом сразу после подтверждения оплаты — одинаково из сценария по кодовому слову и из блока «Выставить счёт на оплату» любого сценария. Дальше сценарий идёт по своей ветке: ставит метку, записывает клиента на консультацию, напоминает.
Почему не оператор руками. Платят круглосуточно, а человек отвечает в рабочее время, и ожидание после списания денег даёт самые злые обращения из всех. Вторая причина — правило, которое пришлось выучить дважды: всё, что уходит покупателю, идёт тем же механизмом отправки, что и обычный текст сценария. Прямая отправка в мессенджер не попадает в ленту диалога, а в Instagram* это потерянный приватный ответ.
Страховка на случай, когда кнопки «Проверить оплату» у человека не оказалось: при любом входящем сообщении бот ищет оплаченный, но не выданный заказ этого диалога и досылает выдачу. Человек в такой ситуации пишет сам — «оплатил, где материал?» — и этим открывает окно. Двойной выдачи не будет: держит отметка «выдано».
Кодовое слово или блок в конструкторе
В визарде «Товар или услуга» четыре шага: что продаём, что выдать после оплаты, как покупатель начинает, каким сообщением уходит счёт. Развилка на третьем шаге определяет всю дальнейшую работу.
| Способ продажи | Когда хватает | Что внутри |
|---|---|---|
| Кодовое слово | один товар, одна цена, выдача — файл, текст или ссылка | визард собирает сценарий сам: слово → счёт → выдача по вебхуку |
| Блок в конструкторе | до оплаты есть вопросы, товаров несколько, после оплаты сценарий продолжается | блок «Выставить счёт» ставится в любое место любого сценария, товар и выдача те же |
| Разработка | остатки, расчёт доставки, личный кабинет, сверка со своей базой | обращение к внешней системе и обработка её отказа |
Третья строка — не попытка продать дороже, а граница инструмента. Пока задача звучит как «человек пришёл оттуда, взял деньги, отдай ему это», хватает готового механизма; каталог с корзиной и выбором вариантов обычно живёт уже в мини-приложении Telegram, а не в сценарии бота. Со словами «посчитать» и «свериться с нашей базой» появляется работа по стыковке: чужой API, его отказы и решение, что делать, если деньги приняты, а внешняя система молчит. Что двигает смету в обе стороны, разобрано в статье про то, сколько стоит разработка чат-бота.
Ловушка демо-режима: тестовый контур врёт
Тестовый контур отличается от боевого в мелочи, которую никто не читает.
У нашего платёжного сервиса новый кабинет до подписания договора работает в демо-режиме, и уведомления оттуда подписаны не тем же секретом, а секретом, к которому приписано отдельное слово. Код, проверяющий только боевую подпись, честно отвергнет такое уведомление — хотя адрес настроен верно и связь работает.
Второй случай наоборот: демо-режим, который продавец включает сам в настройках кабинета, подпись не меняет вовсе — платёж приходит успешным, с пометкой. Такой заказ надо помечать тестовым и не считать в выручке.
Отсюда два правила приёмки:
- Проверка связи — настоящий платёж. Кнопка «Проверить связь» выставляет настоящий счёт на минимальную сумму и опрашивает статус заказа: подделанное уведомление проверяет только ваш код, а не цепочку целиком.
- Проверять надо ту ветку, которая поедет на бой. Если приёмка шла в демо-кабинете, а продавать вы будете из боевого, проверена другая ветка подписи.
Из той же породы история с партнёрским кодом интеграции, который сервис попросил добавлять в каждую платёжную ссылку. Механика была, но значение брали из настроек бота и из переменной окружения — обе пусты, и параметр не уходил ни у кого. Урок скучный: настройка, которую нужно заполнить руками, по умолчанию не заполнена.
Ограничения каналов: где приём оплаты работает иначе
| Канал | Кто начинает разговор | Что это меняет в приёме оплаты |
|---|---|---|
| Telegram | только человек, нажав «Запустить» | счёт уходит внутри начатого диалога; по номеру телефона бот покупателя не найдёт |
| ВКонтакте | сообщество может написать подписчику первым бессрочно | счёт и напоминание об оплате можно отправить самим, окна в 24 часа у ВК нет |
| МАКС | только после сообщения человека | нужен верифицированный профиль организации, ИП или самозанятого — резидента РФ, верификация занимает несколько рабочих дней |
| Instagram* | первым писать нельзя | входы — комментарий, реакция на сторис, кодовое слово; первый Директ уходит как Private Reply, и попытка одна |
Instagram* стоит разобрать отдельно. После комментария у бота право на одно сообщение, и его занимает счёт. Тап по ссылке оплаты окно переписки не открывает: человек уходит в браузер, платит, возвращается — а отправить выдачу некуда. Решение — вторая кнопка в том же сообщении, «Проверить оплату»: нажатие считается действием пользователя и открывает окно. Отказ приватного ответа сжигает попытку, повтор не помогает — помогает публичная подсказка. Кто в каком канале может заговорить первым, разобрано в статье про то, кто может написать клиенту первым.
МАКС добавляет своё: обращения к его API требуют доверенного российского корневого сертификата. Без него запросы не проходят, ошибки нет, и выглядит это как «бот молчит без ошибок» — обычный случай, когда бот есть, но не работает.
Когда бот с приёмом оплаты не нужен
Когда платежей мало. При нескольких оплатах в месяц счёт быстрее выставить руками: приём оплаты в боте окупается только на потоке однотипных продаж.
Когда цена считается под каждого. Доставка по объёму, индивидуальная смета, торг ботом не решаются. Сценарий здесь короткий, как у обычного автоответчика в Telegram: собрать данные, передать человеку.
Когда нужна подписка с автосписанием. Наш модуль выставляет разовый счёт и выдаёт товар после оплаты. Регулярное списание — отдельный договор с сервисом, согласие покупателя и свои документы, и разбирать его надо до слов «бот для оплаты подписки».
Когда задача на самом деле в рассылке. Бот не найдёт покупателя по номеру телефона и не напишет тому, кто с ним не заговорил: в Telegram и МАКС сообщение уходит только после старта, в Instagram* первым писать нельзя. Приём оплаты эти правила не обходит.
Когда нет кассы и оферты. Работа начинается с документов: бот, принимающий деньги без чека, создаёт продавцу проблему быстрее, чем выручку.
Сколько это стоит у нас и что мы про это знаем
Цены две: разработка от 20 000 ₽, поддержка от 5 000 ₽ в месяц. Точную цифру называем после разбора задачи и до начала работ, а из чего складывается смета на чат-бота — разобрано построчно. В работу входит подключение сервиса, товар с выдачей, сценарий со счётом, проверка вебхука подделанным уведомлением и боевой ссылки настоящим платежом. Сроков не обещаем: они зависят от того, как быстро приходят доступы и документы. Единственный известный срок здесь не на нашей стороне — верификация профиля в МАКС, несколько рабочих дней.
Если в боте стоит ИИ-агент, его работа считается по расходу токенов, а не фиксированной ставкой за месяц. Наши цены на разработку и поддержку описаны на главной; собрать товар с выдачей можно и самостоятельно на движке ЭТОЧАТБОТ.
Честная оговорка про цифры. Что модуль работает, деньги доходят, выдача уходит, а описанные выше поломки были настоящими — это мы утверждаем. Сколько бот приносит, какая доля покупателей доводит оплату до конца, за сколько он окупается — не утверждаем: замеров, на которых такие выводы делают, у нас нет.
Для масштаба — общие числа сервиса на 16 сентября 2026 года. Instagram* — 325 ботов, 176 активных; Telegram — 70 и 54; чат на сайте — 16 и 16; МАКС — 11 и 8; ВКонтакте — 4 и 4. Сценариев 366, кабинетов 323, диалогов 85 905, сообщений 445 524 с апреля 2026 года. Это боты пользователей сервиса ЭТОЧАТБОТ, созданные на движке, а не заказные проекты агентства.
Что запомнить
- Три части из пяти закрывает продавец, а не разработчик, и начинать надо с них: пока нет платёжного кабинета и секретного ключа, сценарий проверять нечем.
- Продавец — ИП, ООО или самозанятый: деньги идут на его счёт, чек выбивает его касса, бот карту не видит.
- Оплату подтверждает только вебхук с сошедшейся подписью, и отвечать 200 на непонятное уведомление нельзя — провайдер перестанет повторять.
- Платежи зависали из-за двух похожих полей с номером заказа в одном уведомлении. Выдача должна быть однократной, по отметке «выдано», и уходить от рантайма, а не от оператора.
- Демо-режим платёжного сервиса подписывает уведомления другим секретом, а в Instagram* счёт занимает единственный приватный ответ — поэтому рядом нужна кнопка «Проверить оплату».
Чтобы понять, что из этого списка у вас уже есть, напишите в @etoBotTeamBot: для разбора хватит описания товара и ответа на вопрос, есть ли кабинет в платёжном сервисе.
Частые вопросы
Как сделать бота для приёма оплаты в Telegram?
Нужны кабинет в платёжном сервисе на ваше ИП, ООО или на самозанятого, касса для чеков, оферта и бот, который умеет две вещи: выставить счёт и принять вебхук об оплате. Порядок обратный привычному: сначала платёжный кабинет и документы, потом сценарий. Разработка от 20 000 ₽, цифра — после разбора задачи.
Может ли чат-бот для оплаты принимать деньги картой?
Нет, карту принимает платёжный сервис, а не бот. Бот показывает сообщение со счётом и кнопкой, человек уходит на платёжную страницу сервиса и вводит данные карты там. Бот эти данные не видит и не хранит. Обратно приходит уведомление с подписью, и только после того, как подпись сошлась, бот отдаёт покупателю товар.
Нужен ли чек, если оплату принял бот?
Да. При расчётах с физическим лицом покупателю нужен чек, и выбивает его касса продавца или сервис, который эту задачу закрывает, а не бот. Разработчик передаёт в платёжную ссылку название товара и цену; кассовый контур в смету на бота не входит и закрывается до запуска продаж.
Как сделать телеграм-бот для оплаты подписки?
Разовый счёт и подписка с автосписанием — разные задачи. Наш модуль выставляет счёт и выдаёт товар после оплаты; регулярное списание требует отдельного договора с сервисом, согласия покупателя и своих документов. Вариант без автосписания рабочий: счёт раз в период и напоминание, если канал разрешает писать первым — во ВКонтакте это бессрочно.
Что делать, если человек оплатил, а товар не пришёл?
Сначала смотреть, дошёл ли вебхук об оплате и сопоставился ли заказ. Самая частая причина — уведомление пришло, но заказ по номеру не нашёлся, а провайдер получил в ответ 200 и повторять не стал: именно так у нас и зависали платежи. Поэтому выдачу надо досылать при следующем сообщении покупателя.
Можно ли принимать оплату в боте для Instagram*?
Да, но с ограничением канала. Написать человеку первым в Instagram* нельзя, а после комментария у бота есть право на одно сообщение — его занимает счёт. Тап по ссылке оплаты окно переписки не открывает, поэтому в том же сообщении нужна кнопка «Проверить оплату»: нажатие открывает окно, и выдача уходит обычным сообщением.
Какие платёжные сервисы подключаются к боту?
В нашем модуле приёма оплаты платёжный сервис один — Продамус. Кабинет и договор с ним оформляет продавец на своё ИП, ООО или на самозанятого, бот только формирует ссылку на оплату. Требования к продавцу — резидентство, форма регистрации, документы, касса для чеков — устанавливает сам сервис, и проверять их надо у него до начала работ, а не после сборки бота.
Сколько стоит бот с приёмом оплаты?
Разработка от 20 000 ₽, поддержка от 5 000 ₽ в месяц; точная цифра — после разбора задачи и до начала работ. Смету двигают вверх число товаров, вопросы перед оплатой, продолжение сценария после выдачи и стыковка со своей базой. Кассу, оферту и платёжный кабинет продавец оплачивает отдельно.
Нужен бот, который делает это у вас?