botframework - Botframework Dialog 迁移 v3 到 v4
问题描述
目前我正在尝试将我的 v3 机器人迁移到 v4 并且我有点卡住如何迁移 v3 IDialog
。v4 中的等价物是什么以及如何使用它们?另外,如何在 v4 中进行 Activity 转发?在 v3 中,这将类似于await context.Forward(…)
?
非常感谢和最好的问候法比安
解决方案
将 V3 对话框转换为 V4 时,一个很好的起点涉及更改:
IDialog
->
Dialog
或ComponentDialog
(取决于)
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
自动UserData
从IDialogContext
。
使用Bot Builder V4,对话框堆栈和状态设置更多地掌握在开发人员手中。在BeginDialogAsync
andContinueDialogAsync
方法中,DialogContext
有一个BeginDialogAsync
方法可以将该对话框作为当前对话框的子项启动(类似于.Forward
V3 中的)。在对话完成后恢复,并利用从子对话返回的值,是不同的,涉及使用DialogTurnResult.Result
DialogContext
在 V4 中也有对TurnContext
and的引用是. 从您可以检索对象,这是一个实现,它是 json 序列化进/出在Startup.cs V4 中配置的存储的实现, 保留了和的概念。设置稍有不同,但这些数据桶的范围仍与原来相同:DialogInstance
dialogContext.ActiveDialog
DialogInstance
DialogState
IDictionary<string, object>
UserData
ConversationData
PivateConversationData
用户状态使用通道 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 对话框和状态的进一步阅读的一些链接:
推荐阅读
- mongodb - 如何修复 mongo 中的 SSL 错误“CSSMERR_TP_VERIFY_ACTION_FAILED”?
- loops - 如何遍历包含多个数字的行的文本文件,同时计算数字
- r - R,在循环中添加数据帧
- python - 如何创建一个持续检测抓取数据是否更改的while循环?
- php - “如何在 PHP 中添加‘音频标签播放器中的删除选项’”
- reactjs - 文件/Blob - eslint(no-undef)
- php - 删除标签但不删除内容
- jquery - 使用 Jquery 将图像定位到 div 的顶部
- c# - 如何解决 LightningChart 中点击了哪些 y 轴段
- f# - F# 度量单位不会简化