Промокоды и gift-коды
Один движок промокодов обслуживает три входа: кнопку «🎟 Промокод» в боте, кнопку «У меня промокод» на экране оплаты и gift-диплинки ?start=gift_. Награда применяется мгновенно, активация — уникальная на пользователя.
Типы наград
| Тип | Что даёт | Условие |
|---|---|---|
balance | пополняет баланс на сумму промокода | — |
personal_discount | персональная скидка N% — действует на все покупки, пока её не сменят | — |
purchase_discount | скидка N% на следующую покупку, одноразовая | — |
promo_group | добавляет юзера в промо-группу со своими скидками | — |
duration | +N дней к текущей подписке (продление на панели) | нужна активная подписка |
subscription | бесплатные N дней: продлевает подписку, а если её нет — выдаёт новую бесплатную | — |
Награда subscription выдаётся тем же путём, что и триал (panel-first, снапшот заморожен), но пользователь при этом не помечается как платящий. В кабинете при создании промокода доступны четыре типа: баланс / дни / trial-подписка / промо-группа; скидочные промокоды переезжают при миграции с других ботов.
Ограничения промокода
expires_at— срок действия;max_activations— общий лимит активаций (пусто = безлимит);- одна активация на пользователя — повторный ввод того же кода отбивается;
availability— кому доступен: всем / только новым (без платной подписки в истории) / только действующим клиентам / только приглашённым по рефералке.
Коды хранятся в верхнем регистре — бот сам приводит ввод к uppercase, регистр при вводе не важен.
Ввод в боте и на экране оплаты
Кнопка «🎟 Промокод» (личный кабинет бота или своя кнопка в конструкторе меню) — код одним сообщением, бонус начисляется сразу.
Второй вход — экран выбора способа оплаты: кнопка «🎟 У меня промокод». Она показывается только когда к цене ещё не применена скидка; после активации кода цена на экране пересчитывается. Подробнее про флоу покупки — /bot/purchase.
Скидки: one-shot против персональной
purchase_discount сгорает при любой платной покупке — новой подписке, продлении, смене тарифа и даже докупке трафика (цена которой им тоже снижается). personal_discount живёт на пользователе постоянно.
Итоговая скидка складывается: промо-группа + персональная + одноразовая + активная распродажа, и капается на 100%.
Скидка 100% = бесплатно
Если итоговая цена обнулилась, покупка идёт по free-path — подписка выдаётся сразу, минуя платёжный шлюз.
Gift-коды: ?start=gift_
Gift-код — обычный промокод, активируемый диплинком: https://t.me/<бот>?start=gift_<КОД>. Человек жмёт ссылку, бот применяет код прямо на /start и отвечает «🎁 Подарок активирован!». Работают все те же проверки: срок, лимит, одна активация на юзера — истёкший или чужой уже активированный код вернёт понятную ошибку.
Масс-генерация с CSV
В кабинете (Акции и промокоды → «🎁 Пачка gift-кодов») генерируется до 1000 кодов за раз: указываете количество и сколько дней подписки дарит каждый код. Каждый код создаётся строго одноразовым (max_activations = 1), с префиксом GIFT-, и сразу скачивается CSV с колонками code, gift_link — готовые диплинки для раздачи в рассылке, на стриме или партнёру.
Многоразовые кампанейские коды с явным лимитом активаций создаются по одному там же — см. /cabinet/promos.
