【问题标题】:Bot Framework Test connection to your bot fails with status code ForbiddenBot Framework Test 与您的机器人的连接失败,状态码为 Forbidden
【发布时间】:2016-12-21 05:26:40
【问题描述】:

我的机器人可以在 Slack、Skype 和模拟器中正常接收和发送消息。

但是,当我单击机器人门户 (https://dev.botframework.com/) 中的蓝色测试按钮时,它会显示错误消息“Microsoft App ID my_id_is_replacedhere 的授权失败,状态码为 Forbidden”

完整错误如下。

当我使用端点https://slack.botframework.com/ 和 Conversations.SendToConversation() 方法向 Slack 发送预定消息时,我也会遇到同样的错误。这曾经有效,并且“测试”按钮曾经成功。

为什么我会收到此消息?是否有破坏它的 NuGet pkg 更新? 我浏览了故障排除指南,但其他一切似乎都正常。

谢谢

InternalServerError { "message": "发生错误。", "exceptionMessage": "Microsoft App ID 的授权 my_id_is_replacedhere 失败,状态码为 Forbidden”, “exceptionType”:“System.UnauthorizedAccessException”,“stackTrace”:“ 在 Microsoft.Bot.Connector.JwtTokenRefresher.d__2.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)\r\n 在 Microsoft.Bot.Connector.Conversations.d__8.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 Microsoft.Bot.Connector.ConversationsExtensions.d__19.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at Grasp.MessagesController.d__0.MoveNext() 在 C:\Code\Relegraph_Git\GraspThree\Grasp\Controllers\MessagesController.cs:line 55\r\n--- 堆栈跟踪从上一个异常位置结束 被抛出 ---\r\n 于 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Threading.Tasks.TaskHelpersExtensions.d__3`1.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\r\n--- 从先前抛出异常的位置结束堆栈跟踪 ---\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()" }

【问题讨论】:

  • 我看到这样的东西:“my_id_is_replacedhere”。您是否尝试使用您的应用程序的真实 ID 更改该占位符?
  • 是的,我的配置文件和错误消息中有一个真实且有效的 Microsoft App ID。我只是用“my_id_is_replacedhere”文本替换了这里。

标签: botframework botconnector


【解决方案1】:

尝试使用

MicrosoftAppCredentials.TrustServiceUrl(notify.ServiceUrl, DateTime.MaxValue);

之前

connector.Conversations.SendToConversationAsync(...)

【讨论】:

    【解决方案2】:

    我找出了导致错误的原因。显然,机器人门户中的测试按钮会向机器人发送“Ping”消息。在我的 MessagesController 代码中,我尝试使用以下内容回复每条消息:

                            ConnectorClient connector = new ConnectorClient(new Uri(Act.ServiceUrl), appcred);
                            Activity reply = Act.CreateReply(replymsg);
                            connector.Conversations.ReplyToActivity(reply);
    

    但是 - 当我为 Ping 类型的 Activity (Activity.Type=ActivityTypes.Ping) 执行此操作时,我会收到上述错误。当我忽略 Ping 消息时,测试按钮就起作用了。

    当我按计划向 Slack 发送消息时遇到同样的错误(没有要回复的传入消息)时,我仍然遇到了问题。我使用 Slack 的 WebAPI 解决了这个问题:

    https://slack.com/api/chat.postMessage?token={0}&channel={1}&text={2}&as_user={3}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多