Админка в боте
Всё управление магазином — прямо в Telegram, без веб-кабинета. Команда /admin (доступна только владельцу и админам) открывает панель с разделами.
Кто видит
Панель гейтится по тому же признаку, что и раньше: Telegram ID в ADMIN_IDS или APP__OWNER_IDS, либо роль ≥ admin. Обычные пользователи команду /admin и её кнопки не видят и не могут вызвать.
Разделы
| Раздел | Что делает |
|---|---|
| 📊 Статистика | Пользователи (сегодня / 7д / 30д), активные подписки, выручка по периодам, топ тарифов и топ касс |
| 📈 Аналитика | Воронка триал→оплата, конверсия, ARPU/ARPPU/средний чек, удержание 7д/30д, топ источников и рефереров |
| 👥 Пользователи | Поиск по Telegram ID / @username / имени, карточка (баланс, подписка, приглашённые), начислить/списать баланс, продлить подписку (+7/+30/+90 дней), бан/разбан |
| 📣 Рассылка | Выбор аудитории (все / с подпиской / триал / истёкшие) → текст → предпросмотр с числом получателей → запуск |
| 🎟 Промокоды | Список с активациями, создание (баланс ₽ / дни к подписке / бесплатная подписка) с опциональным лимитом активаций |
| 🎁 Gift-коды | Генерация пачки одноразовых кодов (до 1000) с готовыми диплинками ?start=gift_КОД |
| 🏷 Акции | Скидки по дням месяца (−N% с дня X по день Y), включение/выключение |
| ⚙️ Настройки | Быстрые тумблеры: техработы, триал, канал-лок, автопродление, рефералка, оплата с баланса — с hot-reload |
| 🖼 Оформление | Лого, стикер и баннеры экранов командами /setlogo, /setsticker, /setbanner |
Как это работает
Каждое действие в боте вызывает те же сервисы и таблицы, что и веб-кабинет — логика не дублируется. Начисление баланса пишет строку в леджер (тип GIFT/WITHDRAWAL, метод admin), продление идёт через panel-first renew (при недоступной панели — понятная ошибка, не молчание), рассылка ставится в ту же очередь taskiq, что и из кабинета — прогресс и детальная статистика по ней видны в веб-админке → «Рассылки».
Промокоды и gift-коды — примеры
Промокод на 500 ₽, безлимитный: Промокоды → Создать → «Баланс» → 500. Промокод на 30 дней, лимит 100 активаций: → «Дни к подписке» → 30 100. 50 gift-кодов по 30 дней: Gift-коды → «Дни к подписке» → 30 50 — бот пришлёт список диплинков (или файлом, если кодов много).
Тонкая настройка — в вебе
Из бота создаются промокоды с базовыми параметрами (награда + лимит). Точная настройка (сроки действия, доступность «только новым / приглашённым», промо-группы) и правка/удаление существующих — в веб-кабинете, раздел «Промо».
