Как вставить функцию в инлайн кнопку?

Телеграмм бот должен по нажатию инлайн-кнопки "Анкетирование" активировать функцию, которая это самое анкетирование начинает. При этом вторая функция должна задавать состояние для пользователя и вносить его в подкласс StatesGroup

@dp.callback_query(F.data == 'name_enter')
async def process_button_press(callback: CallbackQuery, state: FSMContext):
    await callback.answer('')  
    await name_enter(callback.message, state)

async def name_enter(message: Message, state: FSMContext):
    await message.answer(text='Введите имя')
    await state.set_state(fsm_register.fill_name)

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

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

callback_query → это не Message объект

Поэтому внутри callback-хендлера у тебя нет message.text, и логику ввода данных (анкетирование) обычно продолжают уже в хендлере message.


Хендлер нажатия инлайн-кнопки

@dp.callback_query(F.data == 'name_enter')
async def process_button_press(callback: CallbackQuery, state: FSMContext):
    await callback.answer()
    await callback.message.answer('Введите имя')
    await state.set_state(fsm_register.fill_name)

Хендлер для обработки имени

@dp.message(fsm_register.fill_name)
async def get_name(message: Message, state: FSMContext):
    await state.update_data(name=message.text)
    await message.answer(f"Имя сохранено ✅ ({message.text})")

    # переход к следующему шагу

Итог:

Обработка Событие
callback_query пользователь нажал кнопку → бот задаёт вопрос и включает состояние
message пользователь отвечает → бот сохраняет ответ и переключает состояние дальше
→ Ссылка