Если клавиатура бота пропадает после 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 бот должен явно продолжать диалог: принять данные, сохранить состояние и показать следующую клавиатуру.