Skip to main content

Обзор

Купон — одноразовая ссылка, которая выдаёт подписку по конкретному тарифу на конкретный срок. Купоны создаются партиями: администратор генерирует N ссылок, передаёт их партнёру или разыгрывает, а расчёт с партнёром идёт вне бота. Подсистема появилась в v3.63.0, лимит активаций на пользователя и удаление партий — в v3.67.0.
Купон — не промокод. Промокод даёт скидку, баланс, дни или трафик к существующей покупке и может быть многоразовым. Купон выдаёт подписку целиком, одноразовый и живёт внутри партии. См. Промокоды и промопредложения.

Что получает пользователь

Активация купона повторяет семантику подарочной подписки:
  • нет подписки — создаётся новая по тарифу партии на period_days;
  • есть активная подписка — она продлевается на period_days;
  • есть истёкшая подписка — она заменяется новой.

Ссылка активации

Каждый купон — это deep link:
Токен — 32 hex-символа (128 бит). Полная нагрузка (coupon_ + токен = 39 символов) укладывается в лимит Telegram в 64 символа, поэтому ссылка всегда ищется точным совпадением и не обрезается.

Параметры партии

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

Управление через кабинет

Партии также создаются и просматриваются из админ-панели бота.

Статусы купона

Флаг is_revoked у партии — это кэш для списка. Право на активацию всегда определяется статусом конкретного купона, а не флагом партии.

Отказы при активации

«Не найден», «отозван» и «активирован другим» намеренно отвечают одним и тем же invalid. Иначе перебор ссылок превращался бы в оракул, по которому можно проверять существование токенов.

Гарантии

Списание идёт под SELECT ... FOR UPDATE с повторной проверкой под блокировкой. Два одновременных перехода по одной ссылке не выдадут две подписки.
Вся валидация выполняется на чтении без блокировки — неудачный переход не тормозит остальные активации.
wholesale_price_kopeks — только учёт. Расчёт с партнёром идёт вне бота, поэтому купоны не участвуют в статистике продаж как платежи.

Связанные разделы

Промокоды

Скидки, баланс, дни и трафик

Подарочные подписки

Похожий сценарий выдачи подписки по ссылке