问题
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