Как вернутся на предыдущий шаг в ConversationHandler? Не работает register_next_step_handler (python-telegram-bot)

Делаю телеграм бота на Python с фрейморком python-telegram-bot. Подскажите, пожалуйста, как задать боту следующий шаг после context.bot.answer_callback_query.

Пробовала сделать так:

context.bot.register_next_step_handler(msg, on_massage) Получаю ошибку: AttributeError: 'Bot' object has no attribute 'register_next_step_handler'

return on_massage(update, context) Бот зависает, никаких ошибок не выводит.

Вот часть кода, где нужно это применить:

def on_massage(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()
    if query.data == 'klass':
        user_data = context.user_data
        category = 'Вид массажа'
        massage = 'Классический'
        user_data[category] = massage

        query.edit_message_text("Выберите дату: ", reply_markup=telegramcalendar.create_calendar())
        return STATE_SELECT_DATE

def on_select_date(update: Update, context: CallbackContext):
    query = update.callback_query
    query.answer()

    bot = context.bot

    selected, date = telegramcalendar.process_calendar_selection(bot, update)
    if not selected:
        return ConversationHandler.END

    user_data = context.user_data
    text_data = date.strftime("%d/%m/%Y")
    user_data['Дата'] = text_data

    keyboard = [[
        InlineKeyboardButton("12:00", callback_data='12'),
        InlineKeyboardButton("14:30", callback_data='14'),
        InlineKeyboardButton("16:00", callback_data='16')
    ]]

    reply_markup = InlineKeyboardMarkup(keyboard)

    query.edit_message_text(text='''Вы выбрали %s
Выберите свободное время: ''' % text_data, reply_markup=reply_markup)
    return STATE_SELECT_TIME

def on_time_12(update: Update, context: CallbackContext):
    user_data = context.user_data
    text_time = '12:00'
    user_data['Время'] = text_time

    query = update.callback_query

    if check(user_data['Дата'], user_data['Время']):
        context.bot.answer_callback_query(update.callback_query.id, text='Извините, это время занято, выберите другое!', show_alert=True)
        print('Найдено в бд')
    else:
        query.answer()
        query.edit_message_text('''Введите своё *Имя и Фамилию*''', parse_mode='Markdown')
        return STATE_SELECT_USER

Помогите, пожалуйста. Буду очень благодарна за помощь!


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

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

Нашла решение своей проблемы

def on_time_12(update: Update, context: CallbackContext):
    user_data = context.user_data

    text_time = '12:00'
    user_data['Время'] = text_time

    data_time = text_data + text_time

    query = update.callback_query

    if check(user_data['Дата'], user_data['Время']):
        context.bot.answer_callback_query(update.callback_query.id, text='Извините, это время занято, выберите другое!', show_alert=True)
        print('Найдено в бд')

        message = update.effective_message
        message.reply_text("Выберите дату: ", reply_markup=telegramcalendar.create_calendar())
        # ИЛИ
        # query.answer()
        # query.edit_message_text("Выберите дату: ", reply_markup=telegramcalendar.create_calendar())
        
        return STATE_SELECT_DATE
    else:
        query.answer()
        query.edit_message_text('''Введите своё *Имя и Фамилию*''', parse_mode='Markdown')
        return STATE_SELECT_TIME

И чтобы mysql не выдавал ошибок при повторной проверке, нужно добавить buffered=True в строку mycursor = mydb.cursor()

ConversationHandler

    dp = updater.dispatcher

    dp.add_handler(CommandHandler('start', on_main_menu))

    dp.add_handler(ConversationHandler(
        entry_points=[
            CommandHandler('start', on_main_menu),
        ],
        states={
            STATE_SELECT_MASSAGE: [
                CallbackQueryHandler(on_massage)
            ],

            STATE_SELECT_DATE: [
                CallbackQueryHandler(on_select_date)
            ],

            STATE_SELECT_TIME: [
                CallbackQueryHandler(on_time_12, pattern='12'),
                CallbackQueryHandler(on_time_14, pattern='14'),
                CallbackQueryHandler(on_time_16, pattern='16')
            ]
        },
        fallbacks=[

        ],
        # allow_reentry=True,
        # per_message=True,
    ))

    dp.add_error_handler(on_error)
→ Ссылка