你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

关于组件和瀑布对话框

适用于:SDK v4

对话框有几种不同的类型。 本文介绍组件、瀑布和提示对话框。 有关对话框的一般详细信息,请参阅对话框库一文。 有关自适应对话框的信息,请参阅自适应对话框简介

瀑布对话框(或瀑布))定义了一系列步骤,使机器人能够引导用户完成线性流程。 这些对话旨在在 组件对话的上下文中工作。

组件对话框是一种容器对话框,该对话框允许集内的对话框调用组中的其他对话框,如用于调用提示对话框或其他瀑布对话框的瀑布对话框。 组件对话框管理一组对话框,如瀑布对话框、提示等。 可以设计一个组件对话框,用于处理特定任务并在同一机器人中或跨多个机器人重复使用它。

提示对话框 (提示) 是用于向用户询问特定类型信息(如数字、日期或名称等)的对话框。 提示设计为在组件对话框中使用瀑布对话框。

组件对话

有时,我们想要编写可在不同的方案中重复使用的对话,例如,编辑地址对话来请求用户提供街道、城市和邮政编码的值。

组件对话提供一种策略用于创建独立的对话来处理特定的方案,将大型对话集分解成更易于管理的片段。 其中的每个片段有自身的对话集,可避免与包含该片段的对话集发生名称冲突。 有关详细信息,请参阅 组件对话框操作方法

瀑布对话

瀑布对话是对话的特定实现,通常用于从用户那里收集信息或指导用户完成一系列任务。 聊天的每个步骤实现为采用“瀑布步骤上下文” (step) 参数的异步函数。 在每个步骤中,机器人 会提示用户输入 (或可以开始子对话,但通常是提示) ,等待响应,然后将结果传递到下一步。 第一个函数的结果作为参数传递给下一个函数,依此类推。

下图显示一系列瀑布步骤以及发生的堆栈操作。 下面的使用对话部分详细介绍了对话堆栈的用法。

消息如何映射到瀑布步骤的表示形式。

在瀑布步骤中,瀑布对话的上下文存储在它的瀑布步骤上下文中。 步骤上下文类似于对话上下文,并提供对当前轮次上下文和状态的访问权限。 使用瀑布步骤上下文对象从瀑布步骤内通过对话集进行互动。

可以在对话的瀑布步骤内部,或者通过机器人的轮次处理程序来处理对话的返回值,不过,通常需要通过机器人的轮次逻辑来检查对话轮次结果的状态。 在瀑布步骤中,对话在瀑布步骤上下文的 result 属性中提供返回值。

瀑布步骤上下文属性

瀑布步骤上下文包含以下属性:

  • 选项:包含对话的输入信息。
  • :包含可添加到上下文,然后传递到后续步骤的信息。
  • 结果:包含上一步骤的结果。

此外,下一种方法 (C# 中的 NextAsync一步位于 JavaScript 和 Python) 继续执行同一轮的瀑布对话的下一步,使机器人可以根据需要跳过特定步骤。

提示

使用对话库中的提示可以轻松请求用户提供信息,以及评估其响应。 例如,对于 数字提示,请指定要请求的问题或信息,并且提示会自动检查它是否收到了有效的数字响应。 如果这样做,对话可以继续;如果没有,它将为用户重新选择有效的答案。

在幕后,提示是由两个步骤组成的对话。 首先,提示会请求输入;其次,它会返回有效值,或者使用重新提示从头开始。

调用提示时,为提示指定 prompt options,可在其中指定要提示的文本、验证失败时的重试提示,以及回答提示所用的选项。 一般情况下,提示和重试提示属性是活动,但不同编程语言对此的处理方式有一些变化。

此外,在创建提示时可为提示添加某种自定义验证。 例如,假设我们想要使用数字提示获取聚会规模,但该聚会规模必须大于 2 且小于 12。 提示首先检查它是否收到有效号码,然后运行自定义验证(如果提供)。 如果自定义验证失败,它将重新设置用户,如上所示。

提示完成时,会显式返回所请求的结果值。 返回该值后,我们可以确定它已通过内置提示验证和可能已提供的任何其他自定义验证。

有关使用各种提示的示例,请查看如何使用对话库收集用户输入

提示类型

在幕后,提示是由两个步骤组成的对话。 首先,提示要求输入;其次,它将返回有效值,或者从顶部重新启动并重新启动。 对话库提供各种基本提示,每个提示用于收集不同类型的响应。 基本提示可以解释解释自然语言输入,例如,“ten”或“a dozen”表示数字,“tomorrow”或“Friday at 10am”表示日期时间。

Prompt 说明 返回
附件提示 请求提供一个或多个附件,例如文档或图像。 附件对象的集合。
选项提示 请求从一组选项中选择一个选项。 找到的选项对象。
确认提示 请求确认。 一个布尔值。
日期时间提示 请求提供日期时间。 日期时间解析对象的集合。
数字提示 要求提供数字。 数字值。
文本提示 请求提供常规文本输入。 一个字符串。

若要提示用户输入,请使用某个内置类(例如“文本提示”)定义一个提示,并将其添加到对话集。 提示具有固定的 ID,该 ID 必须在对话集中唯一。 可为每个提示创建自定义的验证程序。对于某些提示,可以指定默认区域设置。

提示区域设置

使用区域设置来确定选项确认日期时间数字提示的特定于语言的行为。 对于用户提供的任何给定输入,如果通道在用户的消息中提供了 locale 属性,则使用该属性。 否则,如果设置了提示的默认区域设置(通过在调用提示的构造函数时提供,或者在以后进行设置),则会使用该区域设置。 如果未提供这些区域设置,则英语 (“en-us”) 用作区域设置。

区域设置是一个两、三或四个字符 ISO 639 代码,表示语言或语言系列。

提示选项

步骤上下文的 prompt 方法的第二个参数采用了提示选项对象,该对象包含以下属性 。

properties 说明
提示 发送给用户的、以请求输入的初始活动。
重试提示 如果用户的第一个输入未验证,则发送用户的活动。
选项 供用户选择的选项列表,与选项提示配合使用。
验证 其他与自定义验证程序配合使用的参数。
样式 定义某个选择的选项如何提示或确认提示将向用户呈现。

应始终指定要发送给用户的初始提示活动,以及用户输入未验证时实例的重试提示。

如果用户的输入无效,则会向用户发送重试提示;如果未指定重试,则使用初始提示。 但是,如果活动从验证程序内发送回用户,则不会发送任何重试提示。

提示验证

可以在将值返回到瀑布对话的下一个步骤之前验证提示响应。 验证程序函数包含提示验证程序上下文参数,并返回一个布尔值用于指示输入是否通过了验证。 提示验证程序上下文包含以下属性:

properties 说明
上下文 机器人的当前轮次上下文。
Recognized 提示识别器结果,包含识别器处理的有关用户输入的信息。
选项 包含提示选项,这些选项已在启动提示所需的调用中提供。

提示识别器结果包含以下属性:

properties 说明
成功 指示识别器是否能够分析输入。
识别器的返回值。 如果必要,验证代码可以修改此值。

使用对话

可将对话视为编程堆栈(称为“对话堆栈”),可将轮次处理程序视为对话引导者,以及堆栈为空时的回退机制。 该堆栈最顶端的项被视为活动对话框,对话框上下文会将所有输入定向到活动对话框。

对话开始后,会将其推送到堆栈上,现在是活动对话。 它保持活动对话,直到它结束,它已被 替换对话框 方法删除,或者另一个对话框被轮次处理程序或活动对话本身推送到堆栈 () ,并成为活动对话。 当该新对话结束时,它将从堆栈中弹出,下一个对话框将再次变为活动对话。 这样就可以重复某个对话将聊天分支,详见下面的讨论。

可以使用运行对话框扩展方法开始或继续根对话。 在机器人代码中,调用对话框运行扩展方法可以继续现有对话框,或者启动对话框的新实例(如果堆栈当前为空)。 控件和用户输入转到堆栈上的活动对话框。

运行方法需要 状态属性访问器来访问对话框状态。 该访问器的创建和使用方式与其他状态访问器相同,但它会根据聊天状态创建为自身的属性。 有关管理状态的详细信息,请参阅管理状态主题;有关对话状态的用法,请参阅有序聊天流操作指南。

在对话框中,你有权访问对话框上下文,并可以使用它启动其他对话框、结束当前对话框并执行其他操作。

启动对话

在瀑布对话中,使用开始对话提示替换对话方法,将要启动的对话的对话的对话框 ID 传递到瀑布对话的上下文中。

  • 提示和开始对话框方法将引用的对话框的新实例推送到堆栈顶部。
  • replace dialog 方法会将当前对话从堆栈中弹出,并将用于替换的对话推送到堆栈上。 被替换的对话会被系统取消,该实例包含的任何信息都会被释放。

使用 options 参数将信息传递到对话的新实例。 传递到新对话中的选项可以在对话的任何步骤中通过步骤上下文的 options 属性进行访问。 有关详细信息,请参阅如何使用 分支和循环创建高级聊天流

继续对话

在瀑布对话框中,使用步骤上下文的属性保留轮次之间的状态。 在上一轮次添加到此集合的任何值都可以在后续轮次中使用。 有关详细信息,请参阅如何使用 分支和循环创建高级聊天流

结束对话:

在瀑布对话框中,使用结束对话框方法通过从堆栈中弹出对话框来结束对话框。 结束对话框方法可以将可选结果返回到父上下文 (如调用它的对话框或机器人的轮次处理程序)。 往往是从对话内部调用此方法,以结束该对话自身的当前实例。

可以从具有对话上下文的任何位置调用 end dialog 方法,但对于机器人而言,该方法似乎是从当前活动对话调用的。

提示

最佳做法是在对话末尾显式调用 结束对话 方法。

清除所有对话

若要使所有对话从堆栈中弹出,可以调用对话上下文的 cancel all dialogs 方法来清除对话堆栈。

重复某个对话

使用 replace dialog 方法时,可以使用对话来替换其自身,创建一个循环。 这是处理复杂交互和管理菜单的一种方法。

注意

如果需要保留当前对话的内部状态,则需要在调用 替换对话框 方法时将信息传递给对话的新实例,然后相应地初始化对话。

将聊天分支

对话上下文维护对话堆栈,对于堆栈中的每个对话,将跟踪下一个步骤是什么。 它的 begin dialog 方法创建子级,并将对话推送到堆栈的顶层;它的 end dialog 方法从堆栈中弹出顶层对话。 通常,end dialog 是从要结束的对话调用的。

一个对话框可以调用对话框上下文的 begin dialog 方法并提供新对话框的 ID,以便启动同一对话框集中的新对话框,随后使新对话框成为当前的活动对话框。 原始对话框仍保留在堆栈中,但对对话框上下文的 continue dialog 方法的调用只会发送到位于堆栈顶层的对话框,即“活动对话框”。 将某个对话框从堆栈中弹出后,对话框上下文会在堆栈中弹出原始对话框的位置处继续执行瀑布框的下一步。

因此,可以在聊天流中创建分支,方法是在一个对话中包含一个选择步骤(该步骤可按条件从一组可用对话中选出一个要启动的对话)。

其他信息