Обзор
Купон — одноразовая ссылка, которая выдаёт подписку по конкретному тарифу на конкретный срок. Купоны создаются партиями: администратор генерирует N ссылок, передаёт их партнёру или разыгрывает, а расчёт с партнёром идёт вне бота. Подсистема появилась вv3.63.0, лимит активаций на пользователя и удаление партий — в v3.67.0.
Купон — не промокод. Промокод даёт скидку, баланс, дни или трафик к существующей покупке и может быть многоразовым. Купон выдаёт подписку целиком, одноразовый и живёт внутри партии. См. Промокоды и промопредложения.
Что получает пользователь
Активация купона повторяет семантику подарочной подписки:- нет подписки — создаётся новая по тарифу партии на
period_days; - есть активная подписка — она продлевается на
period_days; - есть истёкшая подписка — она заменяется новой.
Ссылка активации
Каждый купон — это deep link:coupon_ + токен = 39 символов) укладывается в лимит Telegram в 64 символа, поэтому ссылка всегда ищется точным совпадением и не обрезается.
Параметры партии
Управление через кабинет
Партии также создаются и просматриваются из админ-панели бота.
Статусы купона
Флаг
is_revoked у партии — это кэш для списка. Право на активацию всегда определяется статусом конкретного купона, а не флагом партии.Отказы при активации
Гарантии
Один купон — одна активация
Один купон — одна активация
Списание идёт под
SELECT ... FOR UPDATE с повторной проверкой под блокировкой. Два одновременных перехода по одной ссылке не выдадут две подписки.Отклонённая ссылка не держит блокировку
Отклонённая ссылка не держит блокировку
Вся валидация выполняется на чтении без блокировки — неудачный переход не тормозит остальные активации.
Деньги через бота не проходят
Деньги через бота не проходят
wholesale_price_kopeks — только учёт. Расчёт с партнёром идёт вне бота, поэтому купоны не участвуют в статистике продаж как платежи.Связанные разделы
Промокоды
Скидки, баланс, дни и трафик
Подарочные подписки
Похожий сценарий выдачи подписки по ссылке
