将Fail-safe应用于聊天机器人
介绍
在与聊天机器人交互时,客户总是被要求用文本回复。当客户输入错误答案时,聊天机器人应该怎么做?
故障安全是一项可以应用于聊天机器人流程的功能。当它识别出与任何所需答案不匹配的文本响应时,它可以将您的客户重定向到上一个节点或实时聊天支持。
节点匹配和优先级
在一个会话流中,当用户从一个节点转到另一个节点时,有一个过程叫做节点匹配。默认情况下,以下子节点是随机匹配的。
例如,节点 A 有一个关键字触发器“Hello”,节点 B 有一个任何文本触发器。如果用户键入“Hello”,则触发节点 A 或 B 的概率为 1/2。
但是,我们可以通过更改优先级来控制节点匹配的顺序。 默认情况下,每个节点的优先级为 0。优先级值越小,优先级越高。 具有相同优先级的节点仍然随机匹配。
例如,如果节点 A 的优先级为 0,节点 B 的优先级为 2,则首先匹配节点 A。 只有当节点 A 的触发器无法匹配时,才会匹配节点 B。
因此,故障安全通常在树中具有最低的优先级。 作为机器人设计者,您只希望在所有其他节点都无法与用户输入匹配时触发故障保护。
一般来说,您可以通过 3 种方式应用 Fail-safe:
##你的结果是什么?
结果 1:树流中的故障安全
在树流的这一部分中,聊天机器人要求客户输入“1”、“2”或“3”。 故障安全树节点能够识别错误的答案,并为 custoemr 提供重定向选项。
结果 2:全局故障安全
全局故障安全可以在对话流的任何点触发。 即使在“Check Discount”节点之后没有故障安全树节点,客户在输入不相关的词时仍会被重定向到主菜单。
结果 3:故障安全循环
如果客户不断输入错误答案怎么办? 故障安全循环可以不断向客户询问重定向选项,直到他们输入正确的答案。
示例树结构
动手试试看
在树流中应用故障安全
在这个例子中,客户可以输入1、2 或3 来选择服务,如果他们输入正确的答案,他们可以继续预期的流程。 故障安全树节点将被设计为捕获来自客户的错误输入,并告诉他们按照说明进行操作。
1.在“Get Started”下新建一个树节点,命名为“fail-safe”。
创建任何文本触发器
- 创建一个新触发器。 选择“预定义触发器”,然后选择“任何文本”。 然后这个节点将被客户输入的任何文本触发。
创建故障安全响应
- 为输入不相关文本的客户创建新回复。 在此示例中,我们邀请客户与我们的客户支持人员交谈。
更改优先级
4.在树内部,这一层有4个节点,可以将Fail-safe节点的Priority改为“4”,其他三个保持为“0” . 通过应用这一点,聊天机器人将首先将文本与其他三个节点进行匹配。 如果答案与它们的任何触发器都不匹配,它将进入故障安全节点。 然后,保存该节点。
请记住,较高的优先级值代表较低的优先级。 通常,故障安全节点应该在树中具有最低优先级。 当所有其他文本触发器都无法匹配时,它将最后匹配。
重定向到另一个节点
在故障安全节点中,最佳做法是包含一个后续问题。 此外,您还可以将客户重定向回对话流程中的上一步。
5.在Fail-safe节点中,您有一个后续问题。 因此,在您的 Fail-safe 节点下创建 2 个名为“Yes”和“No”的树节点。
- 在“否”节点中,如果客户不想与客户支持交谈,则创建触发器和响应。
- 在“是”节点中,如果客户想要与客户支持交谈,则创建触发器和响应。 然后将客户重定向到节点以获得客户支持。
- 检查您是否可以产生预期结果#1。
应用全局故障安全
您可以创建 Global Fail-safe 并将客户重定向到节点,例如服务的主菜单,而不是将 Fail-safe 应用于树的特定会话。
创建一个全局节点,命名为“Fail-safe Global”。
创建一个新触发器。 选择“预定义触发器”,然后选择“任何文本”。 然后这个节点将被客户输入的任何文本触发。
11.如果客户在任何节点提供错误的答案,它会将客户重定向回“开始”节点,服务主菜单所在的节点。
没有必要重定向到树的第一个节点。 您的故障安全节点可以重定向到您认为合理的对话流的任何其他点,例如,主菜单或上一步。
- 由于您只想在聊天机器人无法将答案与整个树中的任何触发器匹配时触发 Fail-safe Global,因此您需要设置更大的 Priority 数字 为了它。 我们将其设置为“13”,因为这棵树中有 13 个节点。
请记住,较高的优先级值代表较低的优先级。 通常,故障安全节点应该在树中具有最低优先级。 当所有其他文本触发器都无法匹配时,它将最后匹配。
- Check and see if you can produce the expected outcome #2.
故障安全循环
如果你的Fail-safe有后续问题,你可以设置一个Fail-safe Loop,为之前的fail-safe做一个fail-safe。 通过在前一个的基础上设置一个额外的 Fail-safe,这个 Fail-safe Loop 将不断告诉客户重试,直到他们输入正确的答案。
14.按照步骤1到4创建 如果您没有新的 Fail-safe 节点。
- 在 Fail-safe 节点下创建新节点作为重定向选项。 您可以参考步骤 5 - 7。
- 在Fail-safe节点下创建另一个新节点,命名为“Fail-safe Loop”。
- 像步骤 2 一样创建任何文本触发器。并将 Priority 更改为“3”,因为在此级别有 3 个节点。
18.然后将此节点重定向回之前的Fail-safe节点,形成Fail-safe Loop。
- 检查您是否可以产生预期结果#3。
进阶
为了优化对话流程并改善用户体验,您还可以应用故障安全的高级版本。
我们在上一期介绍了Fail-safe Global 和 Fail-safe Loop。但是,将用户困在故障安全循环中可能不是故障安全设计的最佳实践。相反,您可以决定停止循环的条件,并将用户重定向到另一个节点,例如实时聊天支持。
您可以设计一个故障安全流程来计算用户进入故障安全节点的次数,当计数达到特定限制时,故障安全节点可以自动将用户重定向到客户支持。
预期结果
当用户第一次进入故障安全节点时,他将经历标准的故障安全流程。但是,当用户连续两次进入故障安全节点时,用户将被重定向到客户支持。
示例树结构
故障安全节点和全局
- 首先,在“Get Started”下创建一个故障安全树节点。 创建“任何文本”触发器并降低优先级。 当用户输入错误答案时,将向他提供重定向选项。
- 创建一个故障安全全局节点,将优先级设置为最低并设置一个“Any text”触发器。 在示例树中,该节点的优先级为 50,它将覆盖所有不匹配的输入并将用户重定向到故障安全树节点。
故障安全计数
在“[Main Flow] Fail-safe”中,创建一个前置动作。
输入以下代码。 此预操作将计算用户进入此节点的次数。 计数将保存在成员的 tempData 中。
return new Promise((resolve) => {
// console.log("in Save Number of Fail Safe")
// console.log("member", this.member)
// console.log("node", this.node)
// console.log("get failSafeAgain", this.member.failSafeAgain)
let numberOfFailSafe = this.member.botMeta.tempData.numberOfFailSafe || 0
// console.log("numberOfFailSafe before increment", numberOfFailSafe)
if ((this.member.botMeta.tree === this.node.tree && this.member.botMeta.nodeCompositeId === this.node.compositeId) || this.member.failSafeAgain) {
this.lodash.set(this.member, "botMeta.tempData.numberOfFailSafe", numberOfFailSafe + 1)
} else {
this.lodash.set(this.member, "botMeta.tempData.numberOfFailSafe", 1)
}
// console.log("numberOfFailSafe after increment", this.member.botMeta.tempData.numberOfFailSafe)
resolve({
member: this.member
})
})
转换后的响应
5.当用户连续多次进入故障安全节点时,我们不想显示原始响应。
6.点击“高级”,输入以下代码。 this.member.botMeta.tempData.numberOfFailSafe
是用户进入故障安全节点的次数。 如果计数小于或等于 1,将显示原始响应。 如果计数大于 1,将显示此响应。
return new Promise((resolve) => {
if (this.member.botMeta.tempData.numberOfFailSafe <= 1) {
resolve({
<RESPONSE>
})
} else {
resolve()
}
})
您可以从“响应对象”复制原始响应并将其粘贴到代码中。
高级重定向
当故障安全计数大于 1 时,您需要决定应将用户重定向到何处。
在“[Main Flow] Fail-safe”中,创建“Advanced Redirect”。 输入如下代码,当count大于1时,用户将被重定向到特定节点。 也可以通过改变```this.member.botMeta.tempData.numberOfFailSafe > 1中的count个数来调整count要求 ``。
return new Promise((resolve) => {
if (this.member.botMeta.tempData.numberOfFailSafe > 1) {
resolve({
tree: this.node.tree,
nodeCompositeId: <COMPOSITE_ID>, //Customer Support
})
} else {
resolve()
}
})
请记住输入要重定向到的节点的 Composite ID。
重置故障安全计数
9.除此之外,当用户进入除故障安全节点之外的另一个树节点时,您还需要一个全局节点来重置故障安全计数。 因此计数仅适用于故障安全节点。
- 创建一个“触发器”,并使用以下代码创建一个新的“条件”。 当用户进入除“[Main Flow] Fail-safe”之外的任何其他节点时,将触发此节点。 因此,只有当用户不断重新进入同一个故障安全节点时,计数才会累积。
this.member.botMeta.nodeCompositeId !== <FAIL_SAFE_COMPOSITE_ID> && this.member.botMeta.tree !== “TREE_ID”
请记住输入故障安全树节点的 Composite ID 和 Tree ID。
- 输入以下代码创建一个新的“Action”。 它将清除用户的任何现有故障安全计数。
return new Promise((resolve) => {
this.lodash.set(this.member, "botMeta.tempData.numberOfFailSafe", 0)
resolve({
member: this.member
})
})
- 检查您是否可以产生预期结果。