如何使用SDK4.0在漫游器中添加对话框

时间:2018-11-16 14:10:00

标签: botframework bots qnamaker

我正在尝试实现一个使用Qna服务和Azure搜索的机器人。

我正在使用C# QnA Maker sample github代码的帮助。

它使用BotServices.cs类,该类在其构造函数中接受QnA服务。此Botservice对象将传递给QnABot类构造函数。

我想在QnABot的构造函数中使用对话框集,该对话框集需要添加访问器。我真的不明白如何添加accessor类并在startup.cs中使用它们。

我试图从其他示例中复制一些代码,但是没有用。

请帮助我向BotServices构造函数添加访问器,以便可以在其中使用对话框集。

出于我的目的,我想扩展QnA示例。

1 个答案:

答案 0 :(得分:1)

您能告诉我们为什么要通过botservices类的对话框集吗?此类仅用于引用外部服务,例如QnAMaker和LUIS。如果要启动对话框,请在QnABot.cs类的OnTurnAsync方法中启动。请记住,在此特定示例中创建的this方法将对用户发送的每条消息都发送响应,即使用户正在通过对话框进行工作。您可以通过以下方式更改OnTurnAsync:对话框的第一步是检查QnAMaker。请参阅enterpriseBot示例,以了解如何启动对话框以及向子对话框添加访问器。请参见下面从MainDialog.cs类中摘录的内容,他们如何添加访问器:

protected override async Task OnStartAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken))
{
  var onboardingAccessor = _userState.CreateProperty<OnboardingState>(nameof(OnboardingState));
  var onboardingState = await onboardingAccessor.GetAsync(innerDc.Context, () => new OnboardingState());

  var view = new MainResponses();
  await view.ReplyWith(innerDc.Context, MainResponses.Intro);

  if (string.IsNullOrEmpty(onboardingState.Name))
  {
    // This is the first time the user is interacting with the bot, so gather onboarding information.
      await innerDc.BeginDialogAsync(nameof(OnboardingDialog));
  }
}