Botframework对话框从v3迁移到v4

时间:2018-12-13 11:29:57

标签: botframework

当前,我正在尝试将我的v3机器人迁移到v4,而对于如何迁移v3 IDialog则有些困惑。 v4中有什么等效功能以及如何使用它们?另外,如何在v4中进行活动转发?在v3中,它可能类似于await context.Forward(…)

非常感谢和问候! 法比安

1 个答案:

答案 0 :(得分:3)

将V3对话框转换为V4时,一个好的起点就是更改:

IDialog -> DialogComponentDialog(视情况而定)

StartAsyc -> BeginDialogAsync

MessageReceivedAsync -> ContinueDialogAsync

IDialogContext -> DialogContext

Microsoft Bot Builder V3 .net sdk广泛使用了 AutoFac ,并且与 Bot Builder 相比,开发人员通常看不见对话框堆栈> V4。 V3开发人员使用。Call和。Forward将对话框推入堆栈,并使用。EndDialog弹出对话框。在V3中,对话框上的字段会自动进行序列化/反序列化,范围为PrivateConversationData。无需专门配置对话框状态,SDK为每个机器人添加了此状态,并假定开发人员已使用autofac注册了有效的IBotDataStore<BotData>实现。 PrivateConversationData会自动访问ConversationDataUserDataIDialogContext

使用 Bot Builder V4,对话框堆栈和状态设置更多地由开发人员掌握。在BeginDialogAsyncContinueDialogAsync方法中,DialogContext有一个BeginDialogAsync方法,它将作为当前对话框的子级启动该对话框(类似于V3)。对话框完成后继续使用子对话框返回的值是不同的,涉及使用.Forward

DialogTurnResult.Result也引用了DialogContext,而V4中的TurnContextDialogInstance。从dialogContext.ActiveDialog中,您可以检索DialogInstance对象,该对象是一个DialogState实现,它通过json序列化到在 Startup.cs V4中配置的存储中/从其中存储出来。保留IDictionary<string, object>UserDataConversationData的概念。设置略有不同,但是这些数据存储区的作用域仍然保持不变:

  • 用户状态使用通道ID和ID从中创建密钥。 PivateConversationData

  • 对话状态使用通道ID和对话ID创建密钥。 {Activity.ChannelId}/users/{Activity.From.Id}#YourPropertyName

  • 私人对话状态使用频道ID从ID和对话ID中创建密钥。 {Activity.ChannelId}/conversations/{Activity.Conversation.Id}#YourPropertyName

状态访问器是通过启动公司的{Activity.ChannelId}/conversations/{Activity.Conversation.Id}/users/{Activity.From.Id}#YourPropertyName方法配置的。

文档可协助开发人员完成从V3到V4机器人的过程,并且正在进行对话框迁移。

一些链接,可进一步阅读v4对话框和状态:

Advanced conversation flow

Gather user input using a dialog prompt

Managing state

Save user and conversation data

Implement custom storage for your bot