我在将对话框从 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 的警报本机是什么?
这些API都没有了。以下是 V4 中对其替换的解释:
上下文.等待(...)
该方法用于告诉对话系统当新活动到达并消失时接下来要在类上调用什么方法。相反,你现在子类化Dialog
并重写各种生命周期事件的几种方法:
-
BeginDialogAsync
- 当对话框首次被机器人代码或另一个对话框调用压入堆栈时调用BeginDialogAsync
on the DialogContext
.
-
ContinueDialogAsync
- 当新活动进入并且机器人调用时调用ContinueDialog
on the DialogContext
.
-
ResumeDialogAsync
- 当堆栈上的另一个对话框完成并且之前位于堆栈上的对话框现在位于堆栈顶部时调用。
-
RepromptDialogAsync
- 当明确请求重新提示用户时调用。这基本上是一种告诉对话框没有任何变化的方法,但它应该通过发送上次发送的任何活动来从上次中断的地方重新开始。
-
EndDialogAsync
- 当对话框指示其完成并从堆栈中弹出时调用。
context.Done()/.Fail()
这是报告对话框状态的方式之一,但现在这是通过返回DialogTurnResult
来自大多数上述生命周期方法。其中一个属性被命名为Status
并且是类型DialogTurnStatus
其中包含指示对话框当前状态的值。例如:
-
Waiting
- 对话框发送了一些活动并正在等待更多输入,并且应保留在堆栈的顶部。
-
Complete
- 对话框已完成其工作,应结束并从堆栈中弹出。当返回此状态时,调用者还可以调查对话框的输出(如果有的话),该输出通过DialogTurnResult::Result
财产。
-
Cancelled
- 对话框在工作过程中被取消。
context.PostAsync()/Conversation.SendAsync
这些都用于响应用户。两者现在都被调用所取代SendActivityAsync
on the ITurnContext
可以通过Context
的财产DialogContext
作为参数传递到大多数上述生命周期方法的实例。注意:一些生命周期方法实际上接收到ITurnContext
直接参数,然后你就可以使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)