Практика

Приём оплаты в Telegram-боте: что нужно юридически и технически

Приём оплаты в Telegram-боте собирается из пяти частей: платёжная страница провайдера, чек от кассы продавца, оферта с ценой и условиями, вебхук о состоявшейся оплате и сценарий выдачи. Сам бот денег не принимает и карту не видит: он показывает счёт и отдаёт товар после подтверждения от платёжного сервиса.

15 мин чтения Дмитрий Киселев, основатель ЭТОБОТ и ЭТОЧАТБОТ

Заказ обычно звучит так: «хотим бот для приёма оплаты в Telegram, чтобы человек нажал кнопку и заплатил». Кнопка — самая простая часть работы. Ниже: что нужно продавцу, что делает код, где схема ломалась на живых платежах и когда бот с оплатой не нужен.

Короткий ответ

  1. Частей пять, и три из них не про код. Платёжная страница, чек и оферта — на стороне продавца, вебхук об оплате и сценарий выдачи — на стороне бота.
  2. Деньги идут не через бота. Человек уходит на страницу платёжного сервиса и платит там. Данные карты бот не видит и не хранит — и не должен.
  3. Оплату подтверждает вебхук, а не кнопка. Платёжный сервис присылает уведомление с подписью; выдача уходит только после того, как подпись сошлась.
  4. Выдачу отправляет рантайм, не оператор. Товар в движке — цена плюс выдача: текст, кнопки-ссылки и файл. Уходит из любого сценария сразу после вебхука.
  5. Цены у нас две: разработка от 20 000 ₽ и поддержка от 5 000 ₽ в месяц. Точная цифра называется после разбора задачи и до начала работ.

Пять частей: кто за что отвечает

ЧастьКто за неё отвечаетЧто бывает, если её нет
Платёжная страницапродавец: кабинет в сервисе, договор, секретный ключформировать ссылку на оплату нечем, сценарий обрывается на счёте
Чек покупателюпродавец: касса или сервис, который её заменяетденьги приняты без чека — вопрос к продавцу, а не к боту
Оферта и политика данныхпродавец, обычно вместе с юристомчеловек платит, не видя условий выдачи и возврата
Вебхук об оплатеразработчик ботабот не узнаёт об оплате: деньги списаны, товар не выдан
Сценарий выдачиразработчик вместе с продавцомвыдачу приходится отправлять руками, а платят и ночью

Порядок в таблице — это и порядок работ: пока у продавца нет платёжного кабинета и секретного ключа, собирать бота рано — проверять нечем.

Что нужно юридически: продавец, чек, оферта

Продавец — не бот и не подрядчик. Деньги приходят на счёт вашего ИП, ООО или самозанятого, кабинет в платёжном сервисе и договор с ним оформлены на вас. Кто может подключиться и на каких условиях — вопрос к самому сервису: требования у него свои. Бот в этой схеме — витрина и курьер, а не касса.

Чек. При расчётах с физическим лицом покупателю нужен чек, и выбивает его не бот, а касса продавца или сервис, который эту задачу берёт на себя. Разработчик передаёт в платёжную ссылку название товара и цену, остальное живёт в кассовом контуре.

Оферта и то, что видно до оплаты. До нажатия «Оплатить» человек должен увидеть пять вещей: что продаётся, сколько стоит, как и когда придёт, что делать при возврате, кто продавец с реквизитами. В боте это ссылка на оферту в том же сообщении, где стоит кнопка оплаты.

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

Юристами мы не являемся. Спорные случаи — НДС, агентская схема, подписка с автосписанием — проверяйте с бухгалтером до включения приёма оплаты: технически включить можно всё, отвечать будет продавец.

Как устроен приём оплаты технически

В нашем модуле платёжный сервис один — Продамус. Работает это так.

Ссылка на оплату. Из товара и заказа собирается адрес платёжной страницы: состав, сумма, номер заказа, адрес уведомлений. Параметры подписываются секретным ключом магазина, и человек платит на стороне сервиса.

Уведомление об оплате. Сервис присылает POST на наш адрес уведомлений и ждёт в ответ код 200, подпись лежит в заголовке. Не сошлась подпись — уведомление не наше и оплатой не считается.

Сопоставление заказа. Здесь живёт главная поломка схемы, и мы на ней попались. Платежи в платёжном кабинете проходили, а в боте оставались в статусе «ожидает», и в журнале событий не было ни одной записи. По логам веб-сервера картина была другой: сервис звонил на наш адрес уведомлений и каждый раз получал 200.

Причина — два разных номера в одном уведомлении. В ссылку мы кладём свой номер заказа, а обратно сервис присылает два: наш номер в одном поле и свой внутренний в другом, очень похоже названном. Код читал не то поле, искал заказ по чужому номеру, не находил — и отвечал 200, то есть «доставлено, не повторяй». Снаружи: деньги списаны, товар не выдан, в журнале пусто.

Что из этого следует для любой интеграции:

  • отвечать 200 на непонятное уведомление нельзя — после этого провайдер перестаёт повторять попытку;
  • несопоставленное уведомление обязано шуметь: его тело пишется в сырой журнал вебхуков и в лог ошибок. Немота и делала поломку невидимой;
  • заказ ищется по всем номерам из уведомления и с проверкой, что он принадлежит боту, чьим токеном подписан адрес вебхука;
  • проверять надо подделанным уведомлением на свой же вебхук: собрать тело, подписать тем же алгоритмом, что проверяет ваш код, отправить. Так причина и была доказана.

Повторная выдача. Уведомление может прийти несколько раз — для платёжного сервиса это норма, плюс покупатель может сам нажать «Проверить оплату». Поэтому перед отправкой стоит проверка отметки «выдано».

Длина цепочки переходов. Встроенный браузер мессенджера плохо переносит цепочки редиректов, поэтому у кнопки оплаты сокращатель ссылок отключён, а последний экран рисует уже приложение платёжного сервиса.

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

Выдача после оплаты: почему её шлёт рантайм

Выдача хранится не в сценарии, а у товара: текст, кнопки-ссылки, файл. Отправляет её рантайм служебным шагом сразу после подтверждения оплаты — одинаково из сценария по кодовому слову и из блока «Выставить счёт на оплату» любого сценария. Дальше сценарий идёт по своей ветке: ставит метку, записывает клиента на консультацию, напоминает.

Почему не оператор руками. Платят круглосуточно, а человек отвечает в рабочее время, и ожидание после списания денег даёт самые злые обращения из всех. Вторая причина — правило, которое пришлось выучить дважды: всё, что уходит покупателю, идёт тем же механизмом отправки, что и обычный текст сценария. Прямая отправка в мессенджер не попадает в ленту диалога, а в Instagram* это потерянный приватный ответ.

Страховка на случай, когда кнопки «Проверить оплату» у человека не оказалось: при любом входящем сообщении бот ищет оплаченный, но не выданный заказ этого диалога и досылает выдачу. Человек в такой ситуации пишет сам — «оплатил, где материал?» — и этим открывает окно. Двойной выдачи не будет: держит отметка «выдано».

Кодовое слово или блок в конструкторе

В визарде «Товар или услуга» четыре шага: что продаём, что выдать после оплаты, как покупатель начинает, каким сообщением уходит счёт. Развилка на третьем шаге определяет всю дальнейшую работу.

Способ продажиКогда хватаетЧто внутри
Кодовое словоодин товар, одна цена, выдача — файл, текст или ссылкавизард собирает сценарий сам: слово → счёт → выдача по вебхуку
Блок в конструкторедо оплаты есть вопросы, товаров несколько, после оплаты сценарий продолжаетсяблок «Выставить счёт» ставится в любое место любого сценария, товар и выдача те же
Разработкаостатки, расчёт доставки, личный кабинет, сверка со своей базойобращение к внешней системе и обработка её отказа

Третья строка — не попытка продать дороже, а граница инструмента. Пока задача звучит как «человек пришёл оттуда, взял деньги, отдай ему это», хватает готового механизма; каталог с корзиной и выбором вариантов обычно живёт уже в мини-приложении Telegram, а не в сценарии бота. Со словами «посчитать» и «свериться с нашей базой» появляется работа по стыковке: чужой API, его отказы и решение, что делать, если деньги приняты, а внешняя система молчит. Что двигает смету в обе стороны, разобрано в статье про то, сколько стоит разработка чат-бота.

Ловушка демо-режима: тестовый контур врёт

Тестовый контур отличается от боевого в мелочи, которую никто не читает.

У нашего платёжного сервиса новый кабинет до подписания договора работает в демо-режиме, и уведомления оттуда подписаны не тем же секретом, а секретом, к которому приписано отдельное слово. Код, проверяющий только боевую подпись, честно отвергнет такое уведомление — хотя адрес настроен верно и связь работает.

Второй случай наоборот: демо-режим, который продавец включает сам в настройках кабинета, подпись не меняет вовсе — платёж приходит успешным, с пометкой. Такой заказ надо помечать тестовым и не считать в выручке.

Отсюда два правила приёмки:

  1. Проверка связи — настоящий платёж. Кнопка «Проверить связь» выставляет настоящий счёт на минимальную сумму и опрашивает статус заказа: подделанное уведомление проверяет только ваш код, а не цепочку целиком.
  2. Проверять надо ту ветку, которая поедет на бой. Если приёмка шла в демо-кабинете, а продавать вы будете из боевого, проверена другая ветка подписи.

Из той же породы история с партнёрским кодом интеграции, который сервис попросил добавлять в каждую платёжную ссылку. Механика была, но значение брали из настроек бота и из переменной окружения — обе пусты, и параметр не уходил ни у кого. Урок скучный: настройка, которую нужно заполнить руками, по умолчанию не заполнена.

Ограничения каналов: где приём оплаты работает иначе

КаналКто начинает разговорЧто это меняет в приёме оплаты
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 года. Это боты пользователей сервиса ЭТОЧАТБОТ, созданные на движке, а не заказные проекты агентства.

Что запомнить

  1. Три части из пяти закрывает продавец, а не разработчик, и начинать надо с них: пока нет платёжного кабинета и секретного ключа, сценарий проверять нечем.
  2. Продавец — ИП, ООО или самозанятый: деньги идут на его счёт, чек выбивает его касса, бот карту не видит.
  3. Оплату подтверждает только вебхук с сошедшейся подписью, и отвечать 200 на непонятное уведомление нельзя — провайдер перестанет повторять.
  4. Платежи зависали из-за двух похожих полей с номером заказа в одном уведомлении. Выдача должна быть однократной, по отметке «выдано», и уходить от рантайма, а не от оператора.
  5. Демо-режим платёжного сервиса подписывает уведомления другим секретом, а в Instagram* счёт занимает единственный приватный ответ — поэтому рядом нужна кнопка «Проверить оплату».

Чтобы понять, что из этого списка у вас уже есть, напишите в @etoBotTeamBot: для разбора хватит описания товара и ответа на вопрос, есть ли кабинет в платёжном сервисе.

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

Как сделать бота для приёма оплаты в Telegram?

Нужны кабинет в платёжном сервисе на ваше ИП, ООО или на самозанятого, касса для чеков, оферта и бот, который умеет две вещи: выставить счёт и принять вебхук об оплате. Порядок обратный привычному: сначала платёжный кабинет и документы, потом сценарий. Разработка от 20 000 ₽, цифра — после разбора задачи.

Может ли чат-бот для оплаты принимать деньги картой?

Нет, карту принимает платёжный сервис, а не бот. Бот показывает сообщение со счётом и кнопкой, человек уходит на платёжную страницу сервиса и вводит данные карты там. Бот эти данные не видит и не хранит. Обратно приходит уведомление с подписью, и только после того, как подпись сошлась, бот отдаёт покупателю товар.

Нужен ли чек, если оплату принял бот?

Да. При расчётах с физическим лицом покупателю нужен чек, и выбивает его касса продавца или сервис, который эту задачу закрывает, а не бот. Разработчик передаёт в платёжную ссылку название товара и цену; кассовый контур в смету на бота не входит и закрывается до запуска продаж.

Как сделать телеграм-бот для оплаты подписки?

Разовый счёт и подписка с автосписанием — разные задачи. Наш модуль выставляет счёт и выдаёт товар после оплаты; регулярное списание требует отдельного договора с сервисом, согласия покупателя и своих документов. Вариант без автосписания рабочий: счёт раз в период и напоминание, если канал разрешает писать первым — во ВКонтакте это бессрочно.

Что делать, если человек оплатил, а товар не пришёл?

Сначала смотреть, дошёл ли вебхук об оплате и сопоставился ли заказ. Самая частая причина — уведомление пришло, но заказ по номеру не нашёлся, а провайдер получил в ответ 200 и повторять не стал: именно так у нас и зависали платежи. Поэтому выдачу надо досылать при следующем сообщении покупателя.

Можно ли принимать оплату в боте для Instagram*?

Да, но с ограничением канала. Написать человеку первым в Instagram* нельзя, а после комментария у бота есть право на одно сообщение — его занимает счёт. Тап по ссылке оплаты окно переписки не открывает, поэтому в том же сообщении нужна кнопка «Проверить оплату»: нажатие открывает окно, и выдача уходит обычным сообщением.

Какие платёжные сервисы подключаются к боту?

В нашем модуле приёма оплаты платёжный сервис один — Продамус. Кабинет и договор с ним оформляет продавец на своё ИП, ООО или на самозанятого, бот только формирует ссылку на оплату. Требования к продавцу — резидентство, форма регистрации, документы, касса для чеков — устанавливает сам сервис, и проверять их надо у него до начала работ, а не после сборки бота.

Сколько стоит бот с приёмом оплаты?

Разработка от 20 000 ₽, поддержка от 5 000 ₽ в месяц; точная цифра — после разбора задачи и до начала работ. Смету двигают вверх число товаров, вопросы перед оплатой, продолжение сценария после выдачи и стыковка со своей базой. Кассу, оферту и платёжный кабинет продавец оплачивает отдельно.

Нужен бот, который делает это у вас?

Читать дальше