WaterfallDialog class

瀑布式对话是经过优化的对话框,可提示用户提出一系列问题。

Extends

Dialog<O>

注解

瀑布图接受将按顺序执行的函数堆栈。 每个瀑布步骤都可以询问用户的问题,用户的响应将通过 传递到瀑布 step.result中的下一步。 可以使用特殊 step.value 对象在步骤之间保留值:

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;

构造函数

WaterfallDialog(string, WaterfallStep<O>[])

创建包含给定步骤数组的新瀑布对话。

属性

id

对话的唯一 ID。 设置对话的唯一 ID。

telemetryClient

获取此对话框的遥测客户端。 设置此对话框的遥测客户端。

继承属性

EndOfTurn

获取默认的轮次结束结果。

方法

addStep(WaterfallStep<O>)

将新步骤添加到瀑布图。

beginDialog(DialogContext, O)

WaterfallDialog 启动并推送到对话堆栈时调用。

continueDialog(DialogContext)

瀑布对话继续时调用,其中它是活动对话,用户使用新活动进行答复。

endDialog(TurnContext, DialogInstance, DialogReason)

在对话结束时调用。

getVersion()

获取由 ID 和步骤数组成的对话版本。

resumeDialog(DialogContext, DialogReason, any)

当子 WaterfallDialog 完成其轮次时调用,将控件返回到此对话框。

继承的方法

configure(Record<string, unknown>)

用于配置 对象的 Fluent 方法。

getConverter(string)
onDialogEvent(DialogContext, DialogEvent)

在引发事件时调用,使用 DialogContext.emitEvent()由当前对话或当前对话启动的对话调用。

repromptDialog(TurnContext, DialogInstance)

在派生类中重写时,将重新调用用户作为输入。

构造函数详细信息

WaterfallDialog(string, WaterfallStep<O>[])

创建包含给定步骤数组的新瀑布对话。

new WaterfallDialog(dialogId: string, steps?: WaterfallStep<O>[])

参数

dialogId

string

组件中对话框的唯一 ID 或设置其要添加到的 ID。

steps

WaterfallStep<O>[]

(异步瀑布步骤函数的可选) 数组。

注解

有关创建有效步骤函数的详细信息,请参阅 addStep () 函数。

属性详细信息

id

对话的唯一 ID。 设置对话的唯一 ID。

string id

属性值

string

对话框的 ID。

注解

如果未指定,将自动生成此参数。

telemetryClient

获取此对话框的遥测客户端。 设置此对话框的遥测客户端。

BotTelemetryClient telemetryClient

属性值

BotTelemetryClient

用于日志记录 的 BotTelemetryClient

继承属性详细信息

EndOfTurn

获取默认的轮次结束结果。

static EndOfTurn: DialogTurnResult

属性值

注解

此结果指示对话 (或对话中的逻辑步骤) 已完成当前轮次的处理,仍处于活动状态,并且正在等待更多输入。

继承自Dialog.EndOfTurn

方法详细信息

addStep(WaterfallStep<O>)

将新步骤添加到瀑布图。

function addStep(step: WaterfallStep<O>): this

参数

step

WaterfallStep<O>

要调用的异步步骤函数。

返回

this

用于对 的流畅调用的 addStep()瀑布对话。

注解

所有步骤函数都应是异步的,并返回 DialogTurnResultWaterfallStepContext传入函数的 派生自 DialogContext 并包含许多堆栈操作方法,这些方法返回 ,DialogTurnResult因此通常只需从调用的 DialogContext 方法返回结果。

步骤函数本身可以是异步闭包:

const helloDialog = new WaterfallDialog('hello');

helloDialog.addStep(async (step) => {
    await step.context.sendActivity(`Hello World!`);
    return await step.endDialog();
});

命名异步函数:

async function helloWorldStep(step) {
    await step.context.sendActivity(`Hello World!`);
    return await step.endDialog();
}

helloDialog.addStep(helloWorldStep);

或已绑定到其 this 指针的类方法:

helloDialog.addStep(this.helloWorldStep.bind(this));

beginDialog(DialogContext, O)

WaterfallDialog 启动并推送到对话堆栈时调用。

function beginDialog(dc: DialogContext, options?: O): Promise<DialogTurnResult>

参数

dc
DialogContext

对话当前轮次的 DialogContext

options

O

要传递到 对话框的可选初始信息。

返回

Promise<DialogTurnResult>

表示异步操作的 Promise。

注解

如果任务成功,则结果指示 对话框 在对话处理轮次后是否仍然处于活动状态。

continueDialog(DialogContext)

瀑布对话继续时调用,其中它是活动对话,用户使用新活动进行答复。

function continueDialog(dc: DialogContext): Promise<DialogTurnResult>

参数

dc
DialogContext

对话当前轮次的 DialogContext

返回

Promise<DialogTurnResult>

表示异步操作的 Promise。

注解

如果任务成功,则结果指示对话在对话处理轮次后是否仍然处于活动状态。 结果还可能包含返回值。

endDialog(TurnContext, DialogInstance, DialogReason)

在对话结束时调用。

function endDialog(context: TurnContext, instance: DialogInstance, reason: DialogReason): Promise<void>

参数

context

TurnContext

当前会话轮次的上下文。

instance
DialogInstance

当前对话框的实例。

reason
DialogReason

对话结束的原因。

返回

Promise<void>

getVersion()

获取由 ID 和步骤数组成的对话版本。

function getVersion(): string

返回

string

对话框版本,由 ID 和步骤数组成。

resumeDialog(DialogContext, DialogReason, any)

当子 WaterfallDialog 完成其轮次时调用,将控件返回到此对话框。

function resumeDialog(dc: DialogContext, reason: DialogReason, result?: any): Promise<DialogTurnResult>

参数

dc
DialogContext

对话当前轮次的 DialogContext

reason
DialogReason

(xref:botbuilder-dialogs。DialogReason) 对话恢复的原因。

result

any

可选,从调用的对话框返回的值。 返回的值的类型取决于子对话。

返回

Promise<DialogTurnResult>

表示异步操作的 Promise。

继承的方法详细信息

configure(Record<string, unknown>)

用于配置 对象的 Fluent 方法。

function configure(config: Record<string, unknown>): this

参数

config

Record<string, unknown>

要应用的配置设置。

返回

this

操作完成后可配置的 。

继承自Configure.configure

getConverter(string)

function getConverter(_property: string): Converter | ConverterFactory

参数

_property

string

条件选择器配置的键。

返回

选择器配置的转换器。

继承自可配置.getConverter

onDialogEvent(DialogContext, DialogEvent)

在引发事件时调用,使用 DialogContext.emitEvent()由当前对话或当前对话启动的对话调用。

function onDialogEvent(dc: DialogContext, e: DialogEvent): Promise<boolean>

参数

dc
DialogContext

当前会话轮次的对话上下文。

e
DialogEvent

正在引发的事件。

返回

Promise<boolean>

如此 如果事件由当前对话框处理,并且浮泡应停止。

继承自Dialog.onDialogEvent

repromptDialog(TurnContext, DialogInstance)

在派生类中重写时,将重新调用用户作为输入。

function repromptDialog(_context: TurnContext, _instance: DialogInstance): Promise<void>

参数

_context

TurnContext

轮次的上下文对象。

_instance
DialogInstance

此对话框的当前状态信息。

返回

Promise<void>

注解

支持验证和重新提示逻辑的派生对话应重写此方法。 默认情况下,此方法不起作用。

当当前对话应重新请求用户输入时, DialogContext 将调用此方法。 此方法是针对提示对话实现的。

另请参阅

继承自Dialog.repromptDialog