我正在创建一个机器人,每次对话结束时,我都会清除对话状态。为此,我将在最后一条消息之后发送一个类型为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会试图永远保留整个聊天历史记录。
也许你可以解释为什么你需要"结束"对话,如果有相关的事情我可以尝试帮助。