ShooshVPN
▍VPN внутри Telegram-бота: подписка, оплата и ключ — в три тапа, без приложений и личного кабинета.
Контекст
Запрос был простой и честный: человек открывает Telegram, выбирает тариф, платит — и сразу получает рабочий ключ. Без сайта, без регистрации, без «скачайте наш клиент». Весь продукт живёт внутри одного бота.
Сложность не в интерфейсе, а в инфраструктуре под ним: выдача и ротация ключей, привязка к подписке, автопродление и оплата прямо в чате должны работать без ручного вмешательства круглые сутки.
Задача
- 01Подписки с разными сроками и тарифами прямо в боте
- 02Оплата без выхода из Telegram
- 03Моментальная выдача ключа и QR после оплаты
- 04Ротация ключей и автопродление подписки
- 05Стабильная работа узлов без ручного администрирования
Решение
Тариф и оплата в чате
Бот показывает тарифы инлайн-кнопками, оплата идёт через Telegram Payments — счёт открывается прямо в диалоге, подтверждение приходит вебхуком за пару секунд.
Выдача ключа за секунды
После оплаты бот генерирует конфиг (WireGuard/VLESS), привязывает его к подписке и отправляет ключ строкой и QR-кодом — копируешь или сканируешь и подключаешься.
Автопродление и ротация
За день до конца подписки бот напоминает и предлагает продлить в один тап. Ключи можно перевыпустить кнопкой — старый отзывается, новый прилетает в чат.
Узлы и аптайм
Узлы и сам бот упакованы в Docker, с health-чеками и автоперезапуском. Если узел деградирует — трафик уходит на здоровый, пользователь этого не замечает.
Архитектура
Ядро — асинхронный бот на aiogram: вся логика тарифов, состояний подписки и платёжных вебхуков. Состояние пользователей и ключей хранится в PostgreSQL, генерация конфигов вынесена в отдельный сервис выдачи поверх WireGuard и VLESS.
Узлы, бот и воркер продлений запускаются в Docker. Планировщик каждый день проверяет истекающие подписки, шлёт напоминания и отзывает ключи у неоплаченных — без участия администратора.
Результаты
- от тарифа до оплаты
- выдача ключа
- продление подписки
- аптайм узлов
Что не получилось с первого раза
- ✕Сначала конфиг генерировался синхронно в обработчике платежа — при всплеске оплат бот подвисал и часть пользователей видела «ключ выдаётся» дольше минуты. Вынесли выдачу в отдельную очередь, время стабилизировалось до нескольких секунд.
- ✕Первые автопродления списывали и выдавали новый ключ, но не всегда отзывали старый — у части аккаунтов копились висящие конфиги. Добавили строгую привязку «один активный ключ на подписку» с отзывом при ротации.
“Хотелось, чтобы человек просто заплатил и пользовался, а не разбирался в настройках. В итоге всё уместилось в один бот: оплатил — получил ключ — подключился.
Команда
Что дальше
- →Реферальная программа внутри бота
- →Выбор локации узла перед выдачей ключа
- →История платежей и чеки в чате

