如何测试对话机器人本地主机

时间:2019-11-12 08:40:19

标签: c# azure botframework azure-bot-service

我目前正在跟踪Teams Conversation Bot示例。据我所知,我一直遵循这封信。

有效的方法。

当我通过网络视图与漫游器对话

enter image description here

我可以看到它击中了本地主机上的代码。

 protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
        {
            turnContext.Activity.RemoveRecipientMention();

            switch (turnContext.Activity.Text.Trim())
            {
                case "MentionMe":
                    await MentionActivityAsync(turnContext, cancellationToken);
                    break;

                case "UpdateCardAction":
                    await UpdateCardActivityAsync(turnContext, cancellationToken);
                    break;

                case "Delete":
                    await DeleteCardActivityAsync(turnContext, cancellationToken);
                    break;

                case "MessageAllMembers":
                    await MessageAllMembersAsync(turnContext, cancellationToken);
                    break;

                default:
                    var value = new JObject { { "count", 0 } };

                    var card = new HeroCard
                    {
                        Title = "Welcome Card",
                        Text = "Click the buttons below to update this card",
                        Buttons = new List<CardAction>
                        {
                            new CardAction
                            {
                                Type= ActionTypes.MessageBack,
                                Title = "Update Card",
                                Text = "UpdateCardAction",
                                Value = value
                            },
                            new CardAction
                            {
                                Type = ActionTypes.MessageBack,
                                Title = "Message all members",
                                Text = "MessageAllMembers"
                            }
                        }
                    };

                    await turnContext.SendActivityAsync(MessageFactory.Attachment(card.ToAttachment()));
                    break;
            }
        }

什么不起作用

它似乎将响应发送回去,但响应窗口中没有任何内容。如果没有显示响应,我该如何测试?

Ngrok错误

经过更多的挖掘后,我看到ngrok正在将错误归类为网页,我设法从中选出了以下错误。

  

AggregateException:无法获取客户端凭证的令牌。 (AADSTS700016:在目录“ botframework.com”中找不到标识为“ 9e0d71-7665-4f24-8898-f82f9bebba56”的应用程序。如果该应用程序未由租户管理员安装或未得到任何管理员的同意,则可能会发生这种情况。租户中的用户。您可能已将身份验证请求发送给错误的租户。
  跟踪ID:4bf53bae-84dc-4b16-98e8-e99b322dc200
  相关ID:3c249469-d177-49dd-989f-80044a3b9faa
  时间戳记:2019-11-12 08:41:56Z)(AADSTS700016:在目录'botframework.com'中找不到标识符为'e0d71-7665-4f24-8898-f82f9bebba56'的应用程序。已由租户的管理员安装或得到租户中任何用户的同意。您可能已将身份验证请求发送给错误的租户。

我已经检查了漫游器和应用程序本身的设置。它们具有相同的密码和应用程​​序客户端ID。

enter image description here

botframework.com似乎包含在azure上创建的机器人列表。

我尝试过的。

  • Visual Studio以管理员身份运行。
  • Ch住botframework.com我的机器人已列出。

  • 用户具有在AD中创建应用程序的权限,无论如何我目前还是唯一的用户。

enter image description here

  • dev工具日志显示其身份验证。
  • 边缘和镀铬

enter image description here

网络聊天错误

我可以在漫游器中看到其网络聊天记录错误

enter image description here

问题是机器人正在响应。

仿真器

运行模拟器确实可以。问题是在托管时。

交叉发布

问题#1974

1 个答案:

答案 0 :(得分:0)

我意识到这是一个旧线程,但我今天刚被它击中。在经历了很多痛苦之后,我们的情况得到了解决:

  1. 转到 Azure 门户 > Azure Active Directory
  2. 点击“应用注册”
  3. 找到相关机器人应用的注册并点击它。
  4. 在管理下,选择身份验证。
  5. 将“支持的帐户类型”更改为“任何组织目录中的帐户”。

回想起来:当尝试通过 Microsoft.Bot.Builder.Teams.TeamsInfo.GetMemberAsync() 获取机器人与之聊天的人的详细信息时,抛出了 AADSTS700016 错误。由于我们在应用注册中的“支持的帐户类型”受到限制,当机器人在不同于我们的 Azure AD 租户的 Teams Office365 租户中运行时,Azure AD 会说“不”。翻转后,GetMemberAsync() 能够对 Teams Office365 租户进行身份验证以获取请求的用户信息。耶!