Bot Framework Test connection to your bot fails with status code Forbidden

戏子无情 提交于 2019-12-24 05:45:10

问题


My bot works receives and sends messages fine in Slack, Skype and emulator.

However when I click the blue Test button in the bot portal (https://dev.botframework.com/) it gives me the error message "Authorization for Microsoft App ID my_id_is_replacedhere failed with status code Forbidden"

Full error is below.

I also get the same error when I send a scheduled message to Slack using endpoint https://slack.botframework.com/ and the Conversations.SendToConversation() method. This used to work and the Test button used to succeed.

Why am I getting this message? Is there a NuGet pkg update that broke it? I went through the troubleshooting guide, but everything else seem to work.

Thank you

InternalServerError { "message": "An error has occurred.", "exceptionMessage": "Authorization for Microsoft App ID my_id_is_replacedhere failed with status code Forbidden", "exceptionType": "System.UnauthorizedAccessException", "stackTrace": " at Microsoft.Bot.Connector.JwtTokenRefresher.d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)\r\n at Microsoft.Bot.Connector.Conversations.d__8.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Bot.Connector.ConversationsExtensions.d__19.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter1.GetResult()\r\n at Grasp.MessagesController.d__0.MoveNext() in C:\Code\Relegraph_Git\GraspThree\Grasp\Controllers\MessagesController.cs:line 55\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Threading.Tasks.TaskHelpersExtensions.d__3`1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()" }


回答1:


Try use

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

before

connector.Conversations.SendToConversationAsync(...)



回答2:


I figured out what caused the error. Apparently the Test button in the bot portal sends a "Ping" message to the bot. In my MessagesController code I was trying to reply to every message with something like this:

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

However - when I do this for the Ping type of Activity (Activity.Type=ActivityTypes.Ping), then I get the above error. When I just ignore the Ping message, then the Test button works.

I still had an issue when I get the same error when sending messages to Slack on a schedule (no incoming message to reply to). I worked around that issue using Slack's WebAPI:

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



来源:https://stackoverflow.com/questions/41255717/bot-framework-test-connection-to-your-bot-fails-with-status-code-forbidden

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!