Полагаю, вы просматривали документы, например Сохранить данные пользователя и беседы ? Если это так, просто помните, что есть несколько предпосылок:
- Вам необходимо указать местоположение, чтобы сохранить фактическое состояние. В ссылке используется память (
var storage = new MemoryStorage();
), но вы можете сохранить ее на диске / в базе данных / хранилище BLOB-объектов / в любом другом месте Бот принимает объекты диалога и состояния пользователя в своем конструкторе:
private BotState _conversationState; private BotState _userState;
publi c StateManagementBot (ConversationState разговорState, UserState userState) {_conversationState = разговорState; _userState = userState; }
После того, как это будет сделано, кодом позже пытаются (а) извлечь объект из состояния , если он существует . Если он не существует, он будет создан тут же.
var разговорStateAccessors = _conversationState.CreateProperty (nameof (ConversationData));
var разговорData = await разговорStateAccessors.GetAsyn c (turnContext, () => new ConversationData ());
Таким образом, здесь уместен объект "ConversationData", который является любым типом пользовательского объекта, который вы хотите. Возможно, список или что-то имеет для вас смысл. Следующей является часть "() => new ConversationData()
", которая в основном является встроенной функцией, которая просто создает новый экземпляр объекта. Вы бы создали, скажем, новый список. Последующие вызовы «var conversationData =...
» в любом месте вашего бота (например, внутри OnMessageActivityAsyn c) вернут (уже существующий) экземпляр List, по которому вы можете проверить историю.
Просто имейте в виду, что это может стать довольно большим, поэтому, возможно, стоило бы убрать время (например, хранить только последние 20 или что-то в этом роде), если вы долго общаетесь с пользователями - это будет зависеть на ваш сценарий, где / как вы используете свои боты, я думаю.