Library class
用於路由之相關對話的連結庫。 連結庫可以鏈結在一起,以啟用複雜 Bot 的開發。 UniversalBot 類別本身是構成此鏈結根目錄的連結庫。 您可以藉由建立新的連結庫實例和新增對話框,來開發可重複使用元件的連結庫,就像您將一樣。 您的連結庫應該具有對應至連結庫網站或 NPM 模組名稱的唯一名稱。 接著,Bot 只要使用 UniversalBot.library(),將元件庫實例新增至其 Bot,即可重複使用您的連結庫。 如果您的連結庫本身相依於其他連結庫,您應該使用 Library.library() 將連結庫新增至連結庫作為相依性,。 您可以將版本號碼新增至連結庫名稱,輕鬆地管理連結庫的多個版本。
若要在連結庫 Bot 中叫用對話,則必須呼叫 session.beginDialog(),其格式為 ':' 的完整對話標識符。 您通常會藉由從其模塊公開函式來啟動對話,以隱藏開發人員的這個。
因此,呼叫類似 myLib.someDialog(session, { arg: '' }); 的東西最終會在幕後呼叫 session.beginDialog('myLib:someDialog', args);。
值得注意的是,對話一律會在目前的對話框中叫用,因此一旦您從連結庫的對話框內,就不需要在每個 beginDialog() 前面加上您的連結庫名稱。 只有在從某個連結庫內容到另一個連結庫內容時,才需要包含連結庫名稱前置詞。
建構函式
| Library(string) | 建立連結庫的新實例。 |
屬性
| name | 連結庫的唯一命名空間。 這是用來解決連結庫對話框和當地語系化提示。 |
| Route |
根據預設,從 findRoutes() findRoutes()傳回的 routeType 值。 |
方法
建構函式詳細資料
Library(string)
建立連結庫的新實例。
new Library(name: string)
參數
- name
-
string
連結庫的唯一命名空間。
屬性詳細資料
name
連結庫的唯一命名空間。 這是用來解決連結庫對話框和當地語系化提示。
name: string
屬性值
string
RouteTypes
方法詳細資料
addRouteResult(IRouteResult, IRouteResult[])
從各種路由尋找方法呼叫的協助程式方法,以管理將候選路由新增至結果集。
- 如果分數更大,則會傳回集合中目前最符合的新結果集,只包含新的相符專案。
- 如果分數等於目前的最佳比對,則會新增至現有的集合。
- 如果分數小於目前的最佳比對,則會忽略它。
static function addRouteResult(route: IRouteResult, current?: IRouteResult[])
參數
- route
- IRouteResult
要新增至集合的候選路由。
- current
(選擇性) 結果集也新增路由。 如果遺失,則會傳回只傳迴路由的新集合。
傳回
beginDialogAction(string, string, IDialogActionOptions)
註冊全域動作,每當觸發對話框時就會啟動另一個對話框。 新的對話框會推送至堆疊,因此不會自動結束任何目前的工作。 新的對話框結束時,將會繼續目前的工作。 內建提示會在發生此情況時自動重新提示使用者,但藉由在呼叫內建提示時設定 promptAfterAction 旗標,即可停用該行為。
function beginDialogAction(name: string, id: string, options?: IDialogActionOptions)
參數
- name
-
string
要指派動作的唯一名稱。
- id
-
string
要啟動之對話框的識別碼。
- options
- IDialogActionOptions
(選擇性) 用來設定動作的選項。 如果指定 符合,動作會接聽使用者說出觸發動作的單字或片語,否則動作必須使用 CardAction.dialogAction() 系結至按鈕以觸發動作。 您也可以使用 dialogArgs,將其他參數傳遞至正在啟動的對話方塊。
傳回
bestRouteResult(IRouteResult[], IDialogState[], string)
尋找在結果集中使用的最佳路由,其中包含多個模棱兩可的路由。 將會使用下列釐清策略:
- :自定義路由類型是最高優先順序,而且會優先使用。 這可讓開發人員以非常強大的方式覆寫 Bot 內的路由。
- ActiveDialog:使用中的對話框是下一個最高優先順序。
- StackAction:堆疊動作是下一個最高優先順序,且會傳回具有最深層堆棧位置的動作。
-
GlobalAction:全域動作是最低優先順序。 如果
dialogStack在堆疊最深的連結庫動作中已過去,則會受到青睞。 否則會傳回第一個 。
static function bestRouteResult(routes: IRouteResult[], dialogStack?: IDialogState[], rootLibraryName?: string)
參數
- routes
要篩選的候選路由陣列。
- dialogStack
(選擇性) 對話框堆疊,用來判斷要偏好哪些連結庫全域動作。
- rootLibraryName
-
string
(選擇性) 連結庫命名空間在釐清全域動作時偏好,而且堆疊上沒有對話框。
傳回
clone(Library, string)
傳回現有連結庫的複本。
function clone(copyTo?: Library, newName?: string)
參數
- copyTo
- Library
(選擇性) 實例,將目前的 物件複製到 。 如果遺失新的實例,將會建立。
- newName
-
string
(選擇性)如果指定傳回的複本將會重新命名為新的名稱。
傳回
customAction(IDialogActionOptions)
註冊自定義全域動作,以在觸發時呼叫傳入 onSelectAction 處理程式。
function customAction(options: IDialogActionOptions)
參數
- options
- IDialogActionOptions
用來設定動作的選項。 如果指定 符合,動作會接聽使用者說出觸發動作的單字或片語。 您可以使用 onFindAction提供自定義比對邏輯。
傳回
dialog(string, Dialog | IDialogWaterfallStep[] | IDialogWaterfallStep, boolean)
從連結庫註冊或傳回對話框。
function dialog(id: string, dialog?: Dialog | IDialogWaterfallStep[] | IDialogWaterfallStep, replace?: boolean)
參數
- id
-
string
要註冊或擷取之對話框的唯一標識碼。
- dialog
(選擇性) 對話框或瀑布式登錄。
- 對話框:{Dialog} - 要新增的對話框。
- 對話框:{IDialogWaterfallStep[]} - 要執行的步驟瀑布。 如需詳細資訊,請參閱 IDialogWaterfallStep。
- 對話框:{IDialogWaterfallStep} - 單一步驟瀑布圖。 呼叫內建提示或啟動新的對話框會導致目前對話框在子提示/對話框完成時結束。
- replace
-
boolean
(選擇性)如果為 true,則對話框應該在已註冊時取代現有的對話。
傳回
endConversationAction(string, TextOrMessageType, ICancelActionOptions)
註冊全域動作,以在觸發時結束與使用者的交談。
function endConversationAction(name: string, msg?: TextOrMessageType, options?: ICancelActionOptions)
參數
- name
-
string
要指派動作的唯一名稱。
(選擇性) 訊息,在結束交談之前傳送使用者。
- options
- ICancelActionOptions
(選擇性) 用來設定動作的選項。 如果指定 符合,動作會接聽使用者說出觸發動作的單字或片語,否則動作必須使用 CardAction.dialogAction() 系結至按鈕以觸發動作。
傳回
findActiveDialogRoutes(IRecognizeContext, (err: Error, routes: IRouteResult[]) => void, IDialogState[])
取得作用中對話框的信賴度,它瞭解目前的訊息。 對話框必須是目前連結庫的成員,否則會傳回0.0的分數。
function findActiveDialogRoutes(context: IRecognizeContext, callback: (err: Error, routes: IRouteResult[]) => void, dialogStack?: IDialogState[])
參數
- context
- IRecognizeContext
目前交談的唯讀辨識器內容。
- callback
-
(err: Error, routes: IRouteResult[]) => void
應該使用找到的路由叫用的函式。
- dialogStack
(選擇性) 對話框堆疊以搜尋。 默認行為是搜尋目前對話堆疊的會話。
findDialog(string, string)
搜尋連結庫及其所有相依性中是否有特定對話框。 如果找到,則傳回對話框,否則傳回 null。
function findDialog(libName: string, dialogId: string)
參數
- libName
-
string
包含對話框的連結庫名稱。
- dialogId
-
string
連結庫內對話框的唯一標識符。
傳回
findGlobalActionRoutes(IRecognizeContext, (err: Error, routes: IRouteResult[]) => void)
搜尋連結庫,以查看是否已觸發任何全域動作。
function findGlobalActionRoutes(context: IRecognizeContext, callback: (err: Error, routes: IRouteResult[]) => void)
參數
- context
- IRecognizeContext
目前交談的唯讀辨識器內容。
- callback
-
(err: Error, routes: IRouteResult[]) => void
應該使用找到的路由叫用的函式。
findRoutes(IRecognizeContext, (err: Error, routes: IRouteResult[]) => void)
搜尋候選路由以處理目前的訊息。 若要實際起始訊息的處理,您應該呼叫 selectRoute() 其中一個傳回的結果。
您可以使用 onFindRoute() 覆寫預設搜尋邏輯,而且只會搜尋目前的連結庫,因此您應該分別呼叫階層內每個連結庫 findRoutes()。
function findRoutes(context: IRecognizeContext, callback: (err: Error, routes: IRouteResult[]) => void)
參數
- context
- IRecognizeContext
目前交談的唯讀辨識器內容。
- callback
-
(err: Error, routes: IRouteResult[]) => void
應該使用找到的路由叫用的函式。
findStackActionRoutes(IRecognizeContext, (err: Error, routes: IRouteResult[]) => void, IDialogState[])
搜尋工作階段對話框堆疊,以查看是否已觸發任何動作。
function findStackActionRoutes(context: IRecognizeContext, callback: (err: Error, routes: IRouteResult[]) => void, dialogStack?: IDialogState[])
參數
- context
- IRecognizeContext
目前交談的唯讀辨識器內容。
- callback
-
(err: Error, routes: IRouteResult[]) => void
應該使用找到的路由叫用的函式。
- dialogStack
(選擇性) 對話框堆疊以搜尋。 默認行為是搜尋目前對話堆疊的會話。
forEachDialog((dialog: Dialog, id: string) => void)
列舉所有連結庫對話框。
function forEachDialog(callback: (dialog: Dialog, id: string) => void)
參數
- callback
-
(dialog: Dialog, id: string) => void
反覆運算器函式,以使用每個對話框呼叫。
forEachLibrary((library: Library) => void)
列舉所有連結庫子連結庫。 呼叫端應該採取適當的步驟,以避免列舉階層時循環參考。 在大部分情況下,呼叫 libraryList() 是較佳的選擇,因為它已經包含可避免迴圈的邏輯。
function forEachLibrary(callback: (library: Library) => void)
參數
- callback
-
(library: Library) => void
反覆運算器函式,以與每個子連結庫一起呼叫。
library(Library | string)
註冊或傳回連結庫相依性。
function library(lib: Library | string)
參數
- lib
-
Library | string
- 連結庫:{Library} - 要註冊為相依性的連結庫。
- 連結庫:{string} - 要查閱的連結庫唯一名稱。 也會搜尋所有相依性。
傳回
libraryList(boolean)
傳回階層內唯一連結庫的清單。 應該在連結庫階層的根目錄上呼叫,並避免在兩個子連結庫參考相同的相依連結庫時所建立的迴圈。
function libraryList(reverse?: boolean)
參數
- reverse
-
boolean
(選擇性)如果 true 清單會從樹葉產生,表示根庫最後會列出。 默認值為 false,表示它會從根目錄產生,而根庫會先列出。
傳回
Library[]
localePath(string)
取得或設定連結庫 「/locale/」 資料夾的路徑,其中包含其當地語系化提示。 連結庫的提示應該儲存在此路徑下的 “/locale/<IETF_TAG>/.json” 檔案中,其中 “<IETF_TAG>” 代表地區設定的 2-3 位數語言 tage,而 “” 是符合連結庫命名空間的檔名。
function localePath(path?: string)
參數
- path
-
string
(選擇性) 連結庫 「/locale/」 資料夾的路徑。 如果指定,這會更新連結庫路徑。
傳回
string
onFindRoutes(IFindRoutesHandler)
以自定義實作取代 findRoutes() 預設路由搜尋邏輯。
function onFindRoutes(handler: IFindRoutesHandler)
參數
- handler
- IFindRoutesHandler
每當針對連結庫呼叫 findRoutes() 時叫用的函式。
onSelectRoute(ISelectRouteHandler)
以自定義實作取代 selectRoute() 的預設邏輯。
function onSelectRoute(handler: ISelectRouteHandler)
參數
- handler
- ISelectRouteHandler
呼叫 selectRoute() 時叫用的函式。
recognize(IRecognizeContext, (err: Error, result: IIntentRecognizerResult) => void)
嘗試使用連結庫辨識器,比對用戶文字語句與意圖。 如需詳細資訊,請參閱 IIntentRecognizer.recognize()。
function recognize(context: IRecognizeContext, callback: (err: Error, result: IIntentRecognizerResult) => void)
參數
- context
- IRecognizeContext
目前交談的唯讀辨識器內容。
- callback
-
(err: Error, result: IIntentRecognizerResult) => void
完成辨識時應叫用的函式。
recognizer(IIntentRecognizer)
將新的辨識器外掛程式新增至連結庫。
function recognizer(plugin: IIntentRecognizer)
參數
- plugin
- IIntentRecognizer
要加入的辨識器。
傳回
selectActiveDialogRoute(Session, IRouteResult, IDialogState[])
將目前訊息路由傳送至使用中的對話框。
function selectActiveDialogRoute(session: Session, route: IRouteResult, newStack?: IDialogState[])
參數
- session
- Session
目前交談的會話物件。
- route
- IRouteResult
- newStack
selectGlobalActionRoute(Session, IRouteResult, IDialogState[])
將目前訊息路由傳送至觸發的全域動作。
function selectGlobalActionRoute(session: Session, route: IRouteResult, newStack?: IDialogState[])
參數
- session
- Session
目前交談的會話物件。
- route
- IRouteResult
從先前呼叫 傳回給 findRoutes() 或 findGlobalActionRoutes()的路由結果。
- newStack
selectRoute(Session, IRouteResult)
使用選取的路由觸發目前訊息的處理。 您可以使用 onSelectRoute()覆寫默認邏輯。
function selectRoute(session: Session, route: IRouteResult)
參數
- session
- Session
目前交談的會話物件。
- route
- IRouteResult
從先前呼叫傳回的路由結果,findRoutes()。
selectStackActionRoute(Session, IRouteResult, IDialogState[])
將目前的訊息路由傳送至觸發的堆疊動作。
function selectStackActionRoute(session: Session, route: IRouteResult, newStack?: IDialogState[])
參數
- session
- Session
目前交談的會話物件。
- route
- IRouteResult
- newStack