Botframework 博特女士回复两次

Botframework 博特女士回复两次,botframework,Botframework,在模拟器中的localhost上,一旦我连接到机器人,我就会得到登录卡,但在azure注册频道web聊天中,我没有得到登录卡,而是需要键入一些内容,然后我会得到两次。 我如何获得登录卡而无需在聊天中键入内容。 我已经打开了“始终打开”选项,但仍然没有用 登录卡来自社区身份验证中间件 我在onTurn的bot类中使用以下代码: public async Task OnTurn(ITurnContext turnContext) { if (turnContext.Activ

在模拟器中的localhost上,一旦我连接到机器人,我就会得到登录卡,但在azure注册频道web聊天中,我没有得到登录卡,而是需要键入一些内容,然后我会得到两次。 我如何获得登录卡而无需在聊天中键入内容。 我已经打开了“始终打开”选项,但仍然没有用

登录卡来自社区身份验证中间件 我在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
                });
            }
        }

    }
会话开始时会发出两个会话更新:一个用于加入会话的用户,另一个用于加入会话的bot,因此您需要过滤掉bot的更新:

public static bool UserHasJustJoinedConversation(this Activity activity)
{

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

如果您需要此类案例的帮助,请至少添加执行此身份验证提示的代码的实现。非常感谢,现在我一打开网络聊天室就会收到登录卡。
public static bool UserHasJustJoinedConversation(this Activity activity)
{

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