Бот не реагирует на нажатие InlineButton в aiogram 2.25.1

Столкнулся с такой проблемой - бот не реагирует на нажатие InlineKeyboardButton в aiogram 2.25.1. Что должен делать бот:

При первом запуске бот должен запросить номер телефона пользователя. После получения номера бот записывает его в БД с отрицательным флагом активности нового пользователя. Админам бота приходит сообщение о регистрации нового пользователя. К этому сообщению прикрепляются две инлайн кнопки - "добавить" и "отменить". При нажатии на "добавить" бот меняет флаг активности пользователя на активный и пользователь получает доступ к базе знаний бота.

Но в моём случае бот не реагирует на нажатие кнопок. То есть он не переходит в коллбек функцию, которая должна отловить нажатие кнопок. Отладочные принты не печатаются.

В этой функции я создаю клавиатуру и кнопки:

@dp.message_handler(state=UserInfoStateGroup.phone)
async def get_users_phone(message: types.Message, state: FSMContext):
    user_phone = message.text
    if user_phone.isdigit() and len(user_phone) == 11:
        # Проверяем, есть ли этот номер в базе данных, если нет - присылаем админу сообщение,
        # в котором он либо добавит человека, либо нет

        wwdb = WorkWithDB()
        user_name = f"{message.from_user.full_name}"
        response = wwdb.check_current_user(
            phone_number=user_phone,
            name=user_name,
            telegram_id=message.from_user.id
        )
        
        await bot.send_message(chat_id=message.from_user.id, text=response[0])
        if response[1] is True:
            with open('admin_users.json', 'r', encoding='utf-8') as admins_list:
                admins = json.load(admins_list)['admins_list']
                for admin in admins:
                    keyboard = InlineKeyboardMarkup(row_width=2)
                    button_add = InlineKeyboardButton(text="Добавить в БД", callback_data=f"add:{message.from_user.id}")
                    button_cancel = InlineKeyboardButton(text="Отменить", callback_data=f"cancel:{message.from_user.id}")
                    keyboard.add(button_add, button_cancel)
                    await bot.send_message(chat_id=admin, text="Ваши действия", reply_markup=keyboard)

    else:
        await message.answer("Попробуйте еще раз")
        await state.set_state(UserInfoStateGroup.phone)

Вот так выглядит моя коллбек функция, которая должна отлавливать нажатие кнопок:

@dp.callback_query_handler(lambda c: c.data.startswith('add:'))
async def change_user_status(callback: CallbackQuery):
    print("Я обрабатываю кнопку админа")
    user_id = int(callback.data.split(":")[1])
    db = WorkWithDB()
    db.change_users_active_flag(user_id)
    with open("admin_users.json", "r", encoding="utf-8") as admins_list:
        admins = json.load(admins_list)['admins_list']
        for admin in admins:
            await bot.send_message(chat_id=admin, text="Пользователь стал активным")
        await bot.send_message(chat_id=user_id, text="Ты зарегистрирован")


@dp.callback_query_handler(lambda c: c.data.startswith('cancel:'))
async def cancel_registration(callback: CallbackQuery):
    user_id = int(callback.data.split(":")[1])
    await bot.send_message(chat_id=user_id, text="Ты отменил регистрацию пользователя!")

Прошу помощи! Бьюсь не первый день с этим вопросом!


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

Автор решения: INE NARMUN'

Нашел решение на заморском сайте!

Нужно добавить:

state="*"

в функцию

@dp.callback_query_handler(lambda c: c.data.startswith('add:'))

И вот оно - счастье!

→ Ссылка