在Microsoft Teams的对话结束时清除对话状态的可能方法



我正在创建一个机器人,每次对话结束时,我都会清除对话状态。为此,我将在最后一条消息之后发送一个类型为endOfConversation的活动。

在我的机器人程序的方法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上运行时,我出现了错误。在查找该消息时,我发现了以下信息:

团队不支持该特定类型,抱歉。

https://github.com/microsoft/botframework-sdk/issues/3300

在日志中,当我想发送endOfConversation类型时,我会看到这一点。

{
"code": "BadArgument",
"message": "Unknown activity type",
"innerHttpError": null
}

我想发送一个会话结束类型,因为基于该类型,我可以在机器人的服务器端清除会话状态。在这种状态下,我存储一些在会话结束时不再相关的对象。

所以我现在的问题是,在不使用endOfConversation类型的情况下,如何在会话结束时清除会话状态?

您提供的链接中的"RichMoe"表示Teams不支持此操作(2017(,我认为情况仍然如此-我不认为Teams有对话"结束"的概念,例如,网站上的支持机器人会像任何对话一样,Teams会试图永远保留整个聊天历史记录。

也许你可以解释为什么你需要"结束"对话,如果有相关的事情我可以尝试帮助。

最新更新