DialogSet class

一组可以相互调用的相关对话。

注解

对话集的构造函数应传递一个状态属性,该属性将用于保存集的对话框堆栈:

const { ConversationState, MemoryStorage, ActivityTypes } = require('botbuilder');
const { DialogSet, Dialog, DialogTurnStatus } = require('botbuilder-dialogs');

const convoState = new ConversationState(new MemoryStorage());
const dialogState = convoState.createProperty('dialogState');
const dialogs = new DialogSet(dialogState);

机器人可以使用 add() 方法向集添加对话框或提示:

class GreetingDialog extends Dialog {
    async beginDialog(dc, options) {
        await dc.context.sendActivity(`Hi! I'm a bot.`);
        return await dc.endDialog();
    }
}

dialogs.add(new GreetingDialog('greeting'));

若要与集对话进行交互,可以调用 createContext() 与当前 TurnContext。 这将创建一个可用于启动或继续执行集对话框的 DialogContext

// Create DialogContext for the current turn
const dc = await dialogs.createContext(turnContext);

// Try to continue executing an active multi-turn dialog
const result = await dc.continueDialog();

// Send greeting if no other dialogs active
if (result.status == DialogTurnStatus.empty && dc.context.activity.type == ActivityTypes.Message) {
    await dc.beginDialog('greeting');
}

构造函数

DialogSet(StatePropertyAccessor<DialogState>)

创建新的 DialogSet 实例。

属性

telemetryClient

设置此对话框集的遥测客户端,并将其应用到所有当前对话。 设置此对话框集的遥测客户端,并将其应用到所有当前对话。 添加到集中的未来对话也将继承此客户端。

方法

add<T>(T)

将新的对话框或提示添加到集。

createContext(TurnContext)

创建可用于处理集中对话的对话框上下文。

find(string)

使用 add()查找以前添加到集中的对话框。

getDialogs()

获取集的对话框。

getVersion()

返回集中所有 Dialog.version 值的 32 位哈希。

构造函数详细信息

DialogSet(StatePropertyAccessor<DialogState>)

创建新的 DialogSet 实例。

new DialogSet(dialogState?: StatePropertyAccessor<DialogState>)

参数

dialogState

StatePropertyAccessor<DialogState>

(可选)用于保存设置对话框堆栈的状态属性。

注解

如果未传入 dialogState 属性,则调用 createContext() 将返回错误。 需要手动为集创建 DialogContext,并传入自己的状态对象来保存集对话框堆栈:

const dc = new DialogContext(dialogs, turnContext, state);

属性详细信息

telemetryClient

设置此对话框集的遥测客户端,并将其应用到所有当前对话。 设置此对话框集的遥测客户端,并将其应用到所有当前对话。 添加到集中的未来对话也将继承此客户端。

BotTelemetryClient telemetryClient

属性值

BotTelemetryClient

要用于日志记录的 BotTelemetryClient

方法详细信息

add<T>(T)

将新的对话框或提示添加到集。

function add<T>(dialog: T): this

参数

dialog

T

要添加的对话或提示。 如果对话集中存在 telemetryClient,则会将其添加到每个对话。

返回

this

作完成后设置的对话。

注解

如果正在添加的 Dialog.id 已存在于集中,对话 ID 将更新为包含一个后缀,使其唯一。 因此,向集中添加 2 个名为“duplicate”的对话框将导致第一个对话框的 ID 为“duplicate”,第二个对话框的 ID 为“duplicate2”。

createContext(TurnContext)

创建可用于处理集中对话的对话框上下文。

function createContext(context: TurnContext): Promise<DialogContext>

参数

context

TurnContext

与用户的当前会话轮次的上下文。

返回

Promise<DialogContext>

表示异步作的 promise。

find(string)

使用 add()查找以前添加到集中的对话框。

function find(dialogId: string): Dialog | undefined

参数

dialogId

string

要查找的对话框或提示的 ID。

返回

Dialog | undefined

如果找到,则为对话框;否则为未定义。

注解

此示例查找名为“greeting”的对话框:

const dialog = dialogs.find('greeting');

getDialogs()

获取集的对话框。

function getDialogs(): Dialog[]

返回

Dialog[]

Dialog数组。

getVersion()

返回集中所有 Dialog.version 值的 32 位哈希。

function getVersion(): string

返回

string

当任何子对话版本发生更改时,将更改的版本。

注解

此哈希持久保存到状态存储中,用于检测对对话框集的更改。