Приём платежей — то, что превращает чат-бота из «говорящей справки» в полноценный канал продаж. В этом лонгриде разобрано, как создать бот оплаты: от выбора платёжной системы и настройки вебхуков до тестирования и защиты ставки конверсии. Всё по шагам — на примере самого популярного стека: Telegram Bot API + провайдер платежей.
Как устроено оплатное звено бота
Прежде чем писать код, важно понять механику. Пользователь никогда не вводит данные карты в чате — их обрабатывает защищённая страница провайдера. Бот лишь выставляет счёт и получает подтверждение.
Бот вызывает метод sendInvoice: название товара, описание, сумма, валюта и payload (внутренний идентификатор заказа).
Если товар физический, платформа присылает shipping_query. Бот отвечает вариантами доставки и итоговой ценой.
Перед списанием бот получает pre_checkout_query и обязан ответить answerPreCheckoutQuery в течение 10 секунд успехом или отказом. Это момент, когда стоит проверить наличие товара и легитимность заказа.
Бот получает сообщение successful_payment — фиксируем заказ, выдаём товар или файл, шлём чек.
Выбор платёжного провайдера
У Telegram Bot Payments семь зарегистрированных провайдеров для России и СНГ, каждый со своей комиссией, скоростью вывода средств и требованиями к документам. Сравнение ключевых условий:
| Критерий | YooKassa | Robokassa | Crypto Bot |
|---|---|---|---|
| Комиссия за операцию | 3,5 % (карты) | 3–4 % | 1 % |
| Вывод средств на расчётный счёт | 1–2 рабочих дня | 1 рабочий день | мгновенно |
| Требуется ИП/ООО и договор | да | да | нет |
| Фискализация чеков (54-ФЗ) | встроенная | встроенная | не применима |
| Поддержка возвратов | частичные и полные | полные | ручная |
Практическая часть: код бота
Ниже — минимальный рабочий пример на Python с библиотекой aiogram 3. Переключайте вкладки, чтобы посмотреть, что происходит на каждом этапе.
Тестирование без списания денег
У каждого провайдера есть тестовый режим. Для YooKassa BotFather выдаёт ключ 390540012:TEST:…. Проверяйте граничные сценарии заранее:
Карта 1111 1111 1111 1026. Проверяем получение successful_payment и выдачу товара.
Карта с отключённой тарификацией. Бот обязан показать понятное сообщение, а не «зависнуть» на спиннере.
Искусственно тормозим обработчик на 11+ секунд. Смотрим, отменяется ли сделка и нет ли рассинхрона с базой заказов.
Дважды эмулируем successful_payment с одним charge_id. Идемпотентность — заказ не должен создаться дважды.
Чек-лист безопасности
- ✓payload — только строка-идентификатор. Никаких цен и сумм там: клиент может подменить содержимое.
- ✓Сверяйте total_amount с суммой заказа в базе перед answerPreCheckoutQuery — защита от оплаты «на рубль».
- ✓Вебхуки принимайте только с официальных подсетей Telegram (149.154.160.0/20 и 91.108.4.0/22) и проверяйте secret_token в заголовке.
- ✓Храните charge_id и логи всех транзакций не менее 3 месяцев — при чарджбэках это единственное доказательство.
Три ошибки, которые убивают конверсию на старте
1️⃣ Переход на внешний сайт для оплаты. Каждый редирект теряет до 40 % потребителей — use native Invoice API. 2️⃣ Отсутствие кнопки «Вернуть деньги». Даже если она не нужна каждый день, параноида клиента перед первой оплатой снимается именно ею. 3️⃣ Отказ без объяснения причины. В answerPreCheckoutQuery всегда указывайте внятный error_message — пустой отказ вызывает поддержку и негатив.
Бот оплаты — не про «приём денег», а про доверие внутри чата. Чем меньше шагов, чем ближе оплата к моменту желания, тем выше выручка. Отладьте Pre-Checkout, покажите чек и кнопку возврата — и платёжный бот станет одним из самых прибыльных каналов в воронке продаж.