ComponentDialog class
包含其他子对话的对话的基类。
- 扩展
注解
通过组件对话,可以将机器人的逻辑分解为可以自己作为对话添加到另一个 ComponentDialog
或 DialogSet
的组件。 组件也可以导出为节点包的一部分,并在其他机器人中使用。
若要定义新组件,请从 ComponentDialog 派生类,并在类构造函数中添加子对话:
const { ComponentDialog, WaterfallDialog, TextPrompt, NumberPrompt } = require('botbuilder-dialogs');
class FillProfileDialog extends ComponentDialog {
constructor(dialogId) {
super(dialogId);
// Add control flow dialogs
this.addDialog(new WaterfallDialog('start', [
async (step) => {
// Ask user their name
return await step.prompt('namePrompt', `What's your name?`);
},
async (step) => {
// Remember the users answer
step.values['name'] = step.result;
// Ask user their age.
return await step.prompt('agePrompt', `Hi ${step.values['name']}. How old are you?`);
},
async (step) => {
// Remember the users answer
step.values['age'] = step.result;
// End the component and return the completed profile.
return await step.endDialog(step.values);
}
]));
// Add prompts
this.addDialog(new TextPrompt('namePrompt'));
this.addDialog(new NumberPrompt('agePrompt'))
}
}
module.exports.FillProfileDialog = FillProfileDialog;
然后,可以将组件的新实例添加到另一个 DialogSet
或 ComponentDialog
:
const dialogs = new DialogSet(dialogState);
dialogs.add(new FillProfileDialog('fillProfile'));
构造函数
Component |
创建 Dialog 类的新实例。 |
属性
id | 对话框的唯一 ID。 设置对话框的唯一 ID。 |
telemetry |
设置遥测客户端,并将其应用于所有子对话。 添加到组件的未来对话也将继承此客户端。 获取当前的遥测客户端。 |
继承属性
dialogs | 容器对话框集。 |
End |
获取默认的轮次结束结果。 |
方法
add |
|
begin |
启动对话并将其推送到父级对话堆栈时调用。 默认情况下,这会调用组件对话的初始对话(由 InitialDialogId 定义的 Dialog.BeginDialogAsync(DialogContext、object、CancellationToken)方法。 在派生类中重写此方法以实现中断逻辑。 |
continue |
当对话框 继续时调用,该对话是活动对话,用户使用新的 活动进行答复。 如果此方法 未 重写,则当用户答复时,对话框会自动结束。 |
create |
创建内部对话上下文 |
end |
对话框 结束时调用。 |
reprompt |
当对话框应重新提示用户输入时调用。 |
resume |
当父对话堆栈上的子对话完成此轮次时调用,并将控件返回到此对话组件。 |
继承的方法
configure(Record<string, unknown>) | 用于配置对象的 Fluent 方法。 |
find |
查找以前添加到容器中的子对话。 |
get |
|
get |
用于帮助在重新部署时检测机器人更改的编码字符串。 |
on |
通过使用当前对话或当前对话启动的对话,使用 |
构造函数详细信息
ComponentDialog(string)
属性详细信息
id
对话框的唯一 ID。 设置对话框的唯一 ID。
string id
属性值
string
对话框的 ID。
注解
如果未指定,则会自动生成此代码。
telemetryClient
设置遥测客户端,并将其应用于所有子对话。 添加到组件的未来对话也将继承此客户端。 获取当前的遥测客户端。
BotTelemetryClient telemetryClient
属性值
BotTelemetryClient
要用于日志记录的 BotTelemetryClient。
继承属性详细信息
dialogs
EndOfTurn
获取默认的轮次结束结果。
static EndOfTurn: DialogTurnResult
属性值
注解
此结果指示对话(或对话中的逻辑步骤)已完成当前轮次的处理,仍然处于活动状态,并且正在等待更多输入。
方法详细信息
addDialog(Dialog)
function addDialog(dialog: Dialog): this
参数
返回
this
操作完成后,ComponentDialog。
注解
添加到组件的第一个子元素的 Dialog.id 将分配给 initialDialogId 属性。
beginDialog(DialogContext, O)
启动对话并将其推送到父级对话堆栈时调用。 默认情况下,这会调用组件对话的初始对话(由 InitialDialogId 定义的 Dialog.BeginDialogAsync(DialogContext、object、CancellationToken)方法。 在派生类中重写此方法以实现中断逻辑。
function beginDialog(outerDC: DialogContext, options?: O): Promise<DialogTurnResult>
参数
- outerDC
- DialogContext
当前对话轮次的父 DialogContext。
- options
-
O
可选,要传递给对话框的初始信息。
返回
Promise<DialogTurnResult>
表示异步操作的 Promise。
注解
如果任务成功,则结果指示对话在对话框处理轮次后是否仍然处于活动状态。
continueDialog(DialogContext)
当对话框 继续时调用,该对话是活动对话,用户使用新的 活动进行答复。 如果此方法 未 重写,则当用户答复时,对话框会自动结束。
function continueDialog(outerDC: DialogContext): Promise<DialogTurnResult>
参数
- outerDC
- DialogContext
当前对话轮次的父 DialogContext。
返回
Promise<DialogTurnResult>
表示异步操作的 Promise。
注解
如果任务成功,则结果指示对话在对话框处理轮次后是否仍然处于活动状态。 结果还可能包含返回值。
createChildContext(DialogContext)
创建内部对话上下文
function createChildContext(outerDC: DialogContext): DialogContext
参数
- outerDC
- DialogContext
外部对话上下文
返回
创建的对话框上下文。
endDialog(TurnContext, DialogInstance, DialogReason)
对话框 结束时调用。
function endDialog(context: TurnContext, instance: DialogInstance, reason: DialogReason): Promise<void>
参数
- context
-
TurnContext
此轮次的 TurnContext 对象。
- instance
- DialogInstance
与此组件实例关联的状态信息 对话框 在其父对话堆栈上。
- reason
- DialogReason
对话框 结束的原因。
返回
Promise<void>
表示异步操作的 Promise。
注解
从父对话上下文调用此方法时,组件 Dialog 在结束之前取消其内部对话堆栈上的所有对话。
repromptDialog(TurnContext, DialogInstance)
当对话框应重新提示用户输入时调用。
function repromptDialog(context: TurnContext, instance: DialogInstance): Promise<void>
参数
- context
-
TurnContext
此轮次的 TurnContext 对象。
- instance
- DialogInstance
此对话框的状态信息。
返回
Promise<void>
表示异步操作的 Promise。
resumeDialog(DialogContext, DialogReason, any)
当父对话堆栈上的子对话完成此轮次时调用,并将控件返回到此对话组件。
function resumeDialog(outerDC: DialogContext, _reason: DialogReason, _result?: any): Promise<DialogTurnResult>
参数
- outerDC
- DialogContext
当前会话轮次的 DialogContext。
- _reason
- DialogReason
对话恢复的原因。
- _result
-
any
可选,从调用的对话框返回的值。 返回的值的类型取决于子对话。
返回
Promise<DialogTurnResult>
表示异步操作的 Promise。
注解
如果任务成功,则结果指示此对话在处理此对话轮次后是否仍然处于活动状态。 通常,子对话是从父上下文中调用 beginDialog(DialogContext, 对象)开始的。 但是,如果调用 DialogContext.replaceDialog(string, object) 方法,则逻辑子对话可能与原始对话不同。 如果此方法 未 重写,则当用户答复时,对话框会自动调用其 RepromptDialog(ITurnContext、DialogInstance)。
继承的方法详细信息
configure(Record<string, unknown>)
用于配置对象的 Fluent 方法。
function configure(config: Record<string, unknown>): this
参数
- config
-
Record<string, unknown>
要应用的配置设置。
返回
this
操作完成后 可配置。
findDialog(string)
查找以前添加到容器中的子对话。
function findDialog(dialogId: string): Dialog | undefined
参数
- dialogId
-
string
要查找的对话框的 ID。
返回
Dialog | undefined
如果找到对话框,则为对话框;否则为 null。
getConverter(string)
function getConverter(_property: string): Converter | ConverterFactory
参数
- _property
-
string
条件选择器配置的键。
返回
选择器配置的转换器。
getVersion()
用于帮助在重新部署时检测机器人更改的编码字符串。
function getVersion(): string
返回
string
唯一字符串,仅当对话发生更改时,才应以重启对话框的方式更改。
注解
这默认返回对话 ID,但可以重写以提供更精确的更改检测逻辑。 堆栈上具有其版本更改的任何对话框都将导致引发 versionChanged
事件。 如果机器人未处理此事件,将引发错误,从而导致运行机器人错误处理程序逻辑。
返回空字符串将一起禁用组件的版本跟踪。
onDialogEvent(DialogContext, DialogEvent)
通过使用当前对话或当前对话启动的对话,使用 DialogContext.emitEvent()
引发事件时调用。
function onDialogEvent(dc: DialogContext, e: DialogEvent): Promise<boolean>
参数
当前对话轮次的对话上下文。
正在引发的事件。
返回
Promise<boolean>
如此 如果事件由当前对话框处理,并且冒泡应停止。