Python TelobotAPI. Как передать в следующую функцию inline-ответ пользователя на сообщение, и аргумент, созданный в прошлой функции?

Как известно, с ответами пользователя в формате "ReplyButton" или "text" работает метод "register_next_step_handler(message, function, argument). К тому же, помимио самого сообщения (message) и следующей функции(function), ему в качестве аргумента можно передать аргумент(argument), который он передаст в эту самую функцию. В документации указано, что этот метод начнёт работать только тогда, когда после отправки сообщения message, бот получит любое сообщение от пользователя. В случае, когда message предполагает ответ по inline-кнопке, передать информацию в вызываемую function нельзя, да и сам хендлер не вызывается, так как inline-действие не считается сообщением. Думаю, есть какой-то метод, который реализует данное действие, но в документации очень странно характеризуются методы регистрации хендлеров. Прошу, помогите!

def xxx(message):
    candidate = "111" # <-Создаю аргумент для след. функции
    coming_text = "Готовы ли вы отправить этого кандидата?"
    markup = types.InlineKeyboardMarkup()
    btn1 = types.InlineKeyboardButton(text="Да", callback_data="y")
    btn2 = types.InlineKeyboardButton(text="Нет", callback_data="n")
    markup.add(btn1, btn2)
    msg = bot.send_message(message.chat.id, text=coming_text.format(message.from_user), reply_markup=markup)
    bot.register_next_step_handler(msg, send_candidate, candidate)# <-добавляю в хендлер

# <- ЧТобы запустить функцию ниже, нужно отправить боту текстовое сообщение, но в данной задаче требуется её вызов именно по inline-кнопке.

def send_candidate(call, candidate):# <- ожидаемая функция
    print(1)
    print(call.data) # <-здесь выходит ошибка
    print(candidate.get_info()["n"])

Ответы (1 шт):

Автор решения: Nick

Сделай более точную callback_data

btn1 = types.InlineKeyboardButton(text="Да", callback_data="send_condidate_y")
btn2 = types.InlineKeyboardButton(text="Нет", callback_data="send_condidate_y")

Здесь тебе не нужен будет

bot.register_next_step_handler(msg, send_candidate, candidate)# <-добавляю в хендлер

Можно просто улавливать ответ другим хендлером

@bot.callback_query_handler(func=lambda callback: 'send_condidate_' in callback.data
    def send_candidate(call):
       if call.data.split('_')[-1] == 'y':
           pass
       else:
          pass
→ Ссылка