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

时间:2020-04-29 12:02:55

标签: c# botframework 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类型的情况下在对话结束时清除对话状态?

1 个答案:

答案 0 :(得分:2)

您提供的链接中的“ RichMoe”指出,Teams不支持此操作(2017年),但我认为情况仍然如此-我认为Teams没有对话的“结束”概念,例如,网站上的支持机器人会-像任何对话一样,团队将尝试永久保留整个聊天记录。

也许,您可以解释为什么需要“结束”对话,如果有相关的问题,我可以尝试提供帮助。