Организация приема платежей в Telegram-ботах

Иван Корнев·21.05.2024·5 мин

Оплата в боте Telegram реализуется через отправку пользователю специального счета (invoice) с использованием Bot API и подключенного платежного провайдера. Пользователь оплачивает счет прямо внутри мессенджера, не переходя на сторонние сайты, а бот автоматически получает уведомление об успехе транзакции. Для этого необходимо зарегистрировать бота, выбрать поддерживаемую платежную систему и получить уникальный токен провайдера.

Способы организации платежей

Существует два основных подхода к приему денег в Телеграм, выбор зависит от ваших технических задач и географии аудитории:

  1. Native Payments (Встроенные платежи). Самый удобный вариант для пользователя. Оплата происходит в нативном окне Telegram (Apple Pay, Google Pay, привязанные карты). Требует подключения официального провайдера платежей (например, ЮKassa, Stripe, CloudPayments), который имеет интеграцию с платформой.
  2. Ссылки на оплату. Бот генерирует ссылку на платежную форму внешнего сервиса. Пользователь переходит в браузер или веб-вью для оплаты. Этот метод проще в реализации, но увеличивает риск отказа от покупки из-за лишнего действия перехода.

Для большинства бизнес-задач рекомендуется использовать Native Payments, так как конверсия в оплату внутри приложения значительно выше, чем при переходе по внешним ссылкам.

Шаг 1. Регистрация и выбор провайдера

Первым делом убедитесь, что у вас есть активный бот. Если его нет, создайте через @BotFather и сохраните полученный токен доступа.

Далее необходимо выбрать платежного провайдера. Список доступных систем зависит от страны регистрации вашего бизнеса и валюты расчетов. Популярные варианты для русскоязычного сегмента включают ЮKassa, Robokassa, CloudPayments и другие. Зарубежные проекты часто используют Stripe или PayPal.

Зарегистрируйтесь в личном кабинете выбранной платежной системы, пройдите верификацию юридического лица или ИП и активируйте модуль «Прием платежей в Telegram» (или аналогичный). В результате вы получите Provider Token — уникальный ключ, связывающий ваш магазин с конкретным ботом.

Шаг 2. Настройка в BotFather

Чтобы активировать возможность выставления счетов, нужно сообщить платформе о подключенном провайдере:

  1. Откройте чат с @BotFather.
  2. Выберите своего бота или команду /mybots.
  3. Перейдите в раздел Payments.
  4. Нажмите Add Provider и выберите из списка ту систему, в которой вы уже получили токен.
  5. Вставьте скопированный Provider Token.

После успешного добавления бот готов к формированию платежных документов.

Шаг 3. Техническая реализация отправки счета

Процесс оплаты инициируется методом sendInvoice. В коде вашего бота (на Python, Node.js или другом языке) необходимо сформировать запрос со следующими обязательными параметрами:

  • title и description: название товара и краткое описание.
  • payload: уникальная строка данных (до 128 байт), которая вернется вам вместе с уведомлением об оплате. Сюда обычно помещают ID заказа во внутренней базе данных.
  • provider_token: ключ, полученный на предыдущих этапах.
  • currency: код валюты (например, RUB, USD, EUR).
  • prices: массив товаров с ценами в минорных единицах валюты (копейки, центы).
  • start_parameter: уникальная строка для глубокой ссылки, чтобы пользователь не мог переслать счет другому лицу.

Никогда не храните секретные ключи платежной системы прямо в коде бота. Используйте переменные окружения (.env) для защиты чувствительных данных.

После вызова метода пользователь увидит кнопку «Оплатить». После ввода данных карты и подтверждения транзакции, платежная система обработает операцию.

Шаг 4. Обработка результатов и выдача товара

Когда оплата прошла успешно, сервер платежной системы отправляет вашему боту обновление типа pre_checkout_query (запрос на подтверждение перед списанием) и затем successful_payment.

Алгоритм работы бота должен быть следующим:

  1. Получить апдейт pre_checkout_query.
  2. Проверить наличие товара, актуальность цены и статус пользователя.
  3. Ответить методом answerPreCheckoutQuery с параметром ok=true. Если ответить false или проигнорировать запрос, оплата не пройдет.
  4. Получить апдейт successful_payment.
  5. Сверить payload из уведомления с данными в вашей базе.
  6. Выдать товар (открыть доступ к курсу, отправить файл, активировать подписку) и поблагодарить клиента.

Безопасность и тестирование

Перед запуском реальных продаж обязательно протестируйте сценарий в режиме песочницы (Test Mode). Большинство провайдеров позволяют включить тестовый режим в личном кабинете и предоставляют номера тестовых карт.

Ключевые аспекты безопасности:

  • HTTPS: Сервер, обрабатывающий вебхуки от Telegram, должен работать только по защищенному протоколу.
  • Валидация данных: Всегда проверяйте сумму платежа, пришедшую от Telegram, с суммой в вашей базе данных. Не доверяйте цене, которую можно подменить на стороне клиента.
  • Идемпотентность: Обрабатывайте уведомления так, чтобы при повторной отправке одного и того же сигнала товар не выдался дважды.

Сравнение методов интеграции

ПараметрNative Payments (Инвойс)Внешняя ссылка
КонверсияВысокая (все в одном окне)Средняя (требуется переход)
Сложность настройкиСредняя (нужен бэкенд)Низкая (генерация ссылки)
Поддержка Apple/Google PayДаЗависит от формы провайдера
Автоматизация выдачиПолная (через вебхуки)Требует дополнительной логики

Частые ошибки

  • Неверный формат цены. Самая частая ошибка новичков — передача суммы в рублях вместо копеек. Сумма 100 рублей должна быть передана как 10000.
  • Игнорирование pre_checkout_query. Если бот не отвечает на этот запрос за 10 секунд, транзакция отменяется банком, хотя пользователь уже ввел данные карты.
  • Повторное использование payload. Уникальный идентификатор заказа должен генерироваться для каждой новой попытки оплаты, иначе могут возникнуть конфликты при обработке вебхуков.
  • Отсутствие обработки ошибок. Если платеж отклонен банком, бот должен корректно сообщить об этом пользователю, а не молчать.

FAQ

Можно ли принимать криптовалюту в боте? Нативные платежи Telegram работают только с фиатными валютами через банковские шлюзы. Для криптооплаты придется использовать сторонние сервисы, которые генерируют ссылки на оплату или создают собственные мини-приложения внутри Telegram.

Берет ли Telegram комиссию с платежей? Нет, платформа не взимает процент с транзакций. Комиссию удерживает только выбранный вами платежный провайдер согласно его тарифам.

Что делать, если нужного провайдера нет в списке BotFather? Список постоянно обновляется. Если вашего партнера нет, используйте метод создания ссылок на оплату (Payment Link), который поддерживает любой банк или агрегатор, имеющий веб-интерфейс.

Как оформить возврат средств? Возврат производится исключительно через личный кабинет вашей платежной системы. Telegram не хранит деньги и не может инициировать возврат автоматически. После возврата в панели провайдера рекомендуется вручную уведомить пользователя в чате.