Задать вопрос
@ubirust

Как можно в callback отправить сообщение с reply клавиатурой?

как можно в callback отправить сообщение с reply клавиатурой. Сейчас отправляется только inline клавиатура. Если указать reply клавиатуру, то отправляется просто текст.

Версия aiogram~=2.18

Вот примерный код:
async def clicked_pusk(call: CallbackQuery):
   await call.message.answer(text="Вы запустили мониторинг", reply_markup=stop_keyboard())
   # хочу, чтобы кнопка "Остановить мониторинг" была всегда на ввиду у пользователя. За этого не рассматриваю inline клавиатуру.
def stop_keyboard():
    stop_menu = ReplyKeyboardMarkup(resize_keyboard=True,
                                    keyboard=[
                                        [KeyboardButton(text='Остановить мониторинг')]
                                    ]
                                    )

    return stop_menu

Но кнопка "Остановить мониторинг" не появляется, просто отправляется текст сообщения.
Может кто решал такую задачу.

Кстати вот ответ от Claude (пробовал так делать, но тоже кнопка не появляется):
В callback функции нельзя непосредственно отправить сообщение с reply клавиатурой (ReplyKeyboardMarkup).

Причина в том, что callback генерируется при нажатии на inline кнопку, поэтому в нем можно управлять только inline клавиатурами.

Чтобы отправить сообщение с reply клавиатурой из callback, нужно:

В callback функции выполнить необходимую логику обработки нажатия кнопки.
Получить chat_id пользователя из объекта callback функции.
Используя chat_id, отправить новое сообщение методом bot.send_message()
При отправке этого сообщения указать параметр reply_markup с нужной reply клавиатурой.

Пример:

@dp.callback_query_handler(...)
async def process_callback(callback: types.CallbackQuery):
   # обработка
   
   await bot.send_message(chat_id=callback.from_user.id, 
                         text="text",
                         reply_markup=reply_keyboard)


То есть сначала обрабатываем callback, а затем уже отдельным запросом отправляем сообщение с reply клавиатурой в нужный чат.
---
Как говорил ранее, также не получается прикрепить кнопку.
  • Вопрос задан
  • 1318 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
@alex-python
@dp.callback_query_handler(text='текст кнопки')
async def cmd_get_mes(callback: types.CallbackQuery):
    await callback.answer()
    markup = ReplyKeyboardMarkup(keyboard=[
        [KeyboardButton(text='текст')]
    ], resize_keyboard=True)
    await callback.message.answer('Текст', reply_markup=markup)


Должно работать. Callback запрос не влияет на логику работы вашей программы. Можете писать, что хотите в функции. Хоть емейл отправлять, хоть к БД подключаться.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы