Боты и автоматизация2026-08-209 минРедакция Submarine School

Как создать бота подписки в Telegram: схема 2026

Как создать бота подписки в Telegram: схема 2026

Чтобы создать бота подписки в Telegram, сначала выберите, что именно продаётся: доступ к функциям самого бота или вход в приватный канал. Затем настройте оплату в Telegram Stars, храните состояние подписки на своём сервере и выдавайте доступ только после подтверждённого платежа. Эта инструкция рассчитана на цифровой контент и сервисы внутри Telegram, а не на физические товары.

Какой тип подписки выбрать

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

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

Официальный Bot API разрешает создавать подписную ссылку методом [createChatSubscriptionInviteLink](https://core.telegram.org/bots/api#createchatsubscriptioninvitelink). В производственной среде период сейчас фиксирован на 2 592 000 секунд, то есть 30 дней, а цена ссылки задаётся в диапазоне от 1 до 10 000 Stars. Эти ограничения нельзя менять в коде.

Правило выбора: если Telegram сам должен управлять входом в канал, используйте подписную ссылку. Если платёж открывает возможности вашего бота, храните отдельное состояние доступа в базе.

Счёт в боте работает только вместе с серверной логикой доступа. На вебинаре можно собрать такой сценарий с ИИ и проверить его по шагам.

Занять место

Что подготовить до первой оплаты

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

  • Описание продукта: что открывается, на какой срок, как отменить продление и куда обратиться за поддержкой.
  • База данных: идентификатор пользователя, тип плана, состояние, дата окончания, идентификатор операции и последний обработанный update.
  • Сервер с HTTPS: webhook должен принимать события Telegram и отвечать без долгой работы внутри запроса.
  • Тестовый пользователь и отдельный тестовый канал, чтобы не проверять оплату и исключение на живой аудитории.

Для цифровых товаров и услуг внутри приложений Telegram оплата должна идти в Stars с кодом валюты XTR. Официальная инструкция Payments API также требует дождаться события successful_payment: ответ на pre_checkout_query сам по себе ещё не подтверждает оплату.

По теме: Голосовой бот: как сделать в Telegram в 2026 году

Какие состояния хранить в базе

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

  1. pending: счёт создан, но подтверждённой оплаты ещё нет. Доступ закрыт.
  2. active: получен подтверждённый платёж, известна дата окончания. Доступ открыт.
  3. cancel_at_period_end: продление отключено, но оплаченный период ещё идёт. Доступ открыт до даты окончания.
  4. expired: период закончился без продления. Доступ закрыт.
  5. refunded: платёж возвращён. Событие и принятое решение остаются в журнале.

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

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

Записаться на вебинар

Как собрать обработку без повторной выдачи

Главный технический риск не в неуспешной оплате, а в повторной доставке одного события. Сеть может повторить запрос, а Telegram может прислать update после того, как сервер уже выполнил действие. Поэтому обработчик должен быть идемпотентным.

  1. Создайте продукт и стабильный invoice_payload, который однозначно связывает счёт с планом и пользователем.
  2. Для функций бота создайте ссылку на подписной счёт через createInvoiceLink: задайте XTR и subscription_period=2592000. Для канала создайте подписную пригласительную ссылку и заранее выдайте боту право can_invite_users.
  3. На pre_checkout_query проверьте, что план существует и доступен, затем своевременно подтвердите возможность оплаты.
  4. После successful_payment начните транзакцию базы и проверьте, не обработан ли уже идентификатор операции или update.
  5. Запишите платёж и новое состояние, затем выдайте доступ ровно один раз. Повтор того же события должен вернуть прежний результат без новой выдачи.
  6. На событии продления сдвиньте дату окончания. При отмене вызовите editUserStarSubscription с is_canceled=true, сохраните окончание периода и не отключайте уже оплаченный доступ раньше срока.
  7. Отдельная периодическая задача закрывает доступ, если срок истёк и подтверждённого продления нет.

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

По теме: Как сделать, чтобы бот пересылал сообщения в Telegram

Как проверить бота до запуска

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

  • Успешная первая оплата: одна запись платежа, состояние active, доступ выдан один раз.
  • Повтор того же update: число выдач не меняется, срок не прибавляется повторно.
  • Отмена продления: доступ остаётся до конца оплаченного периода, затем закрывается.
  • Недостаток Stars при продлении: старое окончание не переносится без подтверждённого списания.
  • Сбой после записи платежа: повтор обработчика завершает недостающий шаг, но не создаёт второй доступ.
  • Подменённый invoice_payload: платёжный сценарий останавливается и попадает в журнал.

Перед запуском добавьте понятные команды условий и поддержки. Telegram возлагает обработку споров на владельца цифрового сервиса и требует доступный канал поддержки, включая команду /paysupport, это указано в официальном руководстве по Stars.

Частые сбои и безопасный выход

Если createChatSubscriptionInviteLink отвечает ошибкой прав, проверьте, что бот добавлен именно в канал и получил право приглашать пользователей. Если счёт не создаётся, сначала проверьте XTR и период 30 дней, затем структуру payload.

Если оплата видна пользователю, но доступ закрыт, найдите цепочку по одному идентификатору: входящий update, запись платежа, переход состояния, операция выдачи. Не выдавайте доступ вручную до сверки, иначе повторный webhook создаст расхождение.

Если база недоступна, отвечайте временной ошибкой и не подтверждайте выдачу по данным из памяти процесса. После восстановления повторите необработанные события. Для сложного бота продаж полезно заранее описать весь сценарий от выбора до оплаты.

По теме: Как сделать приветствие в боте Telegram в 2026

Ограничения метода

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

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

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

Можно ли сделать подписку без сервера?

Для простого канала часть доступа управляется подписной ссылкой Telegram, но условия, поддержка и контроль всё равно нужны. Для платных функций бота сервер и база обязательны.

Можно ли назначить подписку на неделю?

Нет для описанного производственного механизма Stars: официальный Bot API сейчас требует период 30 дней.

Когда открывать доступ?

Только после подтверждённого successful_payment и успешной записи операции в базе. Экран оплаты и pre_checkout_query недостаточны.

Что делать при отмене?

Отключить будущее продление, сохранить дату окончания и закрыть доступ после оплаченного периода. Пользователь должен видеть этот срок.

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

Записаться на вебинар
Разборы, кейсы и фишки вайбкодинга каждую неделю в телеграм-канале «Яков вайбкодит».
Первый проект с ИИ: живой разбор, бесплатно Занять место