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