0

所以据我了解,实体应该在不同的插槽中重复使用,以优化您可能希望接受类似数据类型的用户输入信息的事实,即两个单独的插槽“你的家庭收入是多少”,“什么是你配偶的家庭收入”都将使用@sys-currency实体。

在我当前的对话流程中,我有两个子节点,每个子节点都有一个用于检查sys-currency实体类型的槽。但是,我使用两个不同的上下文变量来设置插槽。

问题是,在用户为第一个子节点(“家庭收入”)输入答案后,上下文变量也会为下一个子节点设置。它们具有相同的实体,但具有不同的上下文变量。据我了解,这应该发生。我可以确认节点已处理,但它会立即跳过提示,就好像它已被填充并在节点中传递响应。

第一个节点 第二个节点

4

3 回答 3

0

所以......我知道这晚了一年零三个月,但如果其他人遇到这个问题,我会提供答案。

根本原因是“离婚 - 家庭收入”节点将 input.text 设置为 @sys-currency 实体匹配的值,因此您跳转到基于 @sys-currency 匹配的任何节点将自动将其上下文变量设置为input.text 不提示用户。

不幸的是,我没有看到任何来自 IBM 的文档允许您将 input.text 设置为 null。

要解决此问题,您需要用户提供一些与@sys-currency 不匹配的其他值。

值得庆幸的是,该解决方案易于实施,用户实际上可能更喜欢您按照我下面的大纲进行操作。

只需让您的“离婚 - 家庭收入”节点跳转到要求他们确认输入的节点。Yes 和 No 等选项非常完美,因为它们会将 input.text 分别设置为“Yes”或“No”。

最后,跳转到“离婚 - 配偶收入”节点。由于@sys-currency 不会匹配用户的 input.text,节点会正确提示用户填写 $spouse_annual_income 槽。

于 2019-11-06T05:28:15.550 回答
0

如果一个节点跳转到另一个节点,就会发生这种情况。原因是因为在用户输入上找到的意图和实体将针对流程中的所有节点进行评估,直到新的“等待用户输入”,它们将被更改。

在这些情况下,我通常会创建一个具有永远找不到的值的新实体(如 389jd8239d892d8h89hf32hdsa8hdj3),以强制每个输入进入插槽的未找到节点,并且我使用必要的实体,在这种情况下它会成为@sys 货币。这样,即使用户在之前的输入中输入了有效货币,问题也会消失。对我来说,它在处理使用大量@sys-numbers/@sys-currency/@sys-date 的流时很有用,并且没有很多文本可用于区分这些值。

另一种选择是删除插槽并使用单个节点,并使用他自己的流程来获得答案。我个人更喜欢使用插槽,因为它很容易处理多种可能性。我什至会将这两个问题放在同一个节点上,只是使用条件来检查是否应该评估插槽。

我已经寻找一种方法来清除从前一个节点的输入中识别的意图/实体,但没有成功。

于 2018-07-23T11:30:15.083 回答
0

你告诉它跳到下一个插槽并寻找那个实体。用户没有机会输入任何内容,因为他们的最后一条消息包含该实体。您应该尝试跳转并等待用户输入

于 2018-07-23T07:15:23.207 回答