Telegram Mini App вместо мобильного приложения: наш опыт
Я мобильный разработчик, пишу на Flutter, и при этом не раз отговаривал клиентов от мобильного приложения. Не из лени. Просто для части задач Telegram Mini App делает то же самое, а пользователю не нужно ничего устанавливать.
Samandar MaxamadjonovМобильный разработчик
Представьте: четверо парней снимают квартиру в Чиланзаре. Кто-то купил продукты, кто-то заплатил за свет, кто-то третью неделю не выносит мусор. Чтобы это честно делить, мы делали Xonadosh. И первым вопросом было: приложение в сторах или что-то внутри Telegram?
Если сделать приложение, один человек его скачает, второй «потом посмотрит», а двое так и не установят. Сервис, где нужны все соседи, умирает на этом шаге. А общий чат в Telegram у них уже есть. Так что мы сделали Mini App и бота рядом с ним.
Что такое Mini App, если без маркетинга
Это обычное веб-приложение, которое открывается внутри Telegram по кнопке в боте или по ссылке. Telegram передаёт ему данные пользователя, тему оформления, язык. Для человека это выглядит как экран внутри мессенджера, а не как сайт.
Главное отличие от сайта: человек уже авторизован. Не нужно ни SMS, ни пароля, ни «Войти через Google». Открыл и работаешь.
Вот как примерно выглядит связка бота и Mini App в Xonadosh. Бот напоминает, а сложные экраны (расчёты, график дежурств) открываются уже в приложении.
Имена и суммы условные, но сценарий именно такой: бот отвечает за напоминания, а всё, что требует экрана, живёт в Mini App.
Три проекта, три причины
Xonadosh. React 18 и Vite на фронте, Django 6 и DRF на бэкенде, бот на aiogram 3. Для интерфейса взяли библиотеку компонентов @telegram-apps/telegram-ui, чтобы экраны выглядели как родной Telegram на iOS и Android. Причина выбора Mini App: продукт работает только если им пользуются все соседи.
İstanbul EKU. Сеть клиник ЭКО в Ташкенте, Самарканде и Ургенче. Пациентское приложение сделано как Mini App на Next.js 15 с ботом @istanbul_eku_bot: услуги, запись, полезные материалы на русском и узбекском. Пациентке не нужно искать клинику в сторе, а для такой деликатной темы это важно: приложение не висит на главном экране телефона, его открывают из Telegram.
UstozTop. Маркетплейс репетиторов на Nuxt 3 и Django. UstozTop работает и как сайт, и как Mini App. Один и тот же код: из поиска Google человек попадает на сайт, а из Telegram-канала на тот же каталог внутри мессенджера.

Где Mini App выигрывает у приложения
| Telegram Mini App | Мобильное приложение | |
|---|---|---|
| Установка | Не нужна, одна кнопка в боте | Стор, 50–150 МБ, разрешения |
| Авторизация | Telegram передаёт пользователя сразу | Регистрация, SMS или Apple/Google вход |
| Модерация | Нет, обновили сервер и всё | App Store и Google Play, от дня до недели |
| Распространение | Ссылка в чате, канале, группе | Реклама установок, ASO |
| Push-уведомления | Только сообщения от бота | Полноценные push через FCM/APNs |
| Офлайн | Практически нет | Да |
| Доступ к железу | Ограниченный | Полный: камера, Bluetooth, фон |
| Стоимость | Ближе к веб-приложению | От $1 600 |
Для Узбекистана строка «Распространение» весит особенно много. Аудитория уже в Telegram, и ссылка на Mini App в канале с 20 000 подписчиков работает лучше, чем просьба «скачайте приложение».
Ограничения, о которые мы споткнулись
Push-уведомлений нет
Есть только сообщения от бота. В Xonadosh мы сделали цепочки напоминаний через бота, и они работают. Но если пользователь заблокировал бота, достучаться до него нельзя. В мобильном приложении push работает, пока приложение установлено.
Интерфейс живёт в чужом окне
Вертикальный свайп по умолчанию сворачивает Mini App. Если у вас список или карта, пользователь будет случайно закрывать приложение. С Bot API 7.7 появился метод disableVerticalSwipes(), но на старых версиях Telegram его просто нет, и код должен это переживать. Ещё отдельная история с клавиатурой на iOS, которая перекрывает поля ввода, и с кнопкой «Назад», которую надо подключать к своему роутеру вручную.
Telegram бывает разный
Один и тот же Mini App открывается в Telegram на iPhone, на Android, в Telegram Desktop и в веб-версии. Ведут они себя по-разному. На Desktop окно маленькое и не растягивается так, как на телефоне. Цвета темы приходят из настроек пользователя, и если вы где-то захардкодили белый фон, у человека с тёмной темой получится белое пятно посреди чёрного экрана.
Поэтому в Xonadosh вся работа с Telegram вынесена в один небольшой модуль-обёртку. Каждый вызов проверяет, есть ли метод в текущей версии клиента, и если нет, тихо делает что-то разумное. Заодно это позволяет открывать приложение в обычном браузере во время разработки, без Telegram вообще. На UstozTop всё проще: Nuxt-приложение проверяет, открыто ли оно внутри Telegram, и разворачивает окно на весь экран, а в остальном это тот же сайт.
Оплата
Для цифровых товаров внутри Telegram действуют правила самого Telegram, там нужны Telegram Stars. Для услуг и физических товаров можно подключать платёжных провайдеров или вести на оплату Click и Payme. Это решается, но схему оплаты надо продумать до начала разработки, а не за неделю до запуска.
Безопасность авторизации
На бэкенде Xonadosh проверка выглядит примерно так (aiogram даёт готовую функцию):
from aiogram.utils.web_app import check_webapp_signature
if not check_webapp_signature(settings.BOT_TOKEN, init_data):
raise AuthenticationFailed("Invalid initData signature")
if time.time() - int(parsed["auth_date"]) > settings.INIT_DATA_MAX_AGE_SECONDS:
raise AuthenticationFailed("initData expired, reopen the app")
Пять строк, но без них всё остальное не имеет смысла.
Когда всё-таки нужно настоящее приложение
Я не против мобильных приложений, это моя основная работа. Вот когда я сам советую делать приложение:
- нужен офлайн: книга, справочник, приложение для поездок без интернета;
- нужен фон: трекинг, будильники, push, которые точно дойдут;
- активная работа с камерой, Bluetooth, файлами;
- аудитория не только в Узбекистане, и не все сидят в Telegram;
- платный цифровой контент, который должен жить в App Store и Google Play.
Например, Foydali Nuqtalar, платная книга по самопомощи на 15 языках, — это классическое мобильное приложение. Там нужны были вход через Apple и Google, настоящие push-уведомления и платный доступ к главам, а аудитория далеко не только в Telegram. Об этом проекте я подробно писал в статье про путь приложения до сторов.
Как я решаю сейчас
Если продукт строится вокруг группы людей, которые уже общаются в Telegram, или его открывают пару раз в неделю, я начинаю с Mini App. Это быстрее, дешевле и проверяет идею на живых пользователях без модерации сторов.
Если через полгода выяснится, что людям нужен офлайн или надёжные push, бэкенд уже готов, и мобильное приложение станет вторым клиентом к тому же API. В Xonadosh мы так и заложили: Django-бэкенд ничего не знает о том, откуда пришёл запрос.
С İstanbul EKU мы пошли ещё дальше: систему сразу сделали мультиарендной, чтобы на том же коде можно было запустить Mini App для другой сети клиник со своим ботом, логотипом и услугами. Для Mini App это проще, чем для приложения в сторах, где каждый такой клон — отдельная публикация и отдельная модерация.
Обратный путь, от приложения к Mini App, я видел реже. Обычно потому, что после полугода и $5 000+ на приложение никто не хочет признавать, что хватило бы кнопки в боте.





