Botframework:控制器内重置对话栈未生效问题求助
如何在Bot Framework控制器中彻底清除对话栈
你的问题出在没有将修改后的对话栈数据持久化到Bot存储。stack.Reset()只是清空了内存中的对话栈,但如果不调用FlushAsync(),这些修改不会被保存到后端存储(比如Azure Table Storage、Redis等),当作用域释放后,内存中的临时数据被丢弃,下次加载时还是会读取原始的对话栈数据。
修正后的代码需要加上botData.FlushAsync(cancellationToken)来保存修改:
using (ILifetimeScope scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity)) { IBotData botData = scope.Resolve<IBotData>(); await botData.LoadAsync(cancellationToken); IDialogStack stack = scope.Resolve<IDialogStack>(); stack.Reset(); // 关键步骤:将修改后的对话栈数据保存到存储 await botData.FlushAsync(cancellationToken); }
说明:
LoadAsync():从后端存储加载当前用户/会话的Bot数据到内存stack.Reset():清空内存中的对话栈帧FlushAsync():将内存中修改后的Bot数据写回后端存储,确保修改永久生效
这样执行后,再次加载对话栈时,就会读取到清空后的状态,不会再恢复原来的对话。
内容的提问来源于stack exchange,提问作者DrGriff
相关产品推荐
相关产品推荐

