在 Microsoft Teams 对话结束时清除对话状态的可能方法
Possible way to clear the conversation state at the end of a conversation for Microsoft Teams
我正在创建一个机器人,每次对话结束时,我都会清除对话状态。为此,我在最后一条消息后发送类型为 endOfConversation
的 activity。
在我的机器人的方法 OnMessageActivityAsync
中,我添加了这段代码。
turnContext.OnSendActivities(OnSendActivitiesHandlerAsync);
必须执行此代码:
private async Task<ResourceResponse[]> OnSendActivitiesHandlerAsync(ITurnContext turnContext, List<Activity> activities, Func<Task<ResourceResponse[]>> next)
{
foreach (Activity activity in activities)
{
if (activity.Type == ActivityTypes.EndOfConversation)
{
await _conversationState.ClearStateAsync(turnContext); // <-- `_conversationState` is a global variable type of `BotState`.
}
}
return await next();
}
它在 Bot Framework Emulator 中运行良好,但在 Microsoft Teams 上运行时我遇到了错误。在查找该消息时,我发现了这个:
That particular type is not supported in Teams, sorry.
当我想发送 endOfConversation
类型时,我在日志中看到了这一点。
{
"code": "BadArgument",
"message": "Unknown activity type",
"innerHttpError": null
}
我会发送对话结束类型,因为基于该类型我可以清除机器人服务器端的对话状态。在那种状态下,当对话结束时,我会存储一些不再相关的对象。
所以我现在的问题是如何在不使用 endOfConversation
类型的情况下清除对话结束时的对话状态?
"RichMoe" 在您提供的 link 中声明 Teams 不支持此操作 (2017),我认为情况仍然如此 - 我认为 Teams 没有概念"end" 对话的方式,例如,网站上的支持机器人会像任何对话一样,Teams 将尝试永远保留整个聊天历史记录。
也许你可以解释为什么你需要 "end" 对话,如果有相关的事情我可以尝试帮助。
我正在创建一个机器人,每次对话结束时,我都会清除对话状态。为此,我在最后一条消息后发送类型为 endOfConversation
的 activity。
在我的机器人的方法 OnMessageActivityAsync
中,我添加了这段代码。
turnContext.OnSendActivities(OnSendActivitiesHandlerAsync);
必须执行此代码:
private async Task<ResourceResponse[]> OnSendActivitiesHandlerAsync(ITurnContext turnContext, List<Activity> activities, Func<Task<ResourceResponse[]>> next)
{
foreach (Activity activity in activities)
{
if (activity.Type == ActivityTypes.EndOfConversation)
{
await _conversationState.ClearStateAsync(turnContext); // <-- `_conversationState` is a global variable type of `BotState`.
}
}
return await next();
}
它在 Bot Framework Emulator 中运行良好,但在 Microsoft Teams 上运行时我遇到了错误。在查找该消息时,我发现了这个:
That particular type is not supported in Teams, sorry.
当我想发送 endOfConversation
类型时,我在日志中看到了这一点。
{
"code": "BadArgument",
"message": "Unknown activity type",
"innerHttpError": null
}
我会发送对话结束类型,因为基于该类型我可以清除机器人服务器端的对话状态。在那种状态下,当对话结束时,我会存储一些不再相关的对象。
所以我现在的问题是如何在不使用 endOfConversation
类型的情况下清除对话结束时的对话状态?
"RichMoe" 在您提供的 link 中声明 Teams 不支持此操作 (2017),我认为情况仍然如此 - 我认为 Teams 没有概念"end" 对话的方式,例如,网站上的支持机器人会像任何对话一样,Teams 将尝试永远保留整个聊天历史记录。
也许你可以解释为什么你需要 "end" 对话,如果有相关的事情我可以尝试帮助。