Telegram Mini App для обменника sapsanex.cc пользователь рассчитывает курс, создаёт заявку и следит за её статусом, не выходя из Telegram. Под капотом — собственный FastAPI-шлюз поверх стороннего API Premium Exchanger.
Проблема. До Mini App клиенты приходили из Telegram, переходили на внешний сайт, заполняли форму, потом проверяли статус заявки на третьем экране. На каждом шаге часть пользователей отваливалась, особенно с мобильного. Параллельно — стороннее API обменника на form-data (не JSON), без типизации и без удобной модели заявки.
Решение. Один Docker Compose, четыре сервиса: FastAPI-бэкенд, aiogram-бот, React+TS-фронтенд, PostgreSQL. Mini App работает поверх Telegram WebApp: авторизация через HMAC-SHA256 валидацию initData — без сессий и JWT, без отдельной формы логина. Бэкенд оборачивает Premium Exchanger в типизированный слой (SQLAlchemy async + Pydantic), параллельно ведёт собственный журнал заявок в Postgres. Бот (aiogram 3) — отдельный процесс: шарит конфиг, но не делит соединения с API; при изменении статуса заявки шлёт пользователю уведомление. Polling статуса работает прямо в Mini App, фоновая задача в main.py отменяет заявки, висящие >30 минут. i18n (ru/en) через CSV-файлы.
Результат. Полный цикл обмена — расчёт → создание → отслеживание — проходит внутри Telegram. Пользователю не нужно открывать сайт, заявка автоматически закрывается при таймауте, статус приходит уведомлением от бота. Готово к продакшен-деплою.
https://t.me/sapsan_robot