1

我的机器人可以在 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(Task task)\r\n 在 System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\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 在 C:\Code\Relegraph_Git\GraspThree\Grasp\Controllers\MessagesController.cs 中的 Grasp.MessagesController.d__0.MoveNext() 处:第 55 行\r\n--- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n 在 System.Runtime 处从先前引发异常的位置结束堆栈跟踪。 CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at 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(Task task)\r\n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n System.Web。 Http.Filters.ActionFilterAttribute.d__0.MoveNext()\r\n--- 在 System.Runtime.CompilerServices.TaskAwaiter 处从先前引发异常的位置结束堆栈跟踪 ---\r\n。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(Task task)\r\n System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) \r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()" }Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()" }Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()" }

4

2 回答 2

2

尝试使用

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

connector.Conversations.SendToConversationAsync(...)
于 2017-04-27T22:03:31.477 回答
1

我弄清楚了导致错误的原因。显然,机器人门户中的测试按钮会向机器人发送“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}

于 2016-12-25T18:57:25.167 回答