В 2024 году Telegram запустил Stars — внутреннюю валюту мессенджера. Пользователи покупают звёзды за реальные деньги и могут тратить их внутри Telegram: на стикеры, подписки, цифровые товары и услуги в ботах и Mini Apps.
Для бизнеса это новый канал монетизации. Причём не только для цифровых продуктов — за Stars можно продавать и физические товары, и услуги. Разбираем, как это работает и когда стоит использовать.
Что такое Telegram Stars
Stars — это внутренняя валюта Telegram, аналог кредитов в других платформах. Пользователь покупает их через App Store или Google Play (или через crypto), а бизнес принимает их как оплату.
Курс (приблизительный): 1 USD ≈ 50 Stars. То есть 100 Stars ≈ 2 USD ≈ 180 ₽.
Откуда берутся Stars у пользователей:
- Покупка в приложении (App Store / Google Play)
- Получение как подарок от другого пользователя
- Заработок через продажу собственного контента
Комиссия Telegram: 30% с каждой транзакции. Много? Да. Но зато нет эквайринга, нет банковских переводов, нет конвертации валют.
Когда Stars выгоднее обычных платежей:
- Цифровые товары (курсы, подписки, файлы)
- Международная аудитория — Stars работают везде без привязки к стране
- Небольшие суммы (до 1000 ₽) — геморрой с настройкой эквайринга не окупается
- Аудитория, у которой уже есть Stars (активные пользователи Telegram)
Как принять Stars в боте
Для этого нужен обычный Telegram-бот с поддержкой Invoice API.
Шаг 1: Включить Stars в BotFather
Напишите /mybots → выберите бота → Bot Settings → Payments. Для Stars платёжный провайдер не нужен — это встроенный механизм Telegram.
Шаг 2: Отправить инвойс
from telegram import Bot, LabeledPrice
from telegram.ext import Application, CommandHandler, PreCheckoutQueryHandler, MessageHandler, filters
BOT_TOKEN = "ВАШ_ТОКЕН"
async def cmd_buy(update, context):
"""Команда /купить — отправляем инвойс в Stars"""
await context.bot.send_invoice(
chat_id=update.effective_chat.id,
title="Консультация по развитию бизнеса",
description="60-минутная видеоконсультация с экспертом Feature IT",
payload="consultation_60min", # Ваш внутренний идентификатор
currency="XTR", # XTR — это Stars
prices=[
LabeledPrice("Консультация 60 мин", 500) # 500 Stars
],
# Stars не требуют provider_token
provider_token="",
)
async def pre_checkout(update, context):
"""Подтверждаем платёж до списания Stars"""
query = update.pre_checkout_query
# Здесь проверяем: товар ещё доступен, пользователь не покупал раньше и т.д.
# Если всё ок:
await query.answer(ok=True)
# Если что-то не так:
# await query.answer(ok=False, error_message="Товар недоступен")
async def successful_payment(update, context):
"""Платёж прошёл — выдаём товар"""
payment = update.message.successful_payment
payload = payment.invoice_payload # "consultation_60min"
telegram_payment_id = payment.telegram_payment_charge_id
stars_amount = payment.total_amount # 500
# Логика выдачи товара
await update.message.reply_text(
"✅ Оплата получена! Мы свяжемся с вами в течение часа для назначения времени консультации."
)
# Сохраняем в БД
await save_purchase(
user_id=update.effective_user.id,
payload=payload,
payment_id=telegram_payment_id,
amount=stars_amount
)
app = Application.builder().token(BOT_TOKEN).build()
app.add_handler(CommandHandler("купить", cmd_buy))
app.add_handler(PreCheckoutQueryHandler(pre_checkout))
app.add_handler(MessageHandler(filters.SUCCESSFUL_PAYMENT, successful_payment))
Важный нюанс: pre_checkout должен ответить в течение 10 секунд. Это критично. Не делайте тяжёлых запросов к БД внутри него.




