Telegram-бот для автоматизации подписок на базе 3X-UI: как я избавился от ручной рутины

Привет! Расскажу, как за полтора месяца собрал систему, которая полностью автоматизировала управление подписками на сетевой сервис. Telegram Mini App для клиентов, админка для себя, интеграция с 3X-UI и несколько платёжных систем. Теперь трачу на администрирование ноль часов в неделю.

С чего всё началось

У меня было три сервера с 3X-UI в разных локациях. Панель поддерживает VLESS и другие протоколы, имеет открытый API — в общем, удобная штука для управления сетевыми сервисами.

Проблема в другом. Когда клиентов стало больше тридцати, начался хаос.

Человек пишет "хочу подписку". Я проверяю, пришли ли деньги. Захожу в панель первого сервера, создаю клиента. Потом во второй. Потом в третий. Копирую конфиг, отправляю в личку. Записываю в табличку дату окончания. Через месяц вспоминаю, пишу напоминание. Если не продлил — захожу и отключаю.

На тридцати клиентах это съедало часа три в неделю. На пятидесяти — уже невыносимо. Плюс постоянно что-то забываешь: кому-то не продлил на одном сервере, кто-то сидит бесплатно потому что не отключил вовремя.

Решил автоматизировать.

Что хотел получить

Идеальная картина: клиент заходит в бота, нажимает "Купить", платит — и через несколько секунд у него уже всё работает. Без моего участия. А когда подписка заканчивается — система сама отключает доступ и присылает напоминание.

Ещё хотел единую ссылку для клиента. Не три разных конфига на три сервера, а одну подписку, которая работает везде.

Главная идея — один токен на все серверы

Это решение упростило вообще всё.

Раньше было так: клиент покупает, я создаю ему ключ на каждом сервере, отправляю три ссылки. Через месяц продлевает — снова создаю, снова отправляю.

Теперь: каждый клиент получает уникальный токен один раз и навсегда. Этот токен привязан ко всем его ключам на всех серверах. Клиент видит одну ссылку — добавляет в приложение, и там сразу все локации.

Продлил подписку? Ключи те же самые, просто дата сдвинулась. Ничего не надо перенастраивать.

Я добавил новый сервер? Система сама создала ключи всем активным клиентам. Они даже не заметили — просто появилась новая локация.

Как это работает для клиента

Клиент открывает Mini App прямо из Telegram. Видит тарифы, выбирает нужный, нажимает "Оплатить". Редирект на платёжку — ЮKassa, криптовалюта через CryptoBot или Telegram Stars.

После оплаты приходит webhook, система автоматически создаёт ключи на всех серверах и отправляет клиенту ссылку. Всё занимает секунд пять-десять.

За три дня до окончания подписки — автоматическое напоминание. Если не продлил — ключи отключаются. Не удаляются, а именно отключаются. При следующей оплате просто включаются обратно — клиенту не нужно ничего перенастраивать.

Что вижу я в админке

Сделал веб-панель на React. Захожу — вижу: сколько активных подписок, сколько денег за месяц, кто скоро истекает, какие серверы онлайн.

Могу вручную продлить кому-то подписку, создать промокод, посмотреть историю платежей. Есть разделение по ролям — могу дать оператору доступ только к работе с клиентами, без финансов и настроек.

Данные обновляются в реальном времени через WebSocket. Открыл админку — и видишь как приходят платежи, не обновляя страницу.

Техническая часть

Бэкенд на Python: FastAPI для API, aiogram для Telegram-бота. База PostgreSQL, кэш и очереди через Redis.

Фронтенд админки — React с TypeScript и shadcn/ui. Mini App для клиентов тоже на React, через Telegram WebApp API.

Интеграция с 3X-UI через их REST API. Это было самым сложным — документации почти нет, пришлось реверсить запросы из веб-интерфейса.

Всё завёрнуто в Docker, деплоится на любой VPS. Тестировал на Ubuntu.

Проблемы

Сессия 3X-UI протухает через несколько часов. Сначала не понимал, почему запросы вдруг начинают падать. Пришлось сделать автоматический перелогин перед операциями.

Часовые пояса — боль. Панель хранит время в миллисекундах UTC, я в базе — в datetime, фронт показывает локальное. Один раз подписка "истекла" на три часа раньше.

Telegram банит за массовые рассылки. Хотел уведомить всех о новом сервере — получил бан бота на сутки. Теперь отправляю с задержкой.

Гонки при оплате. Если два webhook'а придут одновременно — создадутся дубли. Добавил блокировку через Redis.

Результат

Время на администрирование: ноль. Захожу иногда посмотреть статистику — просто потому что интересно. Никаких действий от меня не требуется.

Клиенты получают ключ за несколько секунд после оплаты. Не через час, не "когда админ проснётся" — сразу.

Добавить новый сервер — это добавить запись в базу. Всё остальное происходит автоматически.

Кому это может пригодиться

Тем, кто уже работает с 3X-UI и устал от ручной рутины. Тем, кто хочет запустить сервис с подписками, но не хочет писать всё с нуля. Тем, кто ищет готовое решение для монетизации.

Если интересно посмотреть как это работает или обсудить детали — пишите в Telegram: @by_monexo

Важно: это техническое решение для автоматизации управления сетевыми сервисами. Как вы его используете — зависит от ваших задач. Соблюдайте законодательство.

Начать дискуссию