Бот запускается, но не работают стейты, что исправить в коде?

Подскажите пожалуйста, бот запускается, но не работают стейты, нажимаешь посмотреть анкету, но ничего не происходит, что исправить в коде?

from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext

import config
import random

from on_startup_notify import on_startup_notify

from memorystate import Test


from aiogram import types, Bot, executor, Dispatcher

bot = Bot(token=config.BOT_TOKEN, parse_mode=types.ParseMode.HTML)
dp = Dispatcher(bot)
storage = MemoryStorage()

async def on_startup(dispatcher):
    await on_startup_notify(dispatcher)



@dp.message_handler(commands=['start'])
async def startpg(message: types.Message, state: FSMContext):
    startmenu = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
    markup1 = types.KeyboardButton("Посмотреть анкету")
    startmenu.add(markup1)
    await bot.send_message(chat_id=message.chat.id, text='Добро пожаловать!\nНаш бот познакомит Вас с девушками с Вашего города!         Жми на посмотреть анкету!',reply_markup=startmenu)
    await state.set_data(Test.N1)


@dp.message_handler(text=['Посмотреть анкету'], state=Test.N1)
async def osnova(message: types.Message, state: FSMContext):
    await bot.send_message(message.chat.id, 'Введите своё имя:')
    answer = message.text
    await state.update_data(answer1=answer)
    await Test.N2.set()

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

Автор решения: Zhymabek Roman

Вот полностью рабочии ваш код. Я убрал не нужные импорты а также добавил memory_storage в диспечер, чтобы он сохранял состояние FSM. Также я написал в некоторых местах коментарии-пояснении к коду, чтобы было вам понятно

from aiogram import types, Bot, executor, Dispatcher
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup

import random
import logging

# Configure logging
logging.basicConfig(level=logging.INFO)

# Initialize FSM storage
memory_storage = MemoryStorage()

# Initialize bot and dispatcher
bot = Bot(token="BOT TOKEN HERE", parse_mode=types.ParseMode.HTML)
dp = Dispatcher(bot, storage=memory_storage)

class QuestionnaireState(StatesGroup):
    step_1 = State()

@dp.message_handler(commands=['start'])
async def startpg(message: types.Message, state: FSMContext):
    startmenu = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup1 = types.KeyboardButton("Посмотреть анкету")
    startmenu.add(markup1)
    await message.reply('Добро пожаловать!\nНаш бот познакомит Вас с девушками с Вашего города!\nЖми на посмотреть анкету!', reply_markup=startmenu)

@dp.message_handler(text='Посмотреть анкету')
async def osnova(message: types.Message, state: FSMContext):
    await message.reply('Введите своё имя:', reply_markup=types.ReplyKeyboardRemove()) # types.ReplyKeyboardRemove() здесь нужен для того чтобы удалить reply_markup с надписью "Посмотреть анкету" от глаз пользывателя
    await QuestionnaireState.step_1.set()

@dp.message_handler(state=QuestionnaireState.step_1, content_types=types.ContentTypes.TEXT)
async def questionnaire_state_1_message(message: types.Message, state: FSMContext):
    async with state.proxy() as user_data:
    # Здесь user_data является хранилищем (а точнее словарем), куда можно сохранять определенные данные и вытаскивать если нужно в любой момент
        user_data['name'] = message.text.replace('\n',' ') # Вы возможно спросите - для чего нужен здесь replace, он нужен в случае если юзер умудрится написать свое имя на двух строках, у меня на практике такое было несколько раз

    await message.reply(f"Ваше имя: {user_data['name']}")

    await state.finish() # Оканчиваем наш FSM опрос от пользывателя

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

Скриншот успешной работы бота

RTFM и Удачи Вам!

→ Ссылка