Как вставить функцию в инлайн кнопку?
Телеграмм бот должен по нажатию инлайн-кнопки "Анкетирование" активировать функцию, которая это самое анкетирование начинает. При этом вторая функция должна задавать состояние для пользователя и вносить его в подкласс 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 |
пользователь отвечает → бот сохраняет ответ и переключает состояние дальше |