Бот и Mini App
VPN subscriptions
О проекте
Этот проект объединяет Telegram-бота, Mini App для клиентов и админ-панель Django. Клиент выбирает VPN-тариф, проверяет доступ и управляет продлением в одном аккаунте. Бот открывает сервис, а Mini App даёт удобный интерфейс личного кабинета.
Тариф определяет регион, срок и число устройств. Я связал клиентский интерфейс с заказами, подписками и автоматическим подключением VPN. В аккаунте видны реальный срок доступа и статус подписки, а не только запись о покупке.
Как это работает
Выбрать тариф
Получить доступ к VPN
Управлять подпиской
Клиент выбирает тариф, затем видит в аккаунте регион, лимит устройств, дату окончания и настройку продления. Заказ может создать новую подписку или продлить существующую. Заказы и подписки хранятся отдельно, чтобы покупка и связанный с ней доступ учитывались правильно.
Бэкенд создаёт и синхронизирует доступ к VPN. Он фиксирует ожидание подключения, активный доступ и ошибки, требующие внимания. Оператор управляет клиентами, тарифами и подписками в админ-панели Django. Даты и статусы в ней совпадают с данными клиентского аккаунта.
Что было сложнее
Сложнее всего было согласовать оплату, подписку и доступ к VPN. Оплаченный заказ может ещё ждать подключения. Подписка может закончиться или продлиться, пока у VPN-аккаунта на удалённом сервере другой статус. Интерфейс должен правильно показывать каждую из этих ситуаций.
Продление тоже требует внимания: новый заказ может увеличить срок существующей подписки, а не создать ещё один аккаунт. Нужно было связать даты, подключение и ошибки синхронизации, чтобы клиент и оператор видели состояние сервиса.
Что было проще
Когда модель подписки была определена, карточки тарифов и элементы аккаунта было проще собрать. Регион, срок, число устройств и настройка продления имеют своё место в интерфейсе.
Редактирование клиентов и тарифов в Django также опирается на эти записи. Сложная логика находится в подключении и изменении подписок, а отдельные поля и карточки показывают её результат.
Что получилось хорошо
Клиент видит тариф, срок доступа и настройку продления в одном месте. Не нужно восстанавливать информацию о подписке по старым сообщениям бота.
Разделение заказов и подписок помогает поддержке. Оператор видит, что куплено, какой доступ активен и требует ли подключение внимания. Это даёт нужный контекст, когда клиент обращается за помощью.
