Telegram

Telegram Mini Apps: где бот заканчивается и начинается продукт

Mini App нужен, когда внутри Telegram нужен нормальный интерфейс: каталог, кабинет, форма заявки, корзина, статистика, платежи или dashboard.

1. Раздели роли

  1. Бот открывает Mini App и отправляет уведомления.
  2. Frontend показывает UI внутри Telegram.
  3. Backend хранит данные и проверяет права.
  4. Admin panel управляет контентом, заявками и статусами.

2. Подключи кнопку Mini App

KeyboardButton(
  text="Открыть кабинет",
  web_app=WebAppInfo(url="https://example.com/app/")
)

URL должен быть HTTPS. Без HTTPS Telegram WebApp работать нормально не будет.

3. Проверяй initData на backend

Нельзя доверять user_id с frontend. Frontend отправляет initData, backend проверяет подпись через bot token.

  1. Frontend читает window.Telegram.WebApp.initData.
  2. Отправляет его в API.
  3. Backend сверяет hash.
  4. Только после проверки создаёт session/JWT.

4. Авторизация и сессия

После успешной проверки initData backend создаёт короткую сессию. Не храни роль пользователя только на frontend: роли, тарифы, права на разделы и лимиты должны проверяться API.

POST /api/auth/telegram
body: { initData: "..." }
response: { accessToken, user, expiresAt }

5. API для Mini App

Сделай API маленькими и предсказуемыми. Mini App должен быстро открываться даже на телефоне, поэтому первый экран загружает только нужный минимум.

  1. GET /api/me — пользователь и права.
  2. GET /api/dashboard — данные первого экрана.
  3. POST /api/orders — действие пользователя.
  4. GET /api/orders/{id} — статус долгой операции.

6. UX минимум

  • Кнопка назад работает внутри Mini App.
  • Ошибки API показываются пользователю понятно.
  • Формы сохраняют draft, если связь пропала.
  • Loading states есть у всех действий.
  • Theme params Telegram учитываются в UI.

Production checklist

  • HTTPS и корректные CORS правила.
  • initData validation на каждом login.
  • Rate limit на важные endpoints.
  • Логи действий пользователя.
  • Отдельный staging bot для тестов.
Все постыСледующая инструкция