# Telegram Mini App не открывается: как найти причину
Telegram Mini App может нормально работать в обычном браузере, но не запускаться внутри Telegram, зависать на загрузке или показывать белый экран.
Причина не обязательно находится в самом Telegram.
Проблема может быть в:
- URL Mini App;
- HTTPS;
- настройках бота;
- способе запуска;
- JavaScript;
- загрузке
telegram-web-app.js; - backend/API;
- CORS;
- несовместимой функции Web API;
- конкретном клиенте Telegram;
- iOS или Android;
- обработке параметров запуска;
- ошибке, которая возникает только внутри WebView.
Поэтому первым делом нужно определить: Mini App вообще не запускается или запускается, но уже внутри ломается само веб-приложение.
Сначала определите точный симптом
↑ К оглавлениюПроверьте, что именно видит пользователь.
Например:
нажал кнопку
↓
ничего не произошлоили:
Mini App открылся
↓
вечная загрузкаили:
Mini App открылся
↓
белый экранили:
в браузере работает
↓
в Telegram не открываетсяили:
Android → работает
iPhone → не работаетЭто разные неисправности.
Если окно Mini App даже не появляется, сначала исследуйте кнопку, ссылку и настройки запуска.
Если Telegram WebView уже открылся, но внутри пустая страница, гораздо важнее JavaScript, Network и frontend/backend приложения.
Проверьте сам URL Mini App
↑ К оглавлениюСначала откройте тот же HTTPS URL обычным браузером.
Если он уже там возвращает:
404500ошибку TLS или бесконечный redirect, Telegram это не исправит.
Для WebAppInfo Telegram Bot API требует именно HTTPS URL.
Проверьте:
- HTTP status;
- сертификат;
- срок действия сертификата;
- DNS;
- redirects;
- доступность с внешней сети;
- загрузку HTML;
- загрузку JavaScript и CSS.
Не начинайте менять BotFather, если исходная страница сама недоступна.
Не проверяйте только главную страницу домена
↑ К оглавлениюДопустим, Mini App настроен на:
https://example.com/app/То, что:
https://example.com/открывается нормально, ещё ничего не доказывает.
Проверяйте именно фактический URL Mini App.
Особенно после deploy:
- мог измениться route;
- каталог мог исчезнуть;
- SPA fallback мог перестать работать;
- сервер мог вернуть 404 на вложенный путь.
Определите, каким способом запускается Mini App
↑ К оглавлениюЭто очень важно.
Telegram сейчас поддерживает несколько разных способов запуска Mini Apps, включая:
- Main Mini App из профиля бота;
- keyboard button;
- inline button;
- menu button;
- inline mode;
- direct link;
- attachment menu.
Один и тот же Mini App стоит проверить через тот способ, которым реально пользуется пользователь.
Например:
профиль бота → работает
кнопка в сообщении → не работаетуже говорит, что само приложение, вероятно, доступно, а проблема связана с конкретной точкой запуска или её настройкой.
Если не работает кнопка запуска
↑ К оглавлениюПроверьте фактический объект кнопки, который отправляет бот.
Для Web App Telegram использует поле:
web_appс WebAppInfo.
URL внутри него должен быть корректным HTTPS URL. Для некоторых типов web_app-кнопок Bot API также ограничивает контекст использования — например, keyboard/inline Web App имеет правила для приватного чата с ботом.
Поэтому не ограничивайтесь проверкой:
кнопка визуально есть.
Проверьте, что бот реально отправил правильный тип кнопки и правильный URL.
Проверьте Main Mini App в BotFather
↑ К оглавлениюЕсли приложение должно открываться кнопкой из профиля бота, проверьте конфигурацию Main Mini App в @BotFather.
Telegram описывает этот сценарий отдельно: после настройки Main Mini App на странице профиля бота появляется кнопка запуска приложения.
Если после переноса приложения URL изменился, а BotFather продолжает хранить старый адрес, пользователь будет запускать старую точку входа.
Проверьте:
BotFather URL
=
реальный production URLПроверьте direct link
↑ К оглавлениюДля Main Mini App Telegram поддерживает ссылки вида:
https://t.me/botusername?startappи:
https://t.me/botusername?startapp=commandДля именованных Mini Apps используются также соответствующие t.me-ссылки приложения. Параметр startapp передаётся внутрь Mini App как start_param и tgWebAppStartParam.
Если Mini App открывается без параметра:
?startappно ломается с:
?startapp=product-42проверяйте уже обработку параметра запуска.
Не нужно в таком случае менять HTTPS или Telegram WebApp SDK.
Проверьте telegram-web-app.js
↑ К оглавлениюДля подключения Mini App к Telegram клиенту официальная документация предлагает загрузить:
<script src="https://telegram.org/js/telegram-web-app.js?63"></script>в <head> до других скриптов, которым нужен Telegram WebApp API.
После загрузки становится доступен:
window.Telegram.WebAppЕсли приложение сразу выполняет:
Telegram.WebApp.ready()или обращается к:
Telegram.WebApp.initDataдо загрузки Telegram script, возможна JavaScript-ошибка ещё до нормального рендера интерфейса.
Проверьте реальный порядок загрузки.
Не оставляйте белый экран без диагностики
↑ К оглавлениюБелый экран обычно означает не:
Telegram ничего не показывает,
а:
HTML загрузился, но приложение не смогло отрисоваться.
Первым делом нужны:
- JavaScript console;
- Network;
- failed requests;
- stack trace;
- response API.
Ищите:
Uncaught ...ReferenceErrorTypeErrorFailed to fetchCORS401403500Одна конкретная ошибка полезнее десяти изменений конфигурации.
Проверьте начальную загрузку приложения
↑ К оглавлениюОчень распространённая архитектура:
HTML
↓
JavaScript
↓
API request
↓
данные пользователя
↓
renderЕсли API-запрос упал, а frontend не показывает нормальное состояние ошибки, пользователь увидит просто вечный loader или пустой экран.
Поэтому проверьте отдельно:
- загрузился ли HTML;
- запустился ли JS;
- появился ли
Telegram.WebApp; - отправился ли запрос backend;
- какой response пришёл;
- дошёл ли код до render.
Не называйте такую проблему «Telegram не открывает Mini App», пока не локализован фактический этап.
Вызывайте ready() в правильный момент
↑ К оглавлениюTelegram предоставляет:
Telegram.WebApp.ready()Этот метод сообщает клиенту Telegram, что основные элементы интерфейса готовы и loading placeholder можно убрать.
Telegram рекомендует вызывать его достаточно рано после загрузки необходимых элементов. Если ready() не вызвать, placeholder скрывается только после полной загрузки страницы.
Но ready() не чинит сломанное приложение.
Если JavaScript падает раньше, нужно исправлять ошибку, а не просто добавлять ready() в случайное место.
Проверьте версию Telegram WebApp API
↑ К оглавлениюНовые возможности Mini Apps появляются постепенно.
Telegram предоставляет:
Telegram.WebApp.versionи:
Telegram.WebApp.isVersionAtLeast(...)чтобы приложение могло определить доступный уровень API.
Если код без проверки вызывает функцию, которой нет в старом клиенте Telegram, результат может отличаться на разных устройствах.
Например, правильнее строить логику как:
const tg = window.Telegram?.WebApp;
if (tg?.isVersionAtLeast('8.0')) {
// функция для поддерживаемого клиента
}а не предполагать, что любой установленный Telegram поддерживает весь текущий Mini Apps API.
Запишите platform и version
↑ К оглавлениюДля платформенных ошибок полезно логировать:
const tg = window.Telegram?.WebApp;
console.log({
platform: tg?.platform,
version: tg?.version
});Telegram официально предоставляет оба поля.
Так вместо сообщения:
на одном телефоне не работает
вы получите, например:
platform: ios
version: ...и сможете сравнить с рабочим устройством.
Отдельно проверьте iPhone
↑ К оглавлениюВ Wordstat у нашего общего запроса есть конкретный DEEP_CHILD:
telegram ios 18 не открывается mini app — 7.
Его имеет смысл включить в диагностику, но не нужно заранее считать, что в iOS 18 существует универсальный баг Telegram Mini Apps.
Правильная проверка:
тот же пользователь
тот же бот
тот же Mini App URLсравнить на:
- iPhone;
- Android;
- Telegram Desktop.
Если:
Android → работает
Desktop → работает
iPhone → не работаеттогда уже есть подтверждённая platform-specific область проблемы.
Если проблема только на iOS
↑ К оглавлениюНе начинайте с полного переписывания Mini App.
Сначала сравните:
- версию Telegram;
- iOS;
- WebApp
platform; - WebApp
version; - JavaScript errors;
- network requests;
- CSS/layout;
- используемые browser APIs;
- доступность конкретных Telegram API methods.
Особенно важно понять:
Mini App не загружается вообще
или:
Mini App загружается, но интерфейс оказывается невидимым или сломанным.
Это разные вещи.
Не путайте layout-проблему с ошибкой запуска
↑ К оглавлениюНа мобильных устройствах содержимое Mini App находится внутри Telegram WebView.
Telegram предоставляет данные о:
viewportHeight;viewportStableHeight;- safe area;
- content safe area.
Документация отдельно рекомендует учитывать safe areas, особенно в fullscreen-режиме.
Поэтому сценарий:
окно открылось
но кнопка/контент вне видимой областине является настоящей ошибкой запуска.
Проверьте layout.
Особенно:
height: 100vh;фиксированные панели и абсолютное позиционирование.
В Mini App лучше учитывать реальные viewport-параметры Telegram, а не предполагать, что WebView идентичен обычному Safari или Chrome.
Проверьте CSS safe area
↑ К оглавлениюОсобенно на iPhone интерфейс может пересекаться:
- с верхними control elements;
- нижней системной зоной;
- Telegram UI.
Telegram сейчас предоставляет отдельные safe-area данные и CSS variables для Mini Apps.
Если приложение технически открылось, но пользователь видит только фон или не может нажать основную кнопку, проверьте геометрию интерфейса до диагностики backend.
Если работает в Safari, но не в Telegram
↑ К оглавлениюЭто сильный диагностический сигнал.
Обычный браузер и Telegram WebView — не один и тот же контекст.
Сравните:
Safari/Chrome
vs
Telegram WebViewпо:
- URL;
- cookies;
- local storage;
- request headers;
- Web API;
- JavaScript;
- авторизации;
- CORS;
- параметрам Telegram.
Не делайте вывод:
раз Chrome открыл, frontend исправен полностью.
Он подтвердил только работу в Chrome.
Проверьте backend-запросы
↑ К оглавлениюMini App может открыть HTML, но затем обращаться к:
https://api.example.com/...Если backend:
- недоступен;
- возвращает 401;
- отвергает Origin;
- не принимает Telegram init data;
- выдаёт 500,
frontend может остаться пустым.
Проверьте Network и server logs одновременно.
Правильная цепочка:
клик
↓
WebView
↓
HTML
↓
JS
↓
API
↓
response
↓
renderНайдите первый сломанный шаг.
Не доверяйте initDataUnsafe на сервере
↑ К оглавлениюЕсли Mini App использует данные пользователя для запуска, Telegram отдельно предупреждает: данные из:
Telegram.WebApp.initDataUnsafeнельзя считать доверенными.
Для backend нужно передавать исходное:
Telegram.WebApp.initDataи валидировать его на сервере.
Если сервер отвергает init data, Mini App может визуально выглядеть как «не открывается», хотя на самом деле frontend уже загружен, а backend вернул ошибку авторизации.
Проверяйте HTTP response.
Не подменяйте initData обычными URL-параметрами
↑ К оглавлениюЕсли приложение ожидает Telegram user из initData, а frontend запущен просто в браузере, Telegram-контекста там может не быть.
Поэтому тест:
открыл URL напрямую в Chromeи:
открыл Mini App через Telegramне всегда должны давать идентичный auth flow.
Хорошее приложение должно явно обрабатывать оба сценария или хотя бы показывать понятную ошибку, а не белый экран.
Проверьте способ запуска перед использованием sendData
↑ К оглавлениюTelegram.WebApp:
sendData(...)доступен не для любого сценария Mini App.
Официальная документация указывает, что этот метод предназначен для Mini Apps, запущенных через keyboard button; он отправляет web_app_data обратно боту и закрывает Mini App.
Поэтому если приложение:
- открывается нормально;
- но при нажатии финальной кнопки «ничего не происходит»,
проверьте не только код sendData, но и как Mini App был запущен.
Это уже не ошибка открытия, но часто выглядит для пользователя как «Mini App не работает».
Проверьте startapp
↑ К оглавлениюЕсли логика приложения зависит от:
startappпроверьте фактическое значение:
Telegram.WebApp.initDataUnsafe?.start_paramи:
tgWebAppStartParamTelegram передаёт start parameter именно для соответствующих способов запуска.
Если код ожидает:
product_123а получает:
undefinedи затем падает — исправлять нужно обработку параметра, а не Telegram.
Не падайте на отсутствующем параметре
↑ К оглавлениюПлохой вариант:
const id = startParam.split('_')[1];если startParam иногда отсутствует.
Лучше сначала проверить:
if (!startParam) {
// показать нормальное состояние или fallback
}Telegram Mini App должен переживать допустимые варианты запуска без белого экрана.
Проверьте редиректы
↑ К оглавлениюОсобенно подозрительна цепочка:
Mini App URL
↓
302
↓
login
↓
302
↓
Mini App URLили:
https://app.example.com
↓
http://app.example.com
↓
https://app.example.comПроверьте полную redirect chain.
Обычный браузер может скрыть проблему благодаря старым cookies или кешу, а WebView покажет её сразу.
Проверьте авторизацию отдельно
↑ К оглавлениюНе связывайте в один шаг:
Mini App открылся?и:
пользователь авторизован?Сначала должен загрузиться интерфейс.
Потом отдельно:
- получены ли Telegram data;
- прошла ли серверная validation;
- создана ли session;
- отдал ли backend user profile.
Если auth не прошёл, пользователь должен увидеть ошибку авторизации, а не пустой экран.
Проверьте CSP
↑ К оглавлениюЕсли сайт использует Content Security Policy, убедитесь, что она не блокирует необходимые ресурсы приложения.
Например:
- Telegram script;
- собственный JS;
- API;
- изображения;
- WebSocket.
В Console при такой проблеме обычно будет явное CSP violation.
Не отключайте CSP целиком только ради теста.
Лучше определить конкретный заблокированный resource.
Проверьте CORS
↑ К оглавлениюCORS имеет смысл проверять тогда, когда frontend Mini App действительно обращается к другому origin.
Например:
app.example.com
→
api.example.netЕсли Network показывает blocked request, проверяйте server response headers.
Не добавляйте:
Access-Control-Allow-Origin: *наугад, особенно если запросы используют credentials или чувствительные данные.
Если Mini App перестал открываться после deploy
↑ К оглавлениюОчень полезный сценарий:
старая версия → работала
deploy
новая версия → не работаетСравните:
- HTML;
- JS bundle;
- environment variables;
- API URL;
- routes;
- CSP;
- build assets;
- service worker;
- server response.
Не начинайте обновлять Telegram на всех устройствах, пока есть столь сильная связь с deploy.
Если перестал работать после обновления Telegram
↑ К оглавлениюТогда сравните несколько клиентов.
Зафиксируйте:
Telegram version
platform
WebApp versionи проверьте тот же Mini App на другом клиенте.
Telegram API позволяет определить доступную версию и проверять поддержку конкретных возможностей через isVersionAtLeast().
Если код зависит от новой или платформенной функции, предусмотрите fallback.
Не определяйте всё только по User-Agent
↑ К оглавлениюTelegram уже предоставляет:
Telegram.WebApp.platformпоэтому для Telegram-specific ветвления лучше сначала использовать официальный WebApp context.
Для Android Telegram также добавляет дополнительные сведения о клиенте и устройстве в User-Agent, но это скорее дополнительная диагностика, а не замена feature detection.
Проверяйте поддержку функции, а не название телефона
↑ К оглавлениюЛучший подход:
поддерживается функция?хуже:
это iPhone → значит делаем другой кодЕсли Telegram даёт возможность проверить версию API или конкретный объект, используйте это.
Так приложение меньше ломается после обновления устройств и клиентов.
Если проблема возникает только у одного пользователя
↑ К оглавлениюСравните:
- тот же URL у другого пользователя;
- другой Telegram account;
- другую сеть;
- другую платформу;
- версию Telegram.
Если 99 пользователей открывают Mini App, а один нет, глобальная недоступность сервера становится менее вероятной.
Но не списывайте проблему сразу на пользователя.
Нужно найти воспроизводимое отличие.
Если не работает у всех
↑ К оглавлениюТогда начинать лучше с общей инфраструктуры:
- URL;
- HTTPS;
- DNS;
- frontend response;
- JS;
- backend;
- настройки BotFather / кнопки.
Не тратьте время сначала на уникальные особенности iOS.
Добавьте диагностическое логирование
↑ К оглавлениюДля Mini App полезно сохранять хотя бы:
timestamp
platform
Telegram WebApp version
launch source
start parameter
frontend build version
API response statusбез записи секретных данных.
Тогда сообщение пользователя:
не открывается
можно сопоставить с конкретной попыткой запуска.
Не логируйте initData и токены как обычный debug
↑ К оглавлениюinitData используется для подтверждения данных пользователя и не должен бесконтрольно попадать в публичные логи.
То же относится к:
- bot token;
- cookies;
- Authorization headers;
- session secrets.
Для диагностики достаточно безопасных признаков:
initData present: yes/no
validation: pass/failбез публикации исходных секретов.
Короткий порядок диагностики
↑ К оглавлениюЕсли Telegram Mini App не открывается:
- зафиксировать точный способ запуска;
- открыть фактический Mini App URL;
- проверить HTTPS и redirects;
- проверить кнопку или BotFather configuration;
- убедиться, что Telegram WebApp script загрузился;
- проверить JavaScript Console;
- проверить Network;
- определить, появился ли
window.Telegram.WebApp; - записать
platformиversion; - проверить backend/API;
- проверить initData validation;
- сравнить iOS, Android и Desktop;
- если проблема только на одной платформе — локализовать platform-specific код;
- проверить поддержку используемых Telegram APIs;
- исправить конкретный сломанный этап;
- повторить запуск тем же способом.
Чего не стоит делать
↑ К оглавлениюЕсли Telegram Mini App не открывается, не стоит сразу:
- создавать нового бота;
- менять bot token;
- переписывать весь frontend;
- отключать HTTPS;
- отключать CORS и CSP целиком;
- считать любой белый экран багом Telegram;
- считать iOS 18 причиной только по одному сообщению пользователя;
- менять BotFather и frontend одновременно;
- обновлять все зависимости без диагностики;
- доверять
initDataUnsafeна backend; - вызывать новые API без проверки поддержки;
- тестировать только обычным браузером.
Сначала нужно определить уровень:
точка запуска
↓
Telegram WebView
↓
HTTPS / HTML
↓
JavaScript
↓
Telegram WebApp API
↓
backend
↓
renderи найти первый шаг, где поведение отличается от рабочего сценария.
Частые вопросы
Почему Telegram Mini App работает в браузере, но не открывается в Telegram?
Потому что внутри Telegram приложение работает в WebView и получает дополнительный Telegram-контекст. Нужно сравнить JavaScript errors, Network, Telegram.WebApp, backend-авторизацию и фактический способ запуска.
Почему Telegram Mini App показывает белый экран?
Чаще всего сначала стоит искать frontend JavaScript error или неудачный API-запрос. Проверьте Console и Network и определите, загрузился ли HTML и дошёл ли код до render.
Что делать, если Telegram Mini App не открывается на iPhone?
Проверьте тот же Mini App на Android и Desktop, зафиксируйте Telegram.WebApp.platform и version, затем сравните Console/Network и используемые API. Сам факт iOS ещё не доказывает универсальную ошибку Telegram.
Почему Mini App открывается по одной кнопке, но не по другой?
Telegram поддерживает разные способы запуска Mini Apps, и у них различаются контекст и возможности. Сначала сравните тип кнопки, URL и способ запуска.
Нужен ли HTTPS для Telegram Mini App?
Да. В Bot API объект WebAppInfo принимает HTTPS URL веб-приложения.
Нужна помощь с Telegram Mini App?
Поможем найти причину, по которой Telegram Mini App не открывается, и восстановить рабочий запуск приложения.