Кнопка назад в Telegram Mini App должна возвращать к понятному предыдущему состоянию. Но у пользователя есть несколько разных действий: перейти на прошлый экран, выйти из редактирования и закрыть приложение. Если все они обрабатываются одинаково, форма теряет данные, а человек не понимает, сохранена ли заявка.
Навигацию проектируют вместе с состоянием, а не добавляют после готовой вёрстки. Telegram предоставляет собственную кнопку и события, но маршрут внутри приложения остаётся вашей ответственностью. Ниже разобрана многошаговая форма, в которой нужно сохранить ответы, поддержать старые переходы и не отправить данные случайно при возврате.
Что считается предыдущим экраном
Определите логические маршруты: список услуг, карточка, заполнение и подтверждение. Кнопка назад должна соответствовать ожиданию в каждом месте. Простой возврат к последнему отрисованному компоненту не всегда подходит: временное окно ошибки или загрузки не обязательно является самостоятельным шагом истории.
Для начального экрана решите, нужна ли кнопка и что она делает. Не оставляйте видимое действие, которое ничего не меняет без объяснения. При этом закрытие Mini App не должно незаметно подменять внутренний возврат, если пользователь ожидает сохранить выбранную услугу и вернуться к каталогу.
Если приложение использует браузерную историю, согласуйте её с нативной кнопкой Telegram и внутренними переходами. Два независимых механизма могут расходиться после обновления страницы или открытия прямой ссылки. Нужен один понятный источник навигационного состояния либо явно описанная синхронизация.
Подключение кнопки Telegram
Объект BackButton позволяет управлять видимостью и обработчиком поддерживаемого события. Он не определяет за приложение, какой маршрут выбрать. Перед использованием проверьте текущий API и доступность в целевых клиентах. Не вызывайте несуществующую функцию без резервного пути.
При смене экранов корректно обновляйте обработчики. Если старые подписки остаются, одно нажатие может выполнить несколько переходов. Такая ошибка часто появляется после повторного открытия формы, хотя первый чистый запуск работает нормально. Очистка связана с жизненным циклом компонентов и должна проверяться отдельно.
Видимость кнопки отражает актуальный маршрут. Например, после завершённой заявки возврат не должен снова открывать неподтверждённый старый экран как будто операция ещё не выполнена. Для повторного обращения предусмотрено отдельное действие, которое создаёт новый экземпляр по правилам приложения.
Несохранённые изменения
Определите, какие данные сохраняются автоматически, а какие только после подтверждения. Если возврат отбрасывает несохранённый ввод, сообщите это понятным способом для действительно значимого изменения. Не показывайте формальное предупреждение после каждого простого перехода, если данные уже сохранены и ничего не теряется.
Подтверждение закрытия, поддерживаемое Telegram, не является автоматическим сохранением формы. Оно может помочь избежать случайного выхода, но приложение всё равно должно хранить состояние и обрабатывать результат. Нельзя обещать восстановление текста только потому, что включён системный вопрос перед закрытием.
При отмене редактирования различайте сохранённую запись и новый черновик. Человек может отказаться от изменения времени, сохранив прежнюю встречу. Если общая кнопка «назад» отменяет саму услугу, это серьёзная неоднозначность, которую нужно устранить названием и логикой перехода.
Условный пример: исправление даты перед отправкой
Предположим, пользователь выбрал услугу, дату и заполнил описание. На сводке он замечает неверное время. Кнопка изменения открывает соответствующий шаг, сохраняя остальные сведения. После выбора он возвращается к актуальной сводке, а не проходит всю форму заново.
Если человек нажимает назад без сохранения нового времени, приложение показывает прежнее подтверждённое значение либо понятный черновик согласно выбранному процессу. Оно не отправляет заявку автоматически. После окончательной отправки старые маршруты сверяют состояние и не позволяют повторить действие незаметно для пользователя.
Пример условный. Telegram предоставляет навигационный элемент, а версии формы, сохранение и ограничения повторной отправки реализуются приложением. Один работающий переход не доказывает корректность всей истории, особенно после перезагрузки и возврата из другого чата.
Прямые ссылки и восстановление
Человек может открыть Mini App сразу на внутренней карточке. Тогда предыдущего пользовательского экрана в текущей сессии нет. Определите подходящий возврат: в список, на главное меню или к другому понятному состоянию. Не допускайте попытки уйти в несуществующую историю с пустым экраном.
При перезагрузке восстановите маршрут вместе с данными и проверкой доступа. Сохранённый адрес не подтверждает право видеть объект. Если запись удалена или недоступна, покажите объяснение и рабочий путь, а не бесконечную загрузку с активной кнопкой назад в тот же ошибочный экран.
Старый черновик может иметь другую версию сценария. Навигация должна учитывать поддерживаемое продолжение, а не просто открывать шаг по прежнему порядковому номеру. Изменение последовательности формы без версии создаёт особенно трудно заметные ошибки возврата.
Внешние окна и клавиатура
После выбора файла, разрешения или внешнего перехода проверьте текущий экран и фокус. Возврат не должен очищать уже введённый текст. При открытой клавиатуре пользовательское действие назад может иметь платформенное поведение, поэтому нужно испытать целевые клиенты, а не предполагать одинаковый результат на всех устройствах.
Не пытайтесь полностью запретить естественные способы выхода ради удержания пользователя. Лучше сохранять нужный черновик и показывать понятное продолжение. Если действительно важна защита несохранённых данных, используйте документированные механизмы и честно объясняйте их ограничение.
Также проверьте прокрутку. После возвращения к длинной форме человеку полезно увидеть нужное место, а не случайный конец предыдущего экрана. Положение прокрутки относится к интерфейсному состоянию, но не должно подменять фактический выбранный шаг и сохранённые ответы.
Приёмочный набор
Пройдите каждый маршрут вперёд и назад, затем повторите переход несколько раз. Это помогает обнаружить накопленные обработчики. Добавьте прямую ссылку, перезагрузку, старый черновик и завершённую заявку. Для каждого действия заранее определите ожидаемый экран и судьбу введённых данных.
Проверьте закрытие с несохранённым вводом и без него. Предупреждение должно появляться только согласно выбранному правилу, а отмена выхода — возвращать в рабочее состояние. Затем испытайте ошибку сервера: навигация не должна оставлять человека в ловушке между загрузкой и неактивной кнопкой.
Мини-приложение готово, когда пользователь способен исправить выбор, выйти и продолжить без потери смысла. Кнопка назад — часть процесса управления состоянием. Её качество определяется ожидаемым результатом на каждом шаге, а не только тем, что нажатие вызывает какой-то визуальный переход.
Вложенный диалог и основной маршрут
Если поверх формы открыто собственное окно приложения, решите, какое действие закрывает его, а какое возвращает на предыдущий основной экран. Пользователь обычно ожидает сначала убрать текущий слой. Скачок сразу в каталог с потерей контекста выглядит как случайная отмена заполнения, даже если данные остались на сервере.
Согласуйте приоритет обработки между модальным окном и маршрутизатором. Одно событие не должно одновременно закрыть диалог и выполнить ещё один возврат. Для этого полезен явный уровень навигационного состояния и корректная очистка обработчиков. Случайные проверки множества флагов в разных компонентах быстро расходятся после изменения интерфейса.
На испытании откройте диалог подтверждения на заполненной форме, отмените действие, затем вернитесь к предыдущему шагу и снова откройте окно. Проверьте состояние данных, фокус и число переходов. Добавьте ошибку сервера внутри диалога. Такая последовательность выявляет конфликт уровней, который не проявляется при одном чистом нажатии назад сразу после запуска Mini App.
Источники
Нативная кнопка описана в Telegram Mini Apps: BackButton, средства закрытия — в основном API Mini Apps. Маршруты, сохранение и история приложения реализуются вашей системой отдельно.