MS Bot回复两次

时间:2018-09-24 10:41:54

标签: botframework

在仿真器中的localhost上,一旦我连接到漫游器,便获得了登录卡,但是在azure注册频道的网络聊天中,我没有获得登录卡,而是需要输入一些东西,然后我得到两次。 webchat screenshot 我如何获得登录卡而无需在聊天中输入任何内容。 我已经打开了“始终打开”选项,但仍然没有帮助。

登录卡来自社区身份验证中间件Link here 我在onTurn的bot类中使用以下代码:

public async Task OnTurn(ITurnContext turnContext)
    {
        if (turnContext.Activity.UserHasJustJoinedConversation() || turnContext.Activity.UserHasJustSentMessage())
        {
            var state = turnContext.GetConversationState<Dictionary<string, object>>();
            var dialogCtx = dialogs.CreateContext(turnContext, state);


            await dialogCtx.Continue();
            if (!turnContext.Responded)
            {

                await dialogCtx.Begin("mainDialog", new Dictionary<string, object>
                {
                    ["Value"] = turnContext.Activity.Text
                });
            }
        }

    }

我还使用以下两个功能

public static bool UserHasJustSentMessage(this Activity activity)
    {

        return activity.Type == ActivityTypes.Message;
    }

public static bool UserHasJustJoinedConversation(this Activity activity)
    {

        return activity.Type == ActivityTypes.ConversationUpdate && activity.MembersAdded.FirstOrDefault().Id != activity.Recipient.Id;
    }

1 个答案:

答案 0 :(得分:1)

对话开始时会发出两个ConversationUpdate:一个是供加入对话的用户使用的,另一个是供加入对话的漫游器的,因此您需要过滤出漫游器的一个:

public static bool UserHasJustJoinedConversation(this Activity activity)
{

    return activity.Type == ActivityTypes.ConversationUpdate
        && activity.MembersAdded.Any(channelAccount => channelAccount.Id != "YourBotName");
}