将代码从Bot Framework V3迁移到V4

时间:2019-01-09 01:48:36

标签: dialog botframework

将对话框从V3迁移到V4时,我还有更多问题。下面是我们的代码。 在v3中,我们使用

Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync(conversationContext.CurrentActivity, new RootDialog());

public class RootDialog : IDialog {
    public RootDialog()
    {
      .....
    }

    public async Task StartAsync(IDialogContext context)
    {
        context.Wait(this.MessageReceivedAsync);
    }

    public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
    }

在MessageReceivedAsync中,我们使用了context.Wait(),context.Done()和context.PostAsync()。 您能推荐如何在V4中更换吗? V4中对Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync的警告是什么?

1 个答案:

答案 0 :(得分:2)

这些API都不见了。以下是在V4中替换它们的说明:

context.Wait(...)

此方法用于告诉对话框系统当新活动到来且现在不存在时,下一步要在类上调用的方法。相反,您现在继承了Dialog的子类,并为各种生命周期事件重写了几种方法:

  • BeginDialogAsync-在第一次由漫游器代码或在BeginDialogAsync上调用DialogContext的另一个对话框将对话框推入堆栈时调用。
  • ContinueDialogAsync-当有新活动进入并且机器人在ContinueDialog上调用DialogContext时调用。
  • ResumeDialogAsync-当堆栈中的另一个对话框完成并且以前位于堆栈中的对话框现在位于堆栈顶部时调用。
  • RepromptDialogAsync-在提出明确要求重新提示用户时调用。基本上,这是一种告诉对话框什么都没有改变的方法,但是应该通过发送上次发送的任何活动,从停止的地方重新开始。
  • EndDialogAsync-在对话框指示其已完成并且正在弹出堆栈时调用。

context.Done()/。Fail()

这是您报告对话框状态的一种方式,但是现在可以通过上述大多数生命周期方法返回DialogTurnResult来实现。其中一个属性名为Status,类型为DialogTurnStatus,其属性值指示对话框的当前状态。例如:

  • Waiting-对话框发送了一些活动,正在等待更多输入,应保留在堆栈的顶部。
  • Complete-对话框已完成工作,应结束并从堆栈中弹出。返回此状态时,调用者还可以调查对话框的输出(如果有的话),该输出通过DialogTurnResult::Result属性传回。
  • Cancelled-该对话框在其工作过程中被取消。

context.PostAsync()/ Conversation.SendAsync

这些都用于回复用户。现在,这两种情况都被在SendActivityAsync上调用ITurnContext所取代,而Context可以通过DialogContext实例的ITurnContext属性访问,该实例作为参数传递给大多数上述生命周期方法。注意:几个生命周期方法实际上实际上直接接收到一个Unit tests are passed参数,然后您就可以使用它。