База знаний
Telegram Stars для ботов — как принимать платежи во внутренней валюте Telegram
Telegram Stars (XTR) — внутренняя валюта Telegram для оплаты цифровых товаров и услуг прямо в ботах. Разбираем, как устроены Stars, как принимать оплату через Bot API, как работают gifts, баланс бота, рефанды и какие сценарии монетизации это открывает для контентных, community- и AI-продуктов.
СейчасЧто такое Telegram Stars и где они обязательны
- Что такое Telegram Stars и где они обязательны
- Возможности для ботов и каналов
- Экономика, баланс и вывод
- Разовые платежи через Bot API
- Python: создание инвойса
- Node.js: создание инвойса
- Подтверждение оплаты
- Возврат платежа
- Подписки на Stars
- Gifts и другие операции
- Лимиты и ограничения
- Когда Stars не подходят
- Полезные сценарии
- Продажа пакета генераций в AI-боте
- Доступ по подписке
- Разовая продажа цифрового материала
- Монетизация канала
- Проверка результата и чек-лист запуска
- Официальные ссылки
- Следующий шаг
- Связанные материалы
Telegram Stars (код валюты XTR) — виртуальная расчётная единица Telegram для покупки цифровых товаров и услуг в ботах и мини-приложениях (Mini Apps). Она позволяет принимать платежи внутри Telegram без подключения внешнего платёжного провайдера.
Материал основан на документации и не заявляет о самостоятельном тестировании описанных сценариев.
Содержание
- Что такое Telegram Stars и где они обязательны
- Возможности для ботов и каналов
- Экономика, баланс и вывод
- Разовые платежи через Bot API
- Подписки на Stars
- Gifts и другие операции
- Лимиты и ограничения
- Полезные сценарии
- Проверка результата и чек-лист запуска
- Официальные ссылки
Что такое Telegram Stars и где они обязательны
Пользователь приобретает Stars через доступные в его клиенте способы, включая покупки через Apple и Google, @PremiumBot и Fragment, а затем расходует их внутри Telegram.
Для продажи цифровых товаров и услуг внутри приложений Telegram бот или Mini App должен использовать Stars. Это относится к подпискам, доступу к контенту, генерациям в AI-боте и виртуальным предметам. Обойти это требование с помощью внешнего сайта или стороннего платёжного провайдера для продажи внутри Telegram нельзя.
Для физических товаров и услуг применяются обычные платежи Bot Payments API с поддерживаемыми валютами и провайдерами.
XTR указывается целым числом Stars. Для цифрового инвойса provider_token можно оставить пустым.Возможности для ботов и каналов
| Возможность | Практическое применение |
| Разовые платежи | Продажа доступа, файлов, генераций и других цифровых результатов через sendInvoice |
| Подписки | Периодическая оплата доступа к функциям бота или контенту |
| Paid media | Платные фото и видео, которые открываются после оплаты Stars |
| Star reactions | Поддержка авторов и каналов платными реакциями |
| Gifts | Отправка подарков пользователям и каналам, а также операции с подарками бизнес-аккаунта |
| Giveaways | Розыгрыши Stars среди участников канала |
| Refunds | Возврат платежа методом refundStarPayment |
| Баланс и история | Получение текущего баланса и списка транзакций |
| Telegram Ads | Оплата рекламы Stars с баланса бота или канала по специальному тарифу со скидкой 30% |
Не все перечисленные механики относятся к одному и тому же интерфейсу. Например, платежи бота доступны через Bot API, а часть операций с балансом, рекламой и выводом описана на уровне Telegram API и пользовательского интерфейса Telegram.
Экономика, баланс и вывод
Цена покупки Stars зависит от выбранного способа оплаты и применимых налогов и сборов. Официальная документация предупреждает, что итоговые суммы могут различаться у пользователей. Поэтому фиксированный курс вроде «1 Star = определённая сумма в долларах» нельзя использовать в финансовой модели без актуальной проверки.
После успешного платежа Stars поступают на баланс бота. Историю операций можно получить через getStarTransactions, а текущий баланс — через getMyStarBalance. На уровне Telegram API доступны также статистика выручки, доступный для вывода баланс и текущий курс конвертации Stars в USD.
Заработанные Stars можно:
- Конвертировать в вознаграждение с выводом через Fragment на TON-кошелёк, если вывод доступен владельцу и выполнены текущие требования Telegram.
- Направить на Telegram Ads для принадлежащего владельцу бота или канала. Официальная документация указывает скидку 30% для такой оплаты.
- Использовать для поддерживаемых внутренних операций, например для возвратов. Операции с подарками и переводами зависят от типа аккаунта и конкретного объекта.
withdrawal_enabled, available_balance и текущими лимитами. Минимальная и максимальная суммы вывода задаются серверной конфигурацией; не фиксируйте их в коде без чтения актуального состояния.Разовые платежи через Bot API
Минимальный рабочий поток состоит из четырёх этапов:
- Отправить инвойс с
currency: "XTR". - Получить
pre_checkout_queryи ответить на него в течение 10 секунд. - Дождаться
successful_payment. - Сохранить
telegram_payment_charge_idи только после этого выдать товар.
Python: создание инвойса
from telegram import LabeledPrice
async def buy(update, context):
await context.bot.send_invoice(
chat_id=update.effective_chat.id,
title="Premium доступ",
description="30 дней доступа к функциям AI-бота",
payload="premium_30d",
provider_token="",
currency="XTR",
prices=[LabeledPrice("Premium 30 дней", 500)],
)Node.js: создание инвойса
bot.command("buy", async (ctx) => {
await ctx.telegram.sendInvoice(ctx.chat.id, {
title: "Premium доступ",
description: "30 дней доступа к функциям AI-бота",
payload: "premium_30d",
provider_token: "",
currency: "XTR",
prices: [{ label: "Premium", amount: 500 }]
});
});Сигнатуры SDK могут отличаться между версиями. Перед внедрением проверьте документацию используемой библиотеки и соответствие её версии текущему Bot API.
Подтверждение оплаты
async def pre_checkout(update, context):
query = update.pre_checkout_query
# Здесь проверьте payload, цену и возможность выдать товар.
await query.answer(ok=True)
async def on_paid(update, context):
payment = update.message.successful_payment
save_purchase(
user_id=update.effective_user.id,
charge_id=payment.telegram_payment_charge_id,
stars=payment.total_amount,
payload=payment.invoice_payload,
)
# Выдавайте товар идемпотентно после фиксации платежа.Ответ на pre_checkout_query подтверждает готовность принять заказ, но не доказывает успешную оплату. Выдавайте товар только после successful_payment.
Для пересылаемых инвойсов, счетов во встроенном inline-режиме и многоразовых инвойсов отдельно контролируйте допустимость повторной покупки. Проверяйте payload, сумму, пользователя и уже обработанный telegram_payment_charge_id.
Возврат платежа
await bot.refund_star_payment(
user_id=user_id,
telegram_payment_charge_id=charge_id,
)Возврат списывает соответствующие Stars с баланса бота и возвращает их пользователю. Бот обязан отвечать на /paysupport и самостоятельно обрабатывать платежные споры. Telegram также рекомендует предоставить понятные условия через /terms или другой доступный способ.
Подписки на Stars
Ссылку на подписку можно создать через createInvoiceLink, передав subscription_period. Поддерживаемый период для Stars-подписки — 30 дней, то есть 2592000 секунд.
link = await bot.create_invoice_link(
title="Premium",
description="Ежемесячный доступ",
payload="premium_sub",
provider_token="",
currency="XTR",
prices=[LabeledPrice("Premium / месяц", 350)],
subscription_period=2592000,
)После оплаты Telegram выполняет периодические списания при наличии средств. Продления отражаются в платежных обновлениях. Начиная с Bot API 10.2, изменения пользовательской подписки также могут приходить в обновлении subscription как объект BotSubscriptionUpdated.
В приложении храните собственное состояние доступа и обрабатывайте повторные события идемпотентно. Не рассчитывайте срок доступа только от момента создания ссылки.
Gifts и другие операции
Метод sendGift позволяет боту отправить доступный подарок пользователю или каналу. Перед отправкой сверяйте в актуальном Bot API доступность подарка, его цену и ограничения: ассортимент, доступность и тираж могут меняться.
Для подключённого бизнес-аккаунта Bot API предоставляет отдельные операции:
getBusinessAccountGifts— получить подарки аккаунта;convertGiftToStars— конвертировать поддерживаемый подарок в Stars;upgradeGift— улучшить обычный подарок до уникального;transferGift— передать уникальный подарок;getBusinessAccountStarBalanceиtransferBusinessAccountStars— работать с балансом бизнес-аккаунта в разрешённых пределах.
Обычные и уникальные подарки имеют разные свойства и ограничения. Не обещайте пользователю возможность обратной конвертации или передачи конкретного подарка, пока API не подтвердил её для этого объекта.
Лимиты и ограничения
| Параметр | Актуальное правило |
| Валюта цифрового инвойса | XTR |
| Сумма | Целое число Stars |
Ответ на pre_checkout_query | Не позднее 10 секунд, иначе транзакция отменяется |
| Период подписки | 30 дней (2592000 секунд) |
| Максимальная цена периода подписки | 10 000 Stars по changelog Bot API |
| Максимальная цена paid media | 25 000 Stars по changelog Bot API |
| Окно вывода заработанных Stars | Telegram указывает 21 день после начисления; фактическая доступность и пределы зависят от серверного состояния |
| Тестирование | Отдельное тестовое окружение Telegram для платежей Stars |
Для обычного разового инвойса не переносите лимиты подписок или paid media автоматически. Проверяйте актуальные ограничения конкретного метода в Bot API.
Stars могут быть недоступны отдельным пользователям из-за региональных ограничений. Клиенты Telegram получают для этого признак stars_purchase_blocked; продукту нужен понятный сценарий отказа, если покупка недоступна.
Когда Stars не подходят
- Вы продаёте физические товары или услуги: используйте обычные платежные провайдеры Bot Payments API.
- Вам нужен B2B-документооборот со счётом, актом, НДС или другими документами: одной интеграции Stars для этого недостаточно, требования к оформлению нужно проверить отдельно.
- Финансовая модель чувствительна к точному курсу и сроку вывода: цена покупки, расчетное вознаграждение и доступность вывода меняются.
- Требуется способ оплаты, недоступный внутри Telegram или запрещённый правилами магазинов приложений.
Полезные сценарии
Продажа пакета генераций в AI-боте
Задача: брать оплату за ресурсоёмкие запросы без отдельной платёжной формы.
Бот отправляет разовый инвойс в XTR, сохраняет идентификатор платежа и после successful_payment начисляет внутренние кредиты. Пользователь видит новый баланс кредитов или получает результат первой оплаченной генерации.
Ограничение: внутренние кредиты и их правила возврата реализует владелец бота. Telegram учитывает Stars, но не ведёт продуктовый баланс вместо приложения.
Доступ по подписке
Задача: предоставлять премиум-функции на оплаченный период.
Бот создаёт ссылку с subscription_period=2592000, принимает платежные обновления и хранит дату окончания доступа. Проверяемый результат — активный статус подписки в базе приложения и доступ к закрытой функции.
Ограничение: нужно обрабатывать нехватку Stars, повторные уведомления и изменение состояния подписки.
Разовая продажа цифрового материала
Задача: выдать файл, ссылку или доступ после оплаты.
После подтверждённого платежа бот записывает заказ и отправляет материал. Повторная доставка с тем же telegram_payment_charge_id не должна создавать второй заказ.
Ограничение: продавец отвечает за поддержку, условия продажи и споры. Для физической доставки этот поток не подходит.
Монетизация канала
Задача: получать Stars за контент и поддержку аудитории.
Канал может использовать платные реакции, подписочные приглашения, paid media или giveaways. Результат проверяется по балансу, истории транзакций и состоянию соответствующей публикации или подписки.
Ограничение: интерфейсы каналов и Bot API решают разные задачи; наличие функции в канале не означает, что у неё есть одноимённый метод для обычного бота.
Проверка результата и чек-лист запуска
Минимальная проверка платежного контура:
- Подключите бота к тестовому окружению Telegram.
- Создайте инвойс в
XTRна небольшое целое количество тестовых Stars. - Убедитесь, что бот получает
pre_checkout_queryи отвечает быстрее 10 секунд. - Завершите оплату и проверьте получение
successful_payment. - Сверьте
invoice_payload,total_amountиtelegram_payment_charge_idс сохранённым заказом. - Повторно передайте то же событие обработчику: товар не должен выдаваться второй раз.
- Выполните тестовый возврат и проверьте изменение состояния заказа и баланса.
Чек-лист перед production-запуском:
XTRprovider_token для Stars-инвойса оставлен пустымpre_checkout_query в течение 10 секундsuccessful_paymentpayload, пользователь и суммаtelegram_payment_charge_idrefundStarPayment/paysupport ведёт к понятному каналу поддержкиОфициальные ссылки
- Bot Payments API for Digital Goods and Services
- Справочник Telegram Bot API
- Changelog Telegram Bot API
- Telegram Stars API
- Star Reactions and Subscriptions
- Вывод Stars и 21-дневное окно
Следующий шаг
Telegram Business Bots — как боты управляют бизнес-аккаунтом в Telegram
Связанные материалы
- Статья: Делай, брат, делай! Два месяца pimenov.ai и что я понял про ИИ-агентов
- Блог: Люди + агенты в одном чате: как мы собрали рабочий контур в Telegram
- База знаний: Возможности Telegram-ботов — справочник по Bot Features
Если вы проектируете монетизацию бота или Mini App, полезно заранее проверить платежный поток, возвраты и экономику вывода на вашей модели доступа.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov
Если хотите разобрать свою задачу — напишите мне Если хотите разобрать свою задачу — напишите мне.
Можно прийти с идеей, черновым контекстом или уже живой задачей. Помогу быстро понять, где реальный следующий шаг, а где лишний шум.
Обычно хватает 2–3 сообщений, чтобы понять, могу ли я здесь реально помочь и в каком формате лучше двигаться дальше.
Дальше по теме
Как мы с Codex развернули OmniVoice на Mac mini, клонировали мой голос, проверили 549 аудиофайлов и заменили платный API Яндекса.