检测对话何时结束,以便我可以删除存储的对话状态数据
Detect when conversation end so I can delete stored conversation state data
我设置了一个机器人,它有一个正常的对话框堆栈,每个对话框在 Azure 的 Cosmos DB 中存储一些状态数据。当对话结束时,我使用 OnEndDialogAsync 删除特定于该对话的数据。
我的问题是,如何检测整个对话何时结束以便删除整个对话?还是对话永远不会结束?
我当前删除每个对话框数据的代码:
protected override async Task OnEndDialogAsync(ITurnContext context, DialogInstance instance, DialogReason reason, CancellationToken cancellationToken)
{
DialogStateDictionary dictionary = await Dependencies.StateAccessor.GetAsync(context, () => null);
if (dictionary != null && dictionary.ContainsKey(DialogID) == true)
{
dictionary[DialogID] = null;
}
await Dependencies.StateAccessor.SetAsync(context, dictionary);
}
删除整个内容的代码是:
await Dependencies.StateAccessor.SetAsync(context, null);
对话的概念 "ending" 将因频道而异。在网络聊天中,您可以让您的客户端通过让您的机器人知道来响应浏览器离开页面。在 Teams 等渠道中,对话实际上是永久性的,但您始终可以通过让机器人像您正在做的那样重置其状态,将对话中的任何点任意定义为 "end"。也许你可以有一个确认提示,询问用户 "Will that be all?",如果用户说 "yes" 那么机器人可以说 "Goodbye" 或什么的。
不确定您使用的是哪个频道,建议查看endofconversation activity类型。
我设置了一个机器人,它有一个正常的对话框堆栈,每个对话框在 Azure 的 Cosmos DB 中存储一些状态数据。当对话结束时,我使用 OnEndDialogAsync 删除特定于该对话的数据。
我的问题是,如何检测整个对话何时结束以便删除整个对话?还是对话永远不会结束?
我当前删除每个对话框数据的代码:
protected override async Task OnEndDialogAsync(ITurnContext context, DialogInstance instance, DialogReason reason, CancellationToken cancellationToken)
{
DialogStateDictionary dictionary = await Dependencies.StateAccessor.GetAsync(context, () => null);
if (dictionary != null && dictionary.ContainsKey(DialogID) == true)
{
dictionary[DialogID] = null;
}
await Dependencies.StateAccessor.SetAsync(context, dictionary);
}
删除整个内容的代码是:
await Dependencies.StateAccessor.SetAsync(context, null);
对话的概念 "ending" 将因频道而异。在网络聊天中,您可以让您的客户端通过让您的机器人知道来响应浏览器离开页面。在 Teams 等渠道中,对话实际上是永久性的,但您始终可以通过让机器人像您正在做的那样重置其状态,将对话中的任何点任意定义为 "end"。也许你可以有一个确认提示,询问用户 "Will that be all?",如果用户说 "yes" 那么机器人可以说 "Goodbye" 或什么的。
不确定您使用的是哪个频道,建议查看endofconversation activity类型。