你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

自适应对话中的事件和触发器

适用于: SDK v4

有关本主题的简介,请参阅 Composer 文档中的触发器概念文章。

识别器事件触发器

注意

Azure AI QnA Maker 将于2025年3月31日停用。 从 2022 年 10 月 1 日开始,您将无法创建新的 QnA Maker 资源或知识库。 问答功能的较新版本现已作为 Azure AI 语言的一部分提供。

自定义问答是 Azure AI 语言服务的一项功能,是 QnA Maker 服务的更新版本。 有关 Bot Framework SDK 中的问答支持的详细信息,请参阅 自然语言理解

事件原因 触发器名称 基本事件 说明
选择意向 OnChooseIntent ChooseIntent 当在 CrossTrainedRecognizerSet 的多个识别器中的意向之间检测到歧义时,将运行此触发器。
已识别意向 OnIntent RecognizedIntent 已识别指定的意向时要执行的操作。
QnAMatch 意向 OnQnAMatch RecognizedIntent QnAMakerRecognizer 返回了 QnAMatch 意向时,将运行此触发器。 实体 @answer 将具有 QnAMaker 答案。
已识别未知意向 OnUnknownIntent UnknownIntent 无法识别用户输入或在任何 OnIntent 触发器中找不到匹配项时要执行的操作。 还可以将此用作根对话中的第一个触发器来代替 OnBeginDialog,在对话首次启动时执行任何所需的任务。

OnIntent 触发器允许处理 recognizedIntent 事件。 recognizedIntent 事件由识别器引发。 除了QnA Maker 识别器之外,所有 Bot Framework SDK 内置识别器会在成功标识用户输入时发出此事件,以便机器人可以做出相应响应。

recognizedIntent 事件未由任何其他触发器捕获和处理时,请使用 OnUnknownIntent 触发器来捕获和响应。 这意味着,任何未经处理的意向(包括“none”)都可能导致它触发,但前提是当前没有针对对话框执行任何操作。 使用 OnUnknownIntent 触发器在发生“none”意向时捕获和响应。 OnIntent使用触发器处理“none”意向可能会产生意外的结果。

对话事件触发器

对话触发器处理与对话的生命周期相关的对话特定事件。 Bot Framework SDK 中目前有 6 个对话触发器,它们都派生自 OnDialogEvent 类。

提示

这些触发器并不像普通中断事件处理程序(子操作将在处理程序操作完成后继续运行)。 对于下面的所有事件,机器人将运行一组新操作,一旦完成这些操作,就会结束轮次。

触发器名称 基本事件 说明
OnBeginDialog BeginDialog 此对话开始时要执行的操作。 若要仅与子对话一起使用,而不是在根对话中使用,请使用 OnUnknownIntent 执行对话初始化活动。
OnCancelDialog CancelDialog 使用此事件可以防止由于执行 CancelAllDialogs 操作的子对话而取消当前对话。
OnEndOfActions EndOfActions 处理完所有操作和歧义事件后发生此事件。
OnError Error 发生 Error 对话事件时要执行的操作。 此事件与 OnCancelDialog 类似,因为在这种情况下,由于子对话中的错误,将阻止当前对话结束。
OnRepromptDialog RepromptDialog 发生 RepromptDialog 事件时要执行的操作。
OnDialog DialogEvents.VersionChanged

活动事件触发器

通过活动触发器可以将操作与来自客户端的任何传入活动关联,例如,当新用户加入,并且机器人开始新对话时。 有关活动的其他信息,请参阅 Bot Framework Activity 架构

所有活动事件都具有 ActivityReceived 的基本事件,并通过其活动类型进行进一步优化。 所有活动触发器派生自的基类是 OnActivity

事件原因 ActivityType 触发器名称 说明
Greeting ConversationUpdate OnConversationUpdateActivity 当机器人或用户加入或离开对话时,接收活动时 conversationUpdate 要执行的操作。
已结束对话 EndOfConversation OnEndOfConversationActivity 收到 endOfConversation 的活动时要执行的操作。
已接收事件 Event OnEventActivity 收到 event 的活动时要执行的操作。
提交给人 Handoff OnHandoffActivity 收到为 handOff 的活动时要执行的操作。
已调用对话 Invoke OnInvokeActivity 收到为 invoke 的活动时要执行的操作。
用户正在键入 Typing OnTypingActivity 收到为 typing 的活动时要执行的操作。

消息事件触发器

通过消息事件触发器可以对任何消息事件做出响应,例如,当消息被更新 (MessageUpdate) 或被删除 (MessageDeletion) 或有人对消息做出响应 (MessageReaction) 时(例如,某些常见消息反应包括赞、爱心、大笑、吃惊、悲伤和生气)。

消息事件是一种活动事件,因此,所有消息事件都具有 ActivityReceived 的基本事件,并通过活动类型进行进一步优化。 所有消息触发器派生自的基类是 OnActivity

事件原因 ActivityType 触发器名称 说明
收到的消息 Message OnMessageActivity 收到类型为 MessageReceived 的活动时要执行的操作。
已删除消息 MessageDeletion OnMessageDeleteActivity 收到类型为 MessageDelete 的活动时要执行的操作。
消息回应 MessageReaction OnMessageReactionActivity 收到类型为 MessageReaction 的活动时要执行的操作。
已更新消息 MessageUpdate OnMessageUpdateActivity 收到类型为 MessageUpdate 的活动时要执行的操作。

自定义事件触发器

可以通过将 EmitEvent 操作添加到任何触发器来发出自己的事件,然后可以通过定义自定义事件触发器,在机器人的任何对话中的任何触发器中处理该自定义事件。 自定义事件触发器是在将 Event 属性设置为与 EmitEvent 的 EventName 属性相同的值时,实际上会成为自定义触发器的 OnDialogEvent 触发器。

提示

可以通过将 EmitEvent 的 BubbleEvent 属性设置为 true,允许机器人中的其他对话处理自定义事件。

事件原因 触发器名称 基类 说明
自定义事件 OnDialogEvent OnCondition 检测到自定义事件时要执行的操作。 使用发出自定义事件操作引发自定义事件。