我最近为许多用户部署了一个机器人。有时,当我调用EndDialogAsync()
时,我会得到一个BadRequest错误。
下面是我的堆栈跟踪:
Microsoft.Bot.Schema.ErrorResponseException
Operation returned an invalid status code 'BadRequest'
Bot.CustomPrompts.CustomPrompt in OnPromptAsync at line 37:17 within BasicBot, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Called from: System.Runtime.ExceptionServices.ExceptionDispatchInfo in Throw within System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
Bot.Dialogs.Tour.TourDialog+<>c__DisplayClass0_0+<<-ctor>b__10>d in MoveNext at line 512:17 within BasicBot, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Called from: System.Runtime.ExceptionServices.ExceptionDispatchInfo in Throw within System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
TourDialog的第512行是:return await stepContext.EndDialogAsync();
CustomPrompt的第37行是:await turnContext.SendActivityAsync(options.Prompt, cancellationToken).ConfigureAwait(false);
该对话框似乎即将结束,因此stepContext应该不再存在。CustomPrompt是一个自定义类,用于在僵尸框架v4 (此处为Adaptive Card response from a WaterfallStep Dialog MS Bot framework v4)中实现AdaptivePrompts。我根本不知道为什么调用CustomPrompt,因为对话框应该已经结束了。
发布于 2019-06-13 04:03:49
您必须记住,EndDialogAsync
将只从堆栈中弹出一个对话框,因此如果堆栈上还有任何其他对话框,则位于堆栈顶部的对话框将成为新的活动对话框,并且它的ResumeDialogAsync
将被调用,这可能会发送消息。
https://stackoverflow.com/questions/55500204
复制相似问题