首页 > 解决方案 > Botframework Dialog 迁移 v3 到 v4

问题描述

目前我正在尝试将我的 v3 机器人迁移到 v4 并且我有点卡住如何迁移 v3 IDialog。v4 中的等价物是什么以及如何使用它们?另外,如何在 v4 中进行 Activity 转发?在 v3 中,这将类似于await context.Forward(…)?

非常感谢和最好的问候法比安

标签: botframework

解决方案


将 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 为每个机器人添加了这个,并假设开发人员已经IBotDataStore<BotData>使用 autofac 注册了一个有效的实现。访问PrivateConversationData和是ConversationData自动UserDataIDialogContext

使用Bot Builder V4,对话框堆栈和状态设置更多地掌握在开发人员手中。在BeginDialogAsyncandContinueDialogAsync方法中,DialogContext有一个BeginDialogAsync方法可以将该对话框作为当前对话框的子项启动(类似于.ForwardV3 中的)。在对话完成后恢复,并利用从子对话返回的值,是不同的,涉及使用DialogTurnResult.Result

DialogContext在 V4 中也有对TurnContextand的引用是. 从您可以检索对象,这是一个实现,它是 json 序列化进/出在Startup.cs V4 中配置的存储的实现, 保留了和的概念。设置稍有不同,但这些数据桶的范围仍与原来相同:DialogInstancedialogContext.ActiveDialogDialogInstanceDialogStateIDictionary<string, object>UserDataConversationDataPivateConversationData

  • 用户状态使用通道 ID 和来自 ID 创建一个密钥。 {Activity.ChannelId}/users/{Activity.From.Id}#YourPropertyName

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

  • 私有会话状态使用通道 ID、来自 ID 和会话 ID 创建一个密钥。 {Activity.ChannelId}/conversations/{Activity.Conversation.Id}/users/{Activity.From.Id}#YourPropertyName

状态访问器在 Startup 的ConfigureServices方法中配置。

帮助开发人员完成 V3 到 V4 机器人和对话迁移过程的文档正在编写中。

有关 v4 对话框和状态的进一步阅读的一些链接:

高级对话流

使用对话框提示收集用户输入

管理状态

保存用户和对话数据

为您的机器人实施自定义存储


推荐阅读