Подписочный сервис в TelegramСвой продукт
Как я разработал подписочный сервис в Telegram
Я разработал сервис подписки внутри Telegram: бота, Mini App, биллинг, управление парком серверов и ИИ-агента поддержки. Покупка и управление доступны в Telegram.
Схема экрана
Главная
Стартовый экран Mini App с текущим тарифом, состоянием подключения и быстрыми действиями.
Иллюстративная схема, не скриншот продукта.
Продукт
Что это за продукт
Я разработал сервис подписки на частную сеть внутри Telegram. Через бота и Mini App пользователь покупает доступ, получает настройки и обращается в поддержку. Бэкенд управляет тарифами, платежами, устройствами, рефералами и ёмкостью серверов. Я спроектировал и сделал весь сервис: бота, приложение, биллинг, автоматизацию серверов, агента поддержки и инструменты эксплуатации.
Продукт работает в продакшене. По записям проекта с ноября 2025 в нём около 2846 коммитов, примерно 105 000 строк кода приложения на Python и 449 тестовых файлов. Название продукта здесь не раскрывается. Модель безопасности и доступа описана отдельно.
В конце каждого раздела указаны экраны с описанными функциями.
Пользователь открывает бота или Mini App, выбирает тариф и платит. Для каждого устройства он получает ссылку подключения и QR-код. В том же приложении можно управлять устройствами, менять страну выхода и маршрутизацию, смотреть использование, приглашать друзей, обращаться в поддержку и продлевать подписку.
Основные действия пользователь выполняет в Mini App, бот подключается в нужный момент. Система проверяет результат сама: нажатия кнопки недостаточно для сообщения об успехе. Запоздавший экран или сбой без сообщения об ошибке я считаю дефектом продукта, который нужно исправить.
Онбординг
Настройка разбита на шаги. Пользователь приходит в бота по ссылке, в которой может быть реферальный код. Mini App предлагает выбрать тариф или пробный период, установить клиент, затем импортировать ссылку на подписку или отсканировать QR.
Сервис получает платформу из Telegram (Android, iOS, Windows или macOS). Показывает подходящую инструкцию и ссылку на рекомендованное клиентское приложение. Новому пользователю доступен бесплатный пробный период: 3 дня, один раз на человека. Если пробный период недоступен, приложение объясняет причину и предлагает тарифы.
Сообщение об успехе появляется после проверки подключения. Тем, кто начал настройку и остановился, сервис напоминает о следующем шаге.
Экраны
- Мастер онбординга
- Инструкции по установке (по платформам)
- Карточка пробного периода
Тарифы, пробные периоды и подписки
Тарифы бывают месячные, квартальные и годовые, с уровнями Standard и Pro. У тарифа свой лимит устройств, а Pro поднимает его до 10 устройств. Дополнения, например выделенный IP, добавляются поверх тарифа.
Запись о подписке и есть право на доступ: какой тариф, когда начался, когда истекает, продлевается ли и сколько попыток оплаты уже было. Тариф можно перенести на новую ценовую сетку, сохранив оплаченный период на прежних условиях, так что действующий подписчик до конца периода получает то, за что заплатил.
Есть семейный тариф, места для бизнеса с отдельным кабинетом, подарочные подписки, промокоды и уровни лояльности. Для них сделаны отдельные интерфейсы с общим биллинговым ядром.
Пробная и платная подписки проходят один жизненный цикл. После окончания подписки сеть и устройства сохраняются, отключается только транспорт. При продлении их не нужно создавать заново.
Экраны
- Тарифы
- Карточка подписки
- Использование
Платежи, баланс и продления
Больше всего времени заняла надёжность платежей. Сервис принимает карты, мгновенные банковские платежи, внутреннюю валюту Telegram и криптовалюту. Есть оплата на веб-странице вне Telegram. Все способы создания платежа защищены устойчивой идемпотентностью запросов. Повтор с тем же ключом возвращает прежний результат без второго списания. Если запрос ещё выполняется, система сообщает об этом. Повторное использование ключа с другими данными отклоняется. Воркер с истёкшим правом обработки не может записать второе списание.
Платёжные провайдеры подключены к общему биллингу:
- один баланс на пользователя с журналом только на добавление: пополнение, списание за подписку, возврат, промокредит, реферальный кредит, корректировка, списание при выводе и исправление. Прежние денежные записи не редактируются;
- счета и списания с суммой к оплате и историей каждой попытки. Способ оплаты можно сохранить для следующих платежей;
- режимы продления: ручной, с приоритетом баланса, с приоритетом баланса и автопополнением, прямой автоплатёж. Отдельный сервис управляет повторными попытками и льготным периодом;
- самостоятельные возвраты с проверкой допустимости. В журнал добавляется обратная проводка, реферальное вознаграждение по возвращённому платежу отменяется;
- правила для ожидающих платежей: если платёж завис, интерфейс предлагает пользователю выбор действий.
Бэкенд проверяет платёж до сообщения об успехе. После оплаты пользователь получает чек, ссылку подключения, QR-код и настройки для своей платформы.
Экраны
- Окно оплаты
- Выбор при ожидающем платеже
- Баланс и история
- Платёж прошёл / Доступ
Управление аккаунтом и устройствами
Основной способ входа в Mini App использует Telegram. Также доступны Telegram OIDC, Google и другие OAuth-провайдеры, одноразовая ссылка (magic link) и привязка email. Если человек пришёл сначала через веб-оплату, затем через Telegram, его аккаунты автоматически связываются и объединяются. Подписка не разделяется между двумя записями.
У каждой подписки есть набор слотов устройств. Устройство получает свои учётные данные подключения и привязку транспорта. При потере одного устройства остальные не нужно настраивать заново. Пользователь может добавить устройство через мастер, переименовать, удалить его или увеличить лимит. Универсальный (общий) доступ также поддерживается и не помечен как устаревший.
В разделе «Доступ» пользователь один раз получает ссылку на подписку и QR. При необходимости сервис перевыпускает или меняет токен. Рядом с инструкциями находятся проверка подключения и шаги устранения неполадок. Пользователь может проверить устройство до обращения в поддержку.
Маршрутизация и регионы тоже здесь: выбор страны выхода, маршрутизация по сервисам, фильтры контента, вариант маршрутизации без рекламы и выделенный IP, а также просмотр последней активности каждого устройства.
Экраны
- Сеть (устройства)
- Мастер добавления устройства
- Переименование / удаление устройства
- Увеличение числа устройств
- Доступ / центр подключения
- Проверка подключения
- Устранение неполадок
- Страна выхода
- Поделиться доступом
Реферальные, партнёрские, реселлерские и промо-механики
Каждый пользователь получает 8-символьный реферальный код и ссылку. После первого платежа приглашённого его статус меняется с «ожидает» на «активен». Пригласившему начисляется доля каждого платежа: по умолчанию 20%, с индивидуальными ставками до 50% для VIP-партнёров. Новый приглашённый может получить небольшой бонус только на покупки, без возможности вывода. Вывод доступного баланса проходит через заявку, которую проверяет и исполняет оператор.
Отдельная партнёрская программа (affiliate) учитывает платных партнёров с двумя уровнями комиссии и собственными запросами на выплату.
Реселлеры видят своих клиентов в отдельной панели, получают индивидуальную комиссию и используют тот же процесс вывода с проверкой оператора.
Промокоды применяются на сервере. Код может быть процентом или фиксированной суммой, может действовать на один тариф и имеет лимиты использования и срока действия; для кампаний запуска есть автоприменение.
Подарки позволяют купить подписку для другого человека: получатель получает 12-символьный код со 180-дневным окном активации. Семейные тарифы и бизнес-места строятся на том же ядре, с B2B-кабинетом для управления местами. Уровни лояльности поощряют давних подписчиков.
Экраны
- Рефералы
- Панель реселлера
- Детали клиента реселлера
- Подарок
- Семья
- Бизнес-панель
- Выводы в админке
Поддержка
Пользователь может обратиться к человеку или ИИ-агенту. Для агента заданы строгие ограничения.
Для ИИ-агента поддержки я написал цикл работы с OpenAI-совместимой моделью. Через инструменты он получает текущие данные аккаунта: подписку, устройства, серверные узлы, ссылку на подписку и тарифы. Для инструкций использует базу знаний. Его правила:
- факты об аккаунте берутся только из инструментов, никогда из памяти модели;
- инструкции по настройке берутся только из базы знаний;
- цены и состав тарифов запрашиваются при ответе;
- текст пользователя считается данными, а не инструкциями, поэтому сообщение «игнорируй свои правила» их не меняет;
- разрушительные действия двухфазные: агент показывает предварительный результат изменения, ждёт чёткого «да», потом применяет;
- когда затронуты деньги, безопасность аккаунта или рассерженный пользователь, он передаёт дело человеку, а не гадает;
- проверка ответов запрещает безусловные обещания. Ответы проверяют оценщик диалогов и стенд оценки (eval harness);
- персональные данные удаляются, число циклов вызова инструментов ограничено. Агент выпущен с выключенным флагом функции и не влияет на бота до включения.
Со стороны людей есть тикеты поддержки, передача оператору, баг-репорты, запросы функций, обратная связь и причины отмены.
Поддержка может предупредить о сбое первой. Проверки обнаруживают локации, которые доступны, но перестали пропускать трафик. Бот может уведомить затронутых подписчиков без обещаний срока исправления и без неподтверждённых заявлений об автоматическом переносе. Состояние серверов показано на публичной странице статуса.
Экраны
- Помощь / чат с ассистентом
- Тикет в поддержку
- Страница статуса
- сообщение бота об инциденте
Админка и инструменты оператора
В панели управления оператор находит пользователя по Telegram id, username, id подключения или коду активации. В одном обзоре видны пользователь, подписка, учётные данные подключения, связанные контексты и состояние. Там же доступны разрешённые оператору действия.
Также есть бот оператора, разделы админки для подписок, пользователей, промокодов, реселлеров, поддержки и отмен. Отдельный сервис сверяет и восстанавливает зависшие аккаунты, внутренний канал получает оповещения. Выводы и возвраты исполняет оператор. Дедупликация защищает от повторной выплаты по одному запросу. Для чувствительных действий нужно указать причину. Токены удаляются из вывода на экран и в журнал.
Экраны
- Админка
- Админка: подписки
- Админка: выводы
- Рабочее место оператора
Автоматизация, жизненный цикл и рост
Фоновый воркер сверяет с базой парк серверов, фильтры контента, маршрутизацию без рекламы и реплики подписок. По расписанию запускает ежедневный биллинг, задачи подписок, обработку ожидающих платежей, сбор данных о присутствии и проверку расхождений в статусах ключей.
Рассылки учитывают этап работы пользователя с сервисом. Цепочки и массовые кампании, подсказки при настройке, напоминания о незавершённом подключении, пробном и платном периодах и возврат неактивных пользователей используют общий маршрут отправки с сегментацией и лимитом частоты. Транзакционные сообщения, например личное уведомление о сбое, этот лимит обходят.
Аналитика роста тоже встроена: A/B-тесты, удержание по когортам и отчёты по воронкам для оплаты, настройки и конверсии в платёж, плюс экран юнит-экономики.
Экраны
- Админ-рассылка
- Рост / отчёты
- Тарифы (кампания)
Мониторинг и надёжность
Мониторинг построен на Prometheus, Grafana, Loki/Promtail и Alertmanager, оповещения приходят в Telegram. Кроме метрик CPU, базы данных и контейнеров я добавил проверки срока TLS-сертификатов и доступных локаций, которые не пропускают трафик. Есть оповещения о состоянии узлов и метрики резервных копий вне сервера.
Резервные копии сохраняются вне сервера. По расписанию проверяется их восстановление. Выпуски выполняются через продакшен-раннер с фиксированным SHA, с чек-листом, флагами запуска и регламентами (runbook) отката и действий при сбое. Если состояние сессии или реплики расходится с ожидаемым, механизмы сверки запускают восстановление.
Экраны
- Страница статуса
- Оповещения в админке
Стек
На чём это работает
- Python 3.11 с FastAPI, бот на aiogram и фоновый воркер
- Tortoise ORM поверх PostgreSQL и Redis
- Telegram Mini App на React и TypeScript, собранный через Vite, который работает и внутри Telegram, и как веб-кабинет, плюс отдельный публичный сайт и PWA для пушей
- Сетевой слой: парк серверов, которым управляют через панельные и транспортные инструменты, со вторым транспортом выхода и маршрутизацией по клиентам
- Мониторинг: Prometheus/Grafana/Loki/Alertmanager
- деплои: Docker Compose за Cloudflare
- ИИ-функции используют OpenAI-совместимый клиент
Заметка Данииладо того, как вы решите
Честные ограничения
У сервиса остаются ограничения:
- ИИ-агент поддержки по умолчанию выключен и включается флагом функции;
- уведомления о самовосстановлении тоже выключены флагом, сигнал инцидента пока не подключён;
- автоматическое продление зависит от поддержки рекуррентных списаний провайдером. Без неё используется разовый платёж без скрытых повторных попыток;
- главная единая точка отказа: ссылка на подписку; работа над резервированием частично сделана и пока ждёт решения владельца;
- бэкенд намеренно работает в единственном экземпляре, поэтому бот и воркер не масштабируются горизонтально;
- часть рассылок по этапам работы с сервисом выключена до установки флага.
Эти ограничения действуют сейчас. Описанные выше функции работают в продакшене с учётом указанных флагов.
Даниил
Цена
Могу сделать это для вас
Я могу разработать Telegram-бота и Mini App с тарифами, пробным периодом, платежами, продлениями, устройствами, рефералами и поддержкой. В проект входят бот, Mini App, ядро платежей и подписок, админка, инструменты эксплуатации и мониторинг.
Оценка
Цены по каталогу v1 на сайте практики
- Обсудить задачу Бесплатно Коротко разберём задачу, ограничения и подходит ли вам такой проект.
- Technical Working Session 10 000 ₽ До 60 минут на один заранее выбранный вопрос, с коротким письменным резюме.
- Custom Engineering Project от 100 000 ₽ Telegram-бот, Mini App, платёжная интеграция, подписочный биллинг или автоматизация парка серверов. Цена зависит от результата и согласованного объёма.
- Technical Partnership 60 000 ₽ в месяц Восемь инженерных часов в месяц в одной согласованной области для текущей работы.
Опишите задачу, и я предложу следующий шаг.
Здравствуйте, я Даниил.
Я сам разбираюсь в задаче, выполняю работу и передаю результат. Все вопросы вы обсуждаете напрямую со мной. Общаюсь на русском и английском. На испанском могу переписываться с помощью переводчика.
Есть похожая задача?
Опишите задачуОтвечу в течение одного рабочего дня. Первый ответ бесплатный. Или напишите напрямую: next@taskfordaniel.com