ComponentDialog class
包含其他子對話之對話框的基類。
- Extends
備註
元件對話框可讓您將 Bot 的邏輯分成可以新增為另一個 ComponentDialog 或 DialogSet的元件。 元件也可以匯出為節點套件的一部分,並用於其他 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;
然後,您可以將元件的新實例新增至另一個 DialogSet 或 ComponentDialog:
const dialogs = new DialogSet(dialogState);
dialogs.add(new FillProfileDialog('fillProfile'));
建構函式
| Component |
建立 Dialog 類別的新實例。 |
屬性
| id | 對話框的唯一標識碼。 設定對話框的唯一標識符。 |
| telemetry |
設定遙測用戶端,並將它套用至所有子對話。 新增至元件的未來對話框也會繼承此用戶端。 取得目前的遙測用戶端。 |
方法
| add |
|
| begin |
啟動對話框並推送至父代對話堆棧時呼叫。 根據預設,這會呼叫元件對話初始對話的 Dialog.BeginDialogAsync(DialogContext、object、CancellationToken) 方法,如 InitialDialogId 所定義。 覆寫衍生類別中的這個方法,以實作中斷邏輯。 |
| continue |
當對話框 繼續時呼叫,其中是使用中的對話框,而使用者會以新的 Activity回復。 如果此方法 未 覆寫,則當用戶回復時,對話框會自動結束。 |
| create |
建立內部對話內容 |
| end |
當 對話框 結束時呼叫。 |
| reprompt |
當對話框應該重新提示使用者輸入時呼叫。 |
| resume |
當父代對話堆疊上的子對話完成這個回合時呼叫,將控制權傳回給這個對話元件。 |
繼承的方法
| configure(Record<string, unknown>) | 用於設定物件的 Fluent 方法。 |
| find |
尋找先前新增至容器的子對話。 |
| get |
|
| get |
編碼字串,用來協助在重新部署時偵測 Bot 變更。 |
| on |
使用 |
建構函式詳細資料
ComponentDialog(string)
屬性詳細資料
id
對話框的唯一標識碼。 設定對話框的唯一標識符。
string id
屬性值
string
對話框的識別碼。
備註
如果未指定,系統就會自動產生此專案。
telemetryClient
設定遙測用戶端,並將它套用至所有子對話。 新增至元件的未來對話框也會繼承此用戶端。 取得目前的遙測用戶端。
BotTelemetryClient telemetryClient
屬性值
BotTelemetryClient
要用於記錄的 BotTelemetryClient。
繼承的屬性詳細資料
dialogs
EndOfTurn
取得預設回合結束結果。
static EndOfTurn: DialogTurnResult
屬性值
備註
此結果表示對話(或對話內的邏輯步驟)已完成目前回合的處理,仍在使用中,而且正在等候更多輸入。
方法詳細資料
addDialog(Dialog)
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
作業完成之後 可設定。
findDialog(string)
尋找先前新增至容器的子對話。
function findDialog(dialogId: string): Dialog | undefined
參數
- dialogId
-
string
要查閱之對話框的標識碼。
傳回
Dialog | undefined
如果找到對話框,則為 ;否則為 null。
getConverter(string)
function getConverter(_property: string): Converter | ConverterFactory
參數
- _property
-
string
條件式選取器組態的索引鍵。
傳回
選取器組態的轉換器。
getVersion()
編碼字串,用來協助在重新部署時偵測 Bot 變更。
function getVersion(): string
傳回
string
唯一的字串,只有在對話框以應該重新啟動對話框的方式變更時才會變更。
備註
這預設會傳回對話框 標識子,但可以覆寫以提供更精確的變更偵測邏輯。 堆疊上具有其版本變更的任何對話框都會引發 versionChanged 事件。 如果 Bot 未處理此事件,則會擲回錯誤,導致 Bot 錯誤處理程式邏輯正在執行。
傳回空字串將會一起停用元件的版本追蹤。
onDialogEvent(DialogContext, DialogEvent)
使用 DialogContext.emitEvent()引發事件時,由目前對話框或目前對話框啟動的對話框呼叫。
function onDialogEvent(dc: DialogContext, e: DialogEvent): Promise<boolean>
參數
目前交談回合的對話內容。
要引發的事件。
傳回
Promise<boolean>
True 是表示 如果事件是由目前的對話框處理,且反升應該停止。