ComponentDialog class

包含其他子對話之對話框的基類。

Extends

備註

元件對話框可讓您將 Bot 的邏輯分成可以新增為另一個 ComponentDialogDialogSet的元件。 元件也可以匯出為節點套件的一部分,並用於其他 Bot 中。

若要定義新的元件,請從 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;

然後,您可以將元件的新實例新增至另一個 DialogSetComponentDialog

const dialogs = new DialogSet(dialogState);
dialogs.add(new FillProfileDialog('fillProfile'));

建構函式

ComponentDialog(string)

建立 Dialog 類別的新實例。

屬性

id

對話框的唯一標識碼。 設定對話框的唯一標識符。

telemetryClient

設定遙測用戶端,並將它套用至所有子對話。 新增至元件的未來對話框也會繼承此用戶端。 取得目前的遙測用戶端。

繼承的屬性

dialogs

容器對話框集。

EndOfTurn

取得預設回合結束結果。

方法

addDialog(Dialog)

將子系 對話框 或提示新增至元件內部 DialogSet

beginDialog(DialogContext, O)

啟動對話框並推送至父代對話堆棧時呼叫。 根據預設,這會呼叫元件對話初始對話的 Dialog.BeginDialogAsync(DialogContext、object、CancellationToken) 方法,如 InitialDialogId 所定義。 覆寫衍生類別中的這個方法,以實作中斷邏輯。

continueDialog(DialogContext)

當對話框 繼續時呼叫,其中是使用中的對話框,而使用者會以新的 Activity回復。 如果此方法 覆寫,則當用戶回復時,對話框會自動結束。

createChildContext(DialogContext)

建立內部對話內容

endDialog(TurnContext, DialogInstance, DialogReason)

對話框 結束時呼叫。

repromptDialog(TurnContext, DialogInstance)

當對話框應該重新提示使用者輸入時呼叫。

resumeDialog(DialogContext, DialogReason, any)

當父代對話堆疊上的子對話完成這個回合時呼叫,將控制權傳回給這個對話元件。

繼承的方法

configure(Record<string, unknown>)

用於設定物件的 Fluent 方法。

findDialog(string)

尋找先前新增至容器的子對話。

getConverter(string)
getVersion()

編碼字串,用來協助在重新部署時偵測 Bot 變更。

onDialogEvent(DialogContext, DialogEvent)

使用 DialogContext.emitEvent()引發事件時,由目前對話框或目前對話框啟動的對話框呼叫。

建構函式詳細資料

ComponentDialog(string)

建立 Dialog 類別的新實例。

new ComponentDialog(dialogId?: string)

參數

dialogId

string

自選。 對話框的唯一標識碼。

屬性詳細資料

id

對話框的唯一標識碼。 設定對話框的唯一標識符。

string id

屬性值

string

對話框的識別碼。

備註

如果未指定,系統就會自動產生此專案。

telemetryClient

設定遙測用戶端,並將它套用至所有子對話。 新增至元件的未來對話框也會繼承此用戶端。 取得目前的遙測用戶端。

BotTelemetryClient telemetryClient

屬性值

BotTelemetryClient

要用於記錄的 BotTelemetryClient

繼承的屬性詳細資料

dialogs

容器對話框集。

dialogs: DialogSet

屬性值

繼承自DialogContainer.dialogs

EndOfTurn

取得預設回合結束結果。

static EndOfTurn: DialogTurnResult

屬性值

備註

此結果表示對話(或對話內的邏輯步驟)已完成目前回合的處理,仍在使用中,而且正在等候更多輸入。

繼承自Dialog.EndOfTurn

方法詳細資料

addDialog(Dialog)

將子系 對話框 或提示新增至元件內部 DialogSet

function addDialog(dialog: Dialog): this

參數

dialog
Dialog

對話框 或提示新增。

傳回

this

作業完成之後 ComponentDialog

備註

新增至元件的第一個子系 Dialog.id 會指派給 initialDialogId 屬性。

beginDialog(DialogContext, O)

啟動對話框並推送至父代對話堆棧時呼叫。 根據預設,這會呼叫元件對話初始對話的 Dialog.BeginDialogAsync(DialogContext、object、CancellationToken) 方法,如 InitialDialogId 所定義。 覆寫衍生類別中的這個方法,以實作中斷邏輯。

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

參數

outerDC
DialogContext

目前交談回合的父 DialogContext

options

O

要傳遞至對話框的選擇性初始資訊。

傳回

Promise<DialogTurnResult>

代表異步操作的 Promise。

備註

如果工作成功,結果會指出對話在對話框處理回合之後是否仍在使用中。

continueDialog(DialogContext)

當對話框 繼續時呼叫,其中是使用中的對話框,而使用者會以新的 Activity回復。 如果此方法 覆寫,則當用戶回復時,對話框會自動結束。

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, object) 開始。 不過,如果呼叫 DialogContext.replaceDialog(string, object) 方法,邏輯子對話可能會與原始對話不同。 如果此方法 覆寫,當用戶回復時,對話框會自動呼叫其 RepromptDialog(ITurnContext、DialogInstance)。

繼承的方法的詳細資料

configure(Record<string, unknown>)

用於設定物件的 Fluent 方法。

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

參數

config

Record<string, unknown>

要套用的組態設定。

傳回

this

作業完成之後 可設定

繼承自Configure.configure

findDialog(string)

尋找先前新增至容器的子對話。

function findDialog(dialogId: string): Dialog | undefined

參數

dialogId

string

要查閱之對話框的標識碼。

傳回

Dialog | undefined

如果找到對話框,則為 ;否則為 null。

繼承自DialogContainer.findDialog

getConverter(string)

function getConverter(_property: string): Converter | ConverterFactory

參數

_property

string

條件式選取器組態的索引鍵。

傳回

選取器組態的轉換器。

繼承自可設定.getConverter

getVersion()

編碼字串,用來協助在重新部署時偵測 Bot 變更。

function getVersion(): string

傳回

string

唯一的字串,只有在對話框以應該重新啟動對話框的方式變更時才會變更。

備註

這預設會傳回對話框 標識子,但可以覆寫以提供更精確的變更偵測邏輯。 堆疊上具有其版本變更的任何對話框都會引發 versionChanged 事件。 如果 Bot 未處理此事件,則會擲回錯誤,導致 Bot 錯誤處理程式邏輯正在執行。

傳回空字串將會一起停用元件的版本追蹤。

繼承自Dialog.getVersion

onDialogEvent(DialogContext, DialogEvent)

使用 DialogContext.emitEvent()引發事件時,由目前對話框或目前對話框啟動的對話框呼叫。

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

參數

dc
DialogContext

目前交談回合的對話內容。

e
DialogEvent

要引發的事件。

傳回

Promise<boolean>

True 是表示 如果事件是由目前的對話框處理,且反升應該停止。

繼承自DialogContainer.onDialogEvent