首页 > 解决方案 > 初始对话时出现 Microsoft Bot Framework v4 随机“未经授权”错误

问题描述

我们在最新的 Bot SDK 中为客户构建了一个机器人,但在对话开始时我们会随机收到“未经授权”错误。

请参阅下面的错误,这很奇怪,因为:

  1. 它不经常发生
  2. 并且错误是从机器人发送的,因此 DirectLine API 已经与机器人通信,但机器人无法将任何内容发送回 DirectLine。(这是我们假设的,但很难调试)

我们仍在使用 MemoryStorage,但不要认为这与它有任何关系。

框架版本:

任何人都可以解决这个问题

Microsoft.Bot.Schema.ErrorResponseException: Operation returned an invalid status code 'Unauthorized'
   at Microsoft.Bot.Connector.Conversations.ReplyToActivityWithHttpMessagesAsync(String conversationId, String activityId, Activity activity, Dictionary`2 customHeaders, CancellationToken cancellationToken)
   at Microsoft.Bot.Connector.ConversationsExtensions.ReplyToActivityAsync(IConversations operations, String conversationId, String activityId, Activity activity, CancellationToken cancellationToken)
   at Microsoft.Bot.Builder.BotFrameworkAdapter.SendActivitiesAsync(ITurnContext turnContext, Activity[] activities, CancellationToken cancellationToken)
   at Microsoft.Bot.Builder.TurnContext.<>c__DisplayClass22_0.<<SendActivitiesAsync>g__SendActivitiesThroughAdapter|1>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Bot.Builder.TurnContext.SendActivityAsync(IActivity activity, CancellationToken cancellationToken)
   at Microsoft.Bot.Builder.TurnContext.SendActivityAsync(String textReplyToSend, String speak, String inputHint, CancellationToken cancellationToken)
   at Louise.Chatbot.DialogSteps.GreetingDialogSteps.GreetUserAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) in C:\Users\.......\GreetingDialogSteps.cs:line 26
   at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.OnStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
   at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.RunStepAsync(DialogContext dc, Int32 index, DialogReason reason, Object result, CancellationToken cancellationToken)
   at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.BeginDialogAsync(DialogContext dc, Object options, CancellationToken cancellationToken)
   at Microsoft.Bot.Builder.Dialogs.DialogContext.BeginDialogAsync(String dialogId, Object options, CancellationToken cancellationToken)
   at Louise.Chatbot.Louise.OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken) in C:\Users\.......\Louise.cs:line 154
   at Microsoft.Bot.Builder.MiddlewareSet.ReceiveActivityWithStatusAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken)
   at Microsoft.Bot.Builder.BotAdapter.RunPipelineAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken)

标签: botframework

解决方案


根据 [ https://github.com/Microsoft/botbuilder-dotnet/issues/1251][1]

“这里可能的原因是 v4 SDK 中的令牌缓存错误。在上一个版本中,在 V3 C# SDK 中,我们放弃了自定义代码,转而使用 AAD 团队提供的交钥匙解决方案。到目前为止,这似乎已经一直工作得很好,我们对这个解决方案很满意。作为这项工作的一个很好的副作用,在非常高的负载下的性能也好一点。

目前这项工作正在 v4 C# SDK 中进行,并计划在 2 月中旬发布 4.3 版本。”


推荐阅读