40 000
Информационные технологии и интернет
Апрель 2025
Бизнес-задача звучала просто, но технически была крайне нетривиальной: дать пользователю возможность один раз настроить бюджет и ценовой коридор, а дальше система должна сама, без участия пользователя, выкупать каждый новый подарок в первые секунды его появления.
Основные требования:
- Реакция на появление нового подарка в пределах секунд, а не минут, поскольку дефицитные позиции исчезают почти мгновенно.
- Одновременное исполнение покупок для всех активных пользователей при одном релизе, с учетом персонального ценового коридора и текущего баланса каждого.
- Прием платежей в Telegram Stars напрямую внутри бота, с удержанием сервисной комиссии и моментальным зачислением.
- Реферальная программа для органического роста аудитории.
- Полная локализация на русский и английский языки.
- Отказоустойчивость: сбой обработки одного пользователя не должен останавливать обработку остальных.
Спроектирован сервис как единое ASP.NET Core приложение, в котором сосуществуют четыре независимых контура: Telegram-бот, фоновый планировщик автопокупки, платежный модуль и административная панель. Такой моноблок при правильном разделении ответственности дал минимальные задержки между обнаружением подарка и исполнением сделки, поскольку вся логика работает в одном процессе без сетевых накладных расходов между сервисами.
Ядром продукта стал контур автопокупки на базе планировщика Quartz с двумя независимыми циклами: быстрый цикл с интервалом в 5 секунд отвечает за обнаружение новых подарков и исполнение покупок, медленный минутный цикл агрегирует метрики и обслуживает кэш состояния. Каждое задание помечено атрибутом запрета параллельного запуска, что исключает гонки и двойные списания при затянувшемся цикле.
Пользователь управляет всем через диалог с ботом: задает нижнюю и верхнюю границу цены подарка, включает или выключает автопокупку одним переключателем, пополняет баланс и приглашает друзей. Вся настройка происходит через inline-клавиатуры с пошаговым вводом, состояние диалога хранится по идентификаторам ожидаемых полей, что позволяет вести несколько сценариев ввода без потери контекста.
Платежный модуль принимает Telegram Stars через нативные инвойсы Telegram, удерживает сервисную комиссию 5 процентов и моментально зачисляет средства на внутренний баланс пользователя с мгновенным уведомлением. Реферальная программа реализована двухуровневой, с начислением процента от пополнений приглашенных.
Запущен полностью рабочий коммерческий сервис, который в автоматическом режиме скупает новые Telegram-подарки в первые секунды после релиза без участия пользователя.
Достигнута реакция на появление подарка в пределах 5-секундного цикла с параллельным исполнением покупок сразу для всей активной базы при одном релизе.
Реализован замкнутый денежный контур: пополнение в Telegram Stars, удержание комиссии, моментальное зачисление, двухуровневая реферальная программа и таблица лидеров для удержания аудитории.
Гибридная схема работы с данными обеспечила высокую пропускную способность горячего пути при сохранении удобства миграций и эволюции схемы.
Автоматические миграции при старте сделали выкатку новых версий бесшовной, без ручных операций с базой.
Архитектура с изоляцией контуров и отказоустойчивой обработкой ошибок обеспечила стабильную работу планировщика под нагрузкой и устойчивость к точечным сбоям.
Полная двуязычная локализация открыла продукт для русско- и англоязычной аудитории одновременно.