Если клавиатура бота пропадает после WebApp, пользователь возвращается из мини-приложения и не понимает, что делать дальше. Сценарий обрывается, даже если само WebApp отработало правильно.
Это часто ломает заявки, корзины, записи и оплаты: человек выбрал данные в WebApp, но дальше бот не показывает привычные кнопки и не ведет к следующему шагу.
Коротко: нужно проверить, что бот отправляет после закрытия WebApp и как хранит состояние пользователя.Почему это ломается
Клавиатура исчезает из-за отправки сообщения без reply_markup, удаления предыдущей клавиатуры, неправильной обработки web_app_data, потери состояния пользователя, конфликта inline и reply-кнопок или ошибки после Telegram.WebApp.sendData.
Что проверяю в первую очередь
- что отправляет WebApp через sendData
- какой обработчик получает web_app_data
- сохраняется ли состояние пользователя после WebApp
- отправляет ли бот новую клавиатуру после ответа
- не удаляет ли код старое сообщение с клавиатурой
Как я это чиню
Я проверяю сценарий глазами пользователя и по логам: вход в WebApp, действие внутри, закрытие, обработка данных ботом и новое сообщение с кнопками.
- исправляю обработку web_app_data
- возвращаю нужный reply_markup после завершения WebApp
- чиню состояния пользователя в базе или памяти бота
- разделяю inline-кнопки и постоянную клавиатуру
- добавляю понятный следующий шаг после закрытия приложения
Что подготовить перед обращением
- username бота
- описание сценария WebApp
- код обработчика web_app_data
- скриншот исчезнувшей клавиатуры
- лог действий пользователя
Как выглядит нормальный результат
После исправления пользователь возвращается из WebApp в понятный диалог: бот принимает данные, показывает результат и выводит нужные кнопки.
Чего лучше не делать
Не пытайтесь держать весь сценарий только на старом сообщении с кнопками. После WebApp лучше явно отправлять пользователю следующий шаг.
Вопросы и ответы
Почему данные из WebApp приходят, но кнопок нет?
Потому что обработчик данных не отправляет новую клавиатуру или отправляет сообщение без reply_markup.
Нужно ли использовать inline или reply-клавиатуру?
Зависит от сценария. Для постоянного меню чаще удобнее reply-клавиатура, для действий в сообщении - inline.
Можно ли восстановить клавиатуру командой /start?
Можно, но лучше сделать автоматический возврат после WebApp, чтобы пользователь не искал команду вручную.
Почему клавиатура пропадает только у части пользователей?
Возможны разные состояния диалога, версии клиента Telegram или ветки сценария после WebApp.
Нужна похожая задача?
Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку, скриншот или лог ошибки, и я подскажу, с чего безопасно начать исправление.
Итог
После Telegram WebApp бот должен явно продолжать диалог: принять данные, сохранить состояние и показать следующую клавиатуру.