Prompt class

内置提示的基类,可用于生成新的自定义提示。 Prompt 类提供提示/重新提示用户的基本逻辑,并提供一组可扩展挂钩来自定义用户回复的提示识别以及发送给用户的输出。 提示应始终至少注册一个 onRecognize() 处理程序,它们支持添加任意数量的 匹配项()matchesAny() 处理程序,这些处理程序可用于向提示添加特殊用户发起的命令。 例如,内置提示会添加一个 matches('BotBuilder.RepeatIntent') 来侦听用户要求重复提示,导致提示再次发送其初始提示。

扩展

构造函数

Prompt(IPromptFeatures)

创建提示的新可自定义实例。 新的提示应作为对话框添加到机器人或库。

属性

features

提示当前配置的功能集。

方法

addDialogTrigger(ActionSet, string)

为库中的每个对话调用一次,使对话有机会将其 triggerAction() 添加到库全局操作集。 这些触发器映射到满足触发器条件时启动对话框的 beginDialogAction()

begin<T>(Session, T)

启动新的对话会话时调用。

beginDialogAction(string, string, IBeginDialogActionOptions)

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

cancelAction(string, TextOrMessageType, ICancelActionOptions)

将操作绑定到将在每次触发对话时取消该对话的对话框。 取消后,将恢复对话父级,恢复 代码,指示 已取消

clone(ActionSet)

返回现有 ActionSet 的克隆。

customAction(IDialogActionOptions)

将自定义操作绑定到将在触发时调用传入的 onSelectAction 处理程序的对话框。

dialogInterrupted(Session, string, any)

当根对话被另一个对话中断时调用。 这样,对话框就有机会在从堆栈中删除自定义逻辑之前运行自定义逻辑。 对话本身负责清除对话堆栈并启动新对话。

dialogResumed<T>(Session, IDialogResult<T>)

子对话已结束,当前对话正在恢复。

endConversationAction(string, TextOrMessageType, ICancelActionOptions)

绑定一个操作,该操作将在触发时结束与用户的会话。

findActionRoutes(IRecognizeDialogContext, (err: Error, results: IRouteResult[]) => void)

Library.findRoutes() 期间调用 堆栈上每个对话的调用,以确定用户话语是否触发了任何对话操作。

formatMessage(Session, TextType, TextType, (err: Error, msg: IMessage) => void)

创建要为提示发送的消息。 这由 sendPrompt() 自动调用,因此在大多数情况下,需要注册 onFormatMessage() 处理程序来自定义为提示发送的消息。 仅当实现自己的 sendPrompt() 逻辑时,才应调用此方法。

gettext(Session, TextType, string)

返回使用提示调用方命名空间本地化的提示的文本。

matches(RegExp | string, string | IDialogWaterfallStep[] | IDialogWaterfallStep, any)

在用户话语中检测到给定意向时调用处理程序。 对于基于 string 的意向,该意向可以是 识别器()返回的意向, 为提示注册,也可以是从全局 识别器()流入的意向。

注意: 匹配的完整详细信息(包括检测到的意向列表 & 实体)将传递给启动的第一个瀑布步骤或对话 参数

matchesAny(RegExp[] | string[], string | IDialogWaterfallStep[] | IDialogWaterfallStep, any)

在用户话语中检测到任何给定意向时,调用处理程序。 对于基于 string 的意向,该意向可以是 识别器()返回的意向, 为提示注册,也可以是从全局 识别器()流入的意向。

注意: 匹配的完整详细信息(包括检测到的意向列表 & 实体)将传递给启动的第一个瀑布步骤或对话 参数

onFormatMessage((session: Session, text: TextType, speak: TextType, callback: (err: Error, message?: IMessage) => void) => void)

注册一个处理程序,该处理程序将调用以创建要为提示发送的传出 IMessage。 仅当当前提示/retryPrompt 的类型为 string|string[]时,才会调用此处理程序。 只要提示/retryPrompt 是 IMessage|IIsMessage 使用配置的消息,就不会调用处理程序。 可以注册多个处理程序,并使用消息调用 callback() 的第一个处理程序。 调用 callback(null, null) 将导致处理移动到链中的下一个处理程序。

onPrompt((session: Session, next: Function) => void)

注册每次提示要向用户发送消息时都会调用的处理程序。 可以使用此挂钩实现自己的自定义提示发送逻辑。 可以注册多个处理程序,并调用 next() 将调用链中的下一个处理程序。 最后一个处理程序执行提示默认逻辑,即使用 formatMessage() 创建新消息,然后将其发送。

onRecognize((context: IRecognizeDialogContext, callback: (err: Error, score: number, response?: any) => void) => void)

注册一个处理程序,该处理程序将在每次提示收到用户的答复时调用。 callback() 处理程序可用于返回一个置信度分数,它理解用户输入以及应返回到提示调用方的值。 呼叫 callback(null, 1.0, true); 表示用户回答提示,并将返回 true 作为提示的响应 boolean 的置信度。 任何响应类型都是可能的,包括对象。 调用 callback(null, 0.0); 表示用户输入根本无法理解,并且应重新提示用户输入。

可以注册多个处理程序,与其他处理程序类型不同,将调用所有已注册的处理程序,并会选择提供最高置信度分数的处理程序作为获胜者。 自定义其中一种内置提示类型时,通常需要禁用提示默认识别器逻辑。 可以通过在创建提示时设置提示 功能来实现此目的。 请记住,如果完全禁用提示默认识别器逻辑,则需要自行执行所有识别。

recognize(IRecognizeDialogContext, (err: Error, result: IRecognizeResult) => void)

分析用户话语,并分配 0.0 - 1.0 的分数,指示对话理解用户话语的自信程度。 始终为堆栈上的活动对话框调用此方法。 分数为 1.0 表示完美匹配并终止任何进一步识别。 当评分小于 1.0 时,堆栈上的每个对话都将调用其 recognizeAction() 方法,以查看是否有任何已命名操作绑定到对话,以便更好地匹配用户话语。 还将评估在机器人级别注册的全局操作。 如果对话框的分数更高,则任何绑定操作都会调用 dialogs replyReceived() 方法,并将使用从 recognize() 调用返回的结果对象调用。 这样,对话框就可以将识别阶段收集的其他数据传递给 replyReceived() 方法进行处理。

如果某个操作的分数较高,则会调用该操作的对话框,而不是 dialogs replyReceived() 方法。 对话将保留在堆栈上,如果操作调用新对话,可能会在某些时候恢复,因此对话应为 dialogResumed()的意外调用做好准备。

recognizer(IIntentRecognizer)

将新的识别器插件添加到提示,每次用户回复提示时都会运行该插件。

reloadAction(string, TextOrMessageType, IBeginDialogActionOptions)

将操作绑定到对话,该操作将导致对话在触发时重新加载。 这可用于实现处理用户话语(如“开始”)的逻辑。

replyReceived(Session, IRecognizeResult)

处理从用户收到的消息。 由对话框系统调用。

selectActionRoute(Session, IRouteResult)

为话语选择具有最高置信度分数的路由。

sendPrompt(Session)

向用户发送当前轮次的提示。 可以从 [matches()][#matches] 处理程序调用此操作,以手动向用户发送提示/重新提示。 若要强制发送初始提示,需要在调用 session.dialogData.turns = 0;之前设置 sendPrompt()

triggerAction(ITriggerActionOptions)

将操作绑定到对话,该对话将在每次触发时将其设置为活动对话。 默认行为是通过清除堆栈并在堆栈根处启动对话来插插任何现有对话。 中断的对话可以通过将自定义 onInterrupted 处理程序添加到其触发器操作选项来截获此中断。 此外,还可以通过向触发器操作选项提供自定义 onSelectAction 处理程序来自定义触发对话框的启动方式。

构造函数详细信息

Prompt(IPromptFeatures)

创建提示的新可自定义实例。 新的提示应作为对话框添加到机器人或库。

new Prompt(features?: IPromptFeatures)

参数

features
IPromptFeatures

(可选)用于自定义提示行为的功能。

属性详细信息

features

提示当前配置的功能集。

public features: T

属性值

T

方法详细信息

addDialogTrigger(ActionSet, string)

为库中的每个对话调用一次,使对话有机会将其 triggerAction() 添加到库全局操作集。 这些触发器映射到满足触发器条件时启动对话框的 beginDialogAction()

function addDialogTrigger(actions: ActionSet, dialogId: string)

参数

actions
ActionSet

库全局操作集。

dialogId

string

要触发的对话框的完全限定 ID。

begin<T>(Session, T)

启动新的对话会话时调用。

function begin<T>(session: Session, args?: T)

参数

session
Session

当前会话的会话对象。

args

T

(可选)由其父级传递给对话框的参数。

beginDialogAction(string, string, IBeginDialogActionOptions)

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

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

参数

name

string

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

id

string

要启动的对话框的 ID。

options
IBeginDialogActionOptions

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

返回

cancelAction(string, TextOrMessageType, ICancelActionOptions)

将操作绑定到将在每次触发对话时取消该对话的对话框。 取消后,将恢复对话父级,恢复 代码,指示 已取消

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

参数

name

string

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

msg
TextOrMessageType

(可选)在取消对话框之前发送用户的消息。

options
ICancelActionOptions

(可选)用于配置操作的选项。 如果指定 匹配,操作将侦听用户说出触发操作的单词或短语,否则需要使用 CardAction.dialogAction() 绑定到按钮以触发该操作。

返回

clone(ActionSet)

返回现有 ActionSet 的克隆。

function clone(copyTo?: ActionSet)

参数

copyTo
ActionSet

(可选)要将当前对象复制到的实例。 如果缺少新实例,则会创建。

返回

customAction(IDialogActionOptions)

将自定义操作绑定到将在触发时调用传入的 onSelectAction 处理程序的对话框。

function customAction(options: IDialogActionOptions)

参数

options
IDialogActionOptions

用于配置操作的选项。 如果指定 匹配,该操作将侦听用户说出触发操作的单词或短语。 可以使用 onFindAction提供自定义匹配逻辑。

返回

dialogInterrupted(Session, string, any)

当根对话被另一个对话中断时调用。 这样,对话框就有机会在从堆栈中删除自定义逻辑之前运行自定义逻辑。 对话本身负责清除对话堆栈并启动新对话。

function dialogInterrupted(session: Session, dialogId: string, dialogArgs: any)

参数

session
Session

当前会话的会话对象。

dialogId

string

应启动的对话框的 ID。

dialogArgs

any

应传递给新对话框的参数。

dialogResumed<T>(Session, IDialogResult<T>)

子对话已结束,当前对话正在恢复。

function dialogResumed<T>(session: Session, result: IDialogResult<T>)

参数

session
Session

当前会话的会话对象。

result

IDialogResult<T>

子对话返回的结果。

endConversationAction(string, TextOrMessageType, ICancelActionOptions)

绑定一个操作,该操作将在触发时结束与用户的会话。

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

参数

name

string

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

msg
TextOrMessageType

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

options
ICancelActionOptions

(可选)用于配置操作的选项。 如果指定 匹配,操作将侦听用户说出触发操作的单词或短语,否则需要使用 CardAction.dialogAction() 绑定到按钮以触发该操作。

返回

findActionRoutes(IRecognizeDialogContext, (err: Error, results: IRouteResult[]) => void)

Library.findRoutes() 期间调用 堆栈上每个对话的调用,以确定用户话语是否触发了任何对话操作。

function findActionRoutes(context: IRecognizeDialogContext, callback: (err: Error, results: IRouteResult[]) => void)

参数

context
IRecognizeDialogContext

传入消息的上下文以及评估的对话的 dialogData

callback

(err: Error, results: IRouteResult[]) => void

用于使用最候选路由调用的函数。。

formatMessage(Session, TextType, TextType, (err: Error, msg: IMessage) => void)

创建要为提示发送的消息。 这由 sendPrompt() 自动调用,因此在大多数情况下,需要注册 onFormatMessage() 处理程序来自定义为提示发送的消息。 仅当实现自己的 sendPrompt() 逻辑时,才应调用此方法。

function formatMessage(session: Session, text: TextType, speak: TextType, callback: (err: Error, msg: IMessage) => void)

参数

session
Session

当前会话的会话对象。

text
TextType

当前提示/retryPrompt 文本。

speak
TextType

当前说话/重试 SSpeak SSML。 此值可能为 null。

callback

(err: Error, msg: IMessage) => void

用于接收已创建消息的函数。

gettext(Session, TextType, string)

返回使用提示调用方命名空间本地化的提示的文本。

static function gettext(session: Session, text: TextType, namespace?: string)

参数

session
Session

会话的当前会话。

text
TextType

提示进行本地化。

namespace

string

(可选)用于本地化提示的库命名空间。 默认情况下,将使用提示调用方命名空间。

返回

string

matches(RegExp | string, string | IDialogWaterfallStep[] | IDialogWaterfallStep, any)

在用户话语中检测到给定意向时调用处理程序。 对于基于 string 的意向,该意向可以是 识别器()返回的意向, 为提示注册,也可以是从全局 识别器()流入的意向。

注意: 匹配的完整详细信息(包括检测到的意向列表 & 实体)将传递给启动的第一个瀑布步骤或对话 参数

function matches(intent: RegExp | string, dialogId: string | IDialogWaterfallStep[] | IDialogWaterfallStep, dialogArgs?: any)

参数

intent

RegExp | string

  • 意向:{RegExp} - 将计算为检测用户意向的正则表达式。
  • 意向:{string} - IIntentRecognizer 插件返回的命名意向,用于匹配用户意向。
dialogId

string | IDialogWaterfallStep[] | IDialogWaterfallStep

  • dialogId: _{string} - 匹配意向时要开始的对话的 ID。
  • dialogId:{IDialogWaterfallStep[]} - 匹配意向时要执行的步骤瀑布。
  • dialogId:{IDialogWaterfallStep} - 匹配意向时要执行的单步瀑布图。 调用内置提示或启动新对话将导致当前对话在子提示/对话框完成时结束。
dialogArgs

any

(可选)参数,用于传递在 dialogId 时启动的对话是 {string}

返回

matchesAny(RegExp[] | string[], string | IDialogWaterfallStep[] | IDialogWaterfallStep, any)

在用户话语中检测到任何给定意向时,调用处理程序。 对于基于 string 的意向,该意向可以是 识别器()返回的意向, 为提示注册,也可以是从全局 识别器()流入的意向。

注意: 匹配的完整详细信息(包括检测到的意向列表 & 实体)将传递给启动的第一个瀑布步骤或对话 参数

function matchesAny(intent: RegExp[] | string[], dialogId: string | IDialogWaterfallStep[] | IDialogWaterfallStep, dialogArgs?: any)

参数

intent

RegExp[] | string[]

  • 意向:{RegExp[]} - 将计算为检测用户意向的正则表达式数组。
  • 意向:{string[]} - IIntentRecognizer 插件返回的命名意向数组,该插件将用于匹配用户意向。
dialogId

string | IDialogWaterfallStep[] | IDialogWaterfallStep

  • dialogId: _{string} - 匹配意向时要开始的对话的 ID。
  • dialogId:{IDialogWaterfallStep[]} - 匹配意向时要执行的步骤瀑布。
  • dialogId:{IDialogWaterfallStep} - 匹配意向时要执行的单步瀑布图。 调用内置提示或启动新对话将导致当前对话在子提示/对话框完成时结束。
dialogArgs

any

(可选)参数,用于传递在 dialogId 时启动的对话是 {string}

返回

onFormatMessage((session: Session, text: TextType, speak: TextType, callback: (err: Error, message?: IMessage) => void) => void)

注册一个处理程序,该处理程序将调用以创建要为提示发送的传出 IMessage。 仅当当前提示/retryPrompt 的类型为 string|string[]时,才会调用此处理程序。 只要提示/retryPrompt 是 IMessage|IIsMessage 使用配置的消息,就不会调用处理程序。 可以注册多个处理程序,并使用消息调用 callback() 的第一个处理程序。 调用 callback(null, null) 将导致处理移动到链中的下一个处理程序。

function onFormatMessage(handler: (session: Session, text: TextType, speak: TextType, callback: (err: Error, message?: IMessage) => void) => void)

参数

handler

(session: Session, text: TextType, speak: TextType, callback: (err: Error, message?: IMessage) => void) => void

将调用的函数为当前提示创建 IMessage。 使用消息或 callback() 调用 null 以继续处理。

返回

Prompt<any>

onPrompt((session: Session, next: Function) => void)

注册每次提示要向用户发送消息时都会调用的处理程序。 可以使用此挂钩实现自己的自定义提示发送逻辑。 可以注册多个处理程序,并调用 next() 将调用链中的下一个处理程序。 最后一个处理程序执行提示默认逻辑,即使用 formatMessage() 创建新消息,然后将其发送。

function onPrompt(handler: (session: Session, next: Function) => void)

参数

handler

(session: Session, next: Function) => void

调用 sendPrompt() 随时调用的函数。

返回

Prompt<any>

onRecognize((context: IRecognizeDialogContext, callback: (err: Error, score: number, response?: any) => void) => void)

注册一个处理程序,该处理程序将在每次提示收到用户的答复时调用。 callback() 处理程序可用于返回一个置信度分数,它理解用户输入以及应返回到提示调用方的值。 呼叫 callback(null, 1.0, true); 表示用户回答提示,并将返回 true 作为提示的响应 boolean 的置信度。 任何响应类型都是可能的,包括对象。 调用 callback(null, 0.0); 表示用户输入根本无法理解,并且应重新提示用户输入。

可以注册多个处理程序,与其他处理程序类型不同,将调用所有已注册的处理程序,并会选择提供最高置信度分数的处理程序作为获胜者。 自定义其中一种内置提示类型时,通常需要禁用提示默认识别器逻辑。 可以通过在创建提示时设置提示 功能来实现此目的。 请记住,如果完全禁用提示默认识别器逻辑,则需要自行执行所有识别。

function onRecognize(handler: (context: IRecognizeDialogContext, callback: (err: Error, score: number, response?: any) => void) => void)

参数

handler

(context: IRecognizeDialogContext, callback: (err: Error, score: number, response?: any) => void) => void

将调用以识别用户回复提示的函数。

返回

Prompt<any>

recognize(IRecognizeDialogContext, (err: Error, result: IRecognizeResult) => void)

分析用户话语,并分配 0.0 - 1.0 的分数,指示对话理解用户话语的自信程度。 始终为堆栈上的活动对话框调用此方法。 分数为 1.0 表示完美匹配并终止任何进一步识别。 当评分小于 1.0 时,堆栈上的每个对话都将调用其 recognizeAction() 方法,以查看是否有任何已命名操作绑定到对话,以便更好地匹配用户话语。 还将评估在机器人级别注册的全局操作。 如果对话框的分数更高,则任何绑定操作都会调用 dialogs replyReceived() 方法,并将使用从 recognize() 调用返回的结果对象调用。 这样,对话框就可以将识别阶段收集的其他数据传递给 replyReceived() 方法进行处理。

如果某个操作的分数较高,则会调用该操作的对话框,而不是 dialogs replyReceived() 方法。 对话将保留在堆栈上,如果操作调用新对话,可能会在某些时候恢复,因此对话应为 dialogResumed()的意外调用做好准备。

function recognize(context: IRecognizeDialogContext, callback: (err: Error, result: IRecognizeResult) => void)

参数

context
IRecognizeDialogContext

请求的上下文。

callback

(err: Error, result: IRecognizeResult) => void

使用识别结果调用的函数。

recognizer(IIntentRecognizer)

将新的识别器插件添加到提示,每次用户回复提示时都会运行该插件。

function recognizer(plugin: IIntentRecognizer)

参数

plugin
IIntentRecognizer

要添加的识别器。

返回

reloadAction(string, TextOrMessageType, IBeginDialogActionOptions)

将操作绑定到对话,该操作将导致对话在触发时重新加载。 这可用于实现处理用户话语(如“开始”)的逻辑。

function reloadAction(name: string, msg?: TextOrMessageType, options?: IBeginDialogActionOptions)

参数

name

string

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

msg
TextOrMessageType

(可选)消息,用于在重新加载对话框之前发送用户。

options
IBeginDialogActionOptions

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

返回

replyReceived(Session, IRecognizeResult)

处理从用户收到的消息。 由对话框系统调用。

function replyReceived(session: Session, recognizeResult?: IRecognizeResult)

参数

session
Session

当前会话的会话对象。

recognizeResult
IRecognizeResult

selectActionRoute(Session, IRouteResult)

为话语选择具有最高置信度分数的路由。

function selectActionRoute(session: Session, route: IRouteResult)

参数

session
Session

当前会话的会话对象。

sendPrompt(Session)

向用户发送当前轮次的提示。 可以从 [matches()][#matches] 处理程序调用此操作,以手动向用户发送提示/重新提示。 若要强制发送初始提示,需要在调用 session.dialogData.turns = 0;之前设置 sendPrompt()

function sendPrompt(session: Session)

参数

session
Session

当前会话的会话对象。

triggerAction(ITriggerActionOptions)

将操作绑定到对话,该对话将在每次触发时将其设置为活动对话。 默认行为是通过清除堆栈并在堆栈根处启动对话来插插任何现有对话。 中断的对话可以通过将自定义 onInterrupted 处理程序添加到其触发器操作选项来截获此中断。 此外,还可以通过向触发器操作选项提供自定义 onSelectAction 处理程序来自定义触发对话框的启动方式。

function triggerAction(options: ITriggerActionOptions)

参数

options
ITriggerActionOptions

用于配置操作的选项。

返回