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

Не срабатывает callback у inline keyboard в telegram боте. В чем может быть причина?

Добрый день! Пишу telegram бота с помощью этой библиотеки https://python-telegram-bot.readthedocs.io/en/stable/. Нашел пример как отправить inline keyboard https://github.com/python-telegram-bot/python-tele.... Сами кнопки отправляются но callback при их нажатии не срабатывает, то есть функция button вообще не вызывается. Подскажите как исправить это.

from telegram.ext import Updater, CommandHandler, CallbackQueryHandler
import telegram


def start(bot, update):
    keyboard = [[telegram.InlineKeyboardButton("Option 1", callback_data='1'),
                 telegram.InlineKeyboardButton("Option 2", callback_data='2')],

                [telegram.InlineKeyboardButton("Option 3", callback_data='3')]]

    reply_markup = telegram.InlineKeyboardMarkup(keyboard)

    update.message.reply_text('Please choose:', reply_markup=reply_markup)

    # update.message.reply_text(
    #     'Hello {}'.format(update.message.from_user.first_name))


def button(update, context):
    query = update.callback_query

    # query.edit_message_text(text="Selected option: {}".format(query.data))

    print(query)

    update.message.reply_text(query.data)


updater = Updater("")

updater.dispatcher.add_handler(CommandHandler("start", start))
updater.dispatcher.add_handler(CallbackQueryHandler(button))

updater.start_polling()
updater.idle()
  • Вопрос задан
  • 9863 просмотра
Подписаться 2 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@AndrewPythonBuilder
Новичок Питонист
Замените:
update.message.reply_text('Please choose:', reply_markup=reply_markup)

На:
bot.send_message(update.message.chat.id,'Please choose:', reply_markup=reply_markup)

И если вы хотите, чтобы отвечало, замените функцию button на:
def button(bot, update):
    query = update.callback_query

    # query.edit_message_text(text="Selected option: {}".format(query.data))

    print(query)

    bot.send_message(query.message.chat_id, str(query.data))
Ответ написан
Комментировать
@Stormx480
Python Backend Developer
А ловить сообщения то кто хэндлерами будет?
Только у тебя updater а не хэндлер, но суть не меняется
@bot.callback_query_handler(func=lambda c: c.data == 'callback')#Ловим коллбэк от кнопки. Нам передается объект CallbackQuery который содержит поле data и message. Сейчас нам нужно из даты достать наше слово которое мы передали в атрибуте callback_data
def callback_answer(callback_query: types.CallbackQuery): #И отвечаем на него
    bot.answer_callback_query(
            callback_query.id,
            text='Hello! This callback.',
            show_alert=True
            )
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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