通过


Library class

用于路由目的的相关对话库。 库可以链接在一起,以便开发复杂的机器人。 UniversalBot 类本身是构成此链根的库。 可以通过创建新的库实例和向机器人添加对话来开发可重用部件库。 库应具有与库网站或 NPM 模块名称对应的唯一名称。 然后,机器人只需使用 UniversalBot.library()将部件库实例添加到机器人,即可重复使用库。 如果库本身依赖于其他库,则应使用 Library.library()将其作为依赖项添加到库中。 可以通过向库名称添加版本号轻松管理库的多个版本。

若要调用库机器人中的对话,需要调用 session.beginDialog(),其完全限定的对话 ID 格式为“:”。 通常,你将通过从其模块中公开启动对话框的函数来隐藏开发人员的此功能。 因此,像 myLib.someDialog(session, { arg: '' }); 这样的调用最终会在幕后调用 session.beginDialog('myLib:someDialog', args);

值得注意的是,对话始终在当前对话中调用,因此,一旦从库中的对话中调用,就不需要为每个 beginDialog() 添加前缀即可调用库名称。 仅当从一个库上下文交叉到另一个库上下文时,才需要包含库名称前缀。

构造函数

Library(string)

创建库的新实例。

属性

name

库唯一命名空间。 这用于解决库对话框和本地化提示。

RouteTypes

默认情况下,findRoutes()返回的 routeType 值。

方法

addRouteResult(IRouteResult, IRouteResult[])

从各种路由查找方法调用的帮助程序方法,用于管理向结果集添加候选路由。

  • 如果分数更大,则将返回新结果集中的当前最佳匹配项,只包含新匹配项。
  • 如果分数等于当前最佳匹配项,则会将其添加到现有集。
  • 如果分数小于当前最佳匹配项,则将被忽略。
beginDialogAction(string, string, IDialogActionOptions)

注册一个全局操作,该操作将在每次触发时启动另一个对话。 新对话框将推送到堆栈上,因此它不会自动结束任何当前任务。 新对话框结束后,将继续当前任务。 内置提示会在发生这种情况后自动重新提示用户,但通过在调用内置提示时设置 promptAfterAction 标志来禁用该行为。

bestRouteResult(IRouteResult[], IDialogState[], string)

查找在包含多个不明确路由的结果集中使用的最佳路由。 将使用以下消除歧义策略:

  1. :自定义路由类型是优先级最高的,首选路由类型。 这样,开发人员就可以以非常强大的方式替代机器人中的路由。
  2. ActiveDialog:活动对话框是下一个最高优先级。
  3. StackAction:堆栈操作是下一个最高优先级,将返回具有最深堆栈位置的操作。
  4. GlobalAction:全局操作是最低优先级。 如果 dialogStack 在堆栈最深的库中的操作中已过去,将受到青睐。 否则,将返回第一个。
clone(Library, string)

返回现有库的克隆。

customAction(IDialogActionOptions)

注册一个自定义全局操作,该操作将在触发时调用传入的 onSelectAction 处理程序。

dialog(string, Dialog | IDialogWaterfallStep[] | IDialogWaterfallStep, boolean)

从库注册或返回对话框。

endConversationAction(string, TextOrMessageType, ICancelActionOptions)

注册一个全局操作,该操作将在触发时结束与用户的聊天。

findActiveDialogRoutes(IRecognizeContext, (err: Error, routes: IRouteResult[]) => void, IDialogState[])

获取它理解当前消息的活动对话置信度。 对话框必须是当前库的成员,否则将返回分数 0.0。

findDialog(string, string)

在库及其所有依赖项中搜索特定对话框。 如果找到,则返回对话框,否则返回 null。

findGlobalActionRoutes(IRecognizeContext, (err: Error, routes: IRouteResult[]) => void)

搜索库以查看是否已触发任何全局操作。

findRoutes(IRecognizeContext, (err: Error, routes: IRouteResult[]) => void)

搜索候选路由以处理当前消息。 若要实际启动消息的处理,应使用返回的结果之一调用 selectRoute()。 可以使用 onFindRoute() 替代默认搜索逻辑,并且只搜索当前库,因此应单独调用层次结构中的每个库 findRoutes()

findStackActionRoutes(IRecognizeContext, (err: Error, routes: IRouteResult[]) => void, IDialogState[])

搜索会话对话框堆栈,查看是否已触发任何操作。

forEachDialog((dialog: Dialog, id: string) => void)

枚举所有库对话框。

forEachLibrary((library: Library) => void)

枚举所有库子库。 调用方应采取适当的步骤,以避免枚举层次结构时循环引用。 在大多数情况下,调用 libraryList() 是一个更好的选择,因为它已经包含用于避免周期的逻辑。

library(Library | string)

注册或返回库依赖项。

libraryList(boolean)

返回层次结构中唯一库的列表。 应在库层次结构的根目录上调用,并避免在两个子库引用同一依赖库时创建的周期。

localePath(string)

获取或设置包含其本地化提示的库“/locale/”文件夹的路径。 库的提示应存储在此路径下的“/locale/<IETF_TAG>/.json”文件中,其中“<IETF_TAG>”表示区域设置的 2-3 位数字语言 tage,“”是与库命名空间匹配的文件名。

onFindRoutes(IFindRoutesHandler)

findRoutes() 默认路由搜索逻辑替换为自定义实现。

onSelectRoute(ISelectRouteHandler)

selectRoute() 的默认逻辑替换为自定义实现。

recognize(IRecognizeContext, (err: Error, result: IIntentRecognizerResult) => void)

尝试使用库识别器将用户文本话语与意向匹配。 有关详细信息,请参阅 IIntentRecognizer.recognize()

recognizer(IIntentRecognizer)

将新的识别器插件添加到库。

selectActiveDialogRoute(Session, IRouteResult, IDialogState[])

将当前消息路由到活动对话。

selectGlobalActionRoute(Session, IRouteResult, IDialogState[])

将当前消息路由到触发的全局操作。

selectRoute(Session, IRouteResult)

使用所选路由触发当前消息的处理。 可以使用 onSelectRoute()替代默认逻辑。

selectStackActionRoute(Session, IRouteResult, IDialogState[])

将当前消息路由到触发的堆栈操作。

构造函数详细信息

Library(string)

创建库的新实例。

new Library(name: string)

参数

name

string

库的唯一命名空间。

属性详细信息

name

库唯一命名空间。 这用于解决库对话框和本地化提示。

name: string

属性值

string

RouteTypes

默认情况下,findRoutes()返回的 routeType 值。

static RouteTypes: Object

属性值

Object

方法详细信息

addRouteResult(IRouteResult, IRouteResult[])

从各种路由查找方法调用的帮助程序方法,用于管理向结果集添加候选路由。

  • 如果分数更大,则将返回新结果集中的当前最佳匹配项,只包含新匹配项。
  • 如果分数等于当前最佳匹配项,则会将其添加到现有集。
  • 如果分数小于当前最佳匹配项,则将被忽略。
static function addRouteResult(route: IRouteResult, current?: IRouteResult[])

参数

route
IRouteResult

要添加到集中的候选路由。

current

IRouteResult[]

(可选)结果集以添加路由。 如果缺少,则会返回仅包含路由的新集。

返回

beginDialogAction(string, string, IDialogActionOptions)

注册一个全局操作,该操作将在每次触发时启动另一个对话。 新对话框将推送到堆栈上,因此它不会自动结束任何当前任务。 新对话框结束后,将继续当前任务。 内置提示会在发生这种情况后自动重新提示用户,但通过在调用内置提示时设置 promptAfterAction 标志来禁用该行为。

function beginDialogAction(name: string, id: string, options?: IDialogActionOptions)

参数

name

string

用于分配操作的唯一名称。

id

string

要启动的对话框的 ID。

options
IDialogActionOptions

(可选)用于配置操作的选项。 如果指定 匹配,操作将侦听用户说出触发操作的单词或短语,否则需要使用 CardAction.dialogAction() 绑定到按钮以触发该操作。 还可以使用 dialogArgs 将其他参数传递给正在启动的对话。

返回

bestRouteResult(IRouteResult[], IDialogState[], string)

查找在包含多个不明确路由的结果集中使用的最佳路由。 将使用以下消除歧义策略:

  1. :自定义路由类型是优先级最高的,首选路由类型。 这样,开发人员就可以以非常强大的方式替代机器人中的路由。
  2. ActiveDialog:活动对话框是下一个最高优先级。
  3. StackAction:堆栈操作是下一个最高优先级,将返回具有最深堆栈位置的操作。
  4. GlobalAction:全局操作是最低优先级。 如果 dialogStack 在堆栈最深的库中的操作中已过去,将受到青睐。 否则,将返回第一个。
static function bestRouteResult(routes: IRouteResult[], dialogStack?: IDialogState[], rootLibraryName?: string)

参数

routes

IRouteResult[]

要筛选的候选路由数组。

dialogStack

IDialogState[]

(可选)对话框堆栈,用于确定要支持哪些库全局操作。

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

正在注册或检索的对话的唯一 ID。

dialog

Dialog | IDialogWaterfallStep[] | IDialogWaterfallStep

(可选)对话框或瀑布进行注册。

  • 对话框:{Dialog} - 要添加的对话。
  • 对话框:{IDialogWaterfallStep[]} - 要执行的步骤瀑布。 有关详细信息,请参阅 IDialogWaterfallStep
  • 对话框:{IDialogWaterfallStep} - 单步瀑布。 调用内置提示或启动新对话将导致当前对话在子提示/对话框完成时结束。
replace

boolean

(可选)如果为 true,则对话应替换现有对话(如果已注册)。

返回

endConversationAction(string, TextOrMessageType, ICancelActionOptions)

注册一个全局操作,该操作将在触发时结束与用户的聊天。

function endConversationAction(name: string, msg?: TextOrMessageType, options?: ICancelActionOptions)

参数

name

string

用于分配操作的唯一名称。

msg
TextOrMessageType

(可选)消息,用于在结束对话之前发送用户。

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

IDialogState[]

(可选)用于搜索的对话框堆栈。 默认行为是搜索当前对话堆栈的会话。

findDialog(string, string)

在库及其所有依赖项中搜索特定对话框。 如果找到,则返回对话框,否则返回 null。

function findDialog(libName: string, dialogId: string)

参数

libName

string

包含对话框的库的名称。

dialogId

string

库中对话框的唯一 ID。

返回

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

IDialogState[]

(可选)用于搜索的对话框堆栈。 默认行为是搜索当前对话堆栈的会话。

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,这意味着它将从根向下生成,根库将首先列出。

返回

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

从上一次调用返回的路由结果 findRoutes()findActiveDialogRoutes()

newStack

IDialogState[]

selectGlobalActionRoute(Session, IRouteResult, IDialogState[])

将当前消息路由到触发的全局操作。

function selectGlobalActionRoute(session: Session, route: IRouteResult, newStack?: IDialogState[])

参数

session
Session

当前会话的会话对象。

newStack

IDialogState[]

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

从上一次调用返回的路由结果 findRoutes()findStackActionRoutes()

newStack

IDialogState[]