我想从对话框节点跳转到其ID存储在上下文变量中的节点。
我正在尝试解决与题外话有关的问题,此处已对此进行了描述:
Conditionally return from digression in watson assistant
尤其是此图表将问题可视化:
我认为A.H.提出了一个非常合理和相关的问题,没有可行的答案。
据我所知,题外话设置无法解决问题。将根级别节点(通过匹配意图#Want_to_speak_to_someone触发)设置为“离题后返回”。
如果此题外话节点的题外话设置设置为“ return”,则它将始终返回-不管该题外话对话框中进一步发生的情况如何。即使用户确认他想与某人讲话(即他不想返回),该对话框也将返回到题外话的结点。
当我从yes节点(用户确认他想和某人讲话)跳到其他任何节点时,甚至会发生这种情况。分支(或用户跳转到的分支)一结束,对话框就会返回到题外话的节点。
但是,如果将此离题节点的离题设置设置为“不返回”,则即使用户决定不与某人讲话并选择返回原处,也无法返回。
我想要的A.H.是用户可以脱离对话流程,并且仍然可以决定是否要返回。我认为这是对话框非常自然且重要的功能。人们喜欢推翻他们的决定,或者他们甚至无意中偏离了给定的对话流程。
Akaykay建议有两个不同的节点-一个允许返回的“ yes-node”节点和一个不允许返回的“ no-node”节点。但这是行不通的,因为在此之前,我必须先有另一个节点要求用户进行确认-并且此“确认节点”必须设置为“返回”或“不返回”(解决上述问题) )。
由于这个原因,我试图找出一种解决方法:我将对话框从中导出的对话框节点ID存储在上下文变量中。
这是一个上下文变量
"context": {
"last_node": "<? output.nodes_visited [0]?>",
...
},
在对话流的每个节点中都会更新,从而允许离题。
在该示例中,如果用户想要返回,我可以跳回到$ last_node,如果用户想要与人交谈,我可以跳到另一个(固定)节点-“离题节点”的离题设置将不干涉,可以设置为“不返回”。
然后我尝试在我的技能的json文件中编辑相应的节点(从该节点返回$ last_node):
"next_step": {
"behavior": "jump_to",
"selector": "user_input",
"dialog_node": "$last_node"
},
但是当我再次重新导入skill-json-file时,我收到此错误消息:
无论哪种解决方案都可以-一种使用离题设置的解决方案,或者一种允许动态设置“跳转到”目标节点的解决方案。我非常感谢您的帮助-谢谢!
答案 0 :(得分:1)
如果要阻止Watson Assistent从题外话返回,只需在您不希望Watson Assistant从题外归来的节点中调用<? clearDialogStack() ?>
函数即可。
在图表中,您将在节点“确定,单击此处”的输出文本中写入"Ok, click here. <?clearDialogStack()?>"
。这应该可以解决问题。
还请注意,当前无法使用Watson Assistant创建动态gotos。唯一可以做的就是创建一个对话框节点,其中所有必需的gotos受其下面的条件限制,然后转到该节点。手动创建很难,但是可以自动生成。有关WA
的更多信息,请查看以下项目:
https://github.com/IBM/watson-assistant-workbench
完全可以在没有WA
的情况下使用UI
开发聊天机器人。