首页 > 解决方案 > 从实现中的回退意图获取输出上下文

问题描述

我有几个意图。他们都只使用一个后备意图,并且这个后备意图启用了 webhook。

在回退功能中,我希望做的是打开输出上下文,然后根据回退的意图确定接下来应该发生什么。

但是线

var context = request.body.queryResult.outputContexts;

调试到控制台时得到输出:

[ { name: 'projects/xxxxproj-xxxx/agent/sessions/xxxxxx-xxxxxx-xxxxx-xxxxx/contexts/xxxxxxx-context' } ]

对于 switch 语句,我只想要 xxxxx-context 的最后一位。我是否必须将其拆分以获得输出上下文?

在“诊断信息”部分,我有点惊讶,没有提及回退的意图,解决它的唯一方法似乎是使用 outputcontext 但如上所示,这是一个相当长的字符串。

谢谢

标签: dialogflow-es

解决方案


是的,上下文名称只是该路径的最后一部分。大多数库会为您处理这些问题,但如果您直接使用 JSON,则需要自己执行此操作。

没有提到“回退的意图”,因为这不是意图的模型。意图代表用户所说或所做的,而不是当前的对话状态或您在对话中的位置。如果您选择设置它们,则当前状态由上下文表示。

从这个意义上说,您使用上下文的方式可能会有所不同。它们可以存储参数,因此是在对话轮次之间保存信息的好方法,您可以按照自己的方式使用它们——查看对话的一般状态。但在定义 Intent 时,它们也有其他用途。

在 Intent 定义中,只有在 Input Context 字段中列出的所有Context 都已设置(即 - 寿命大于 0)时才会触发 Intent 。例如,Dialogflow 在创建后续 Intent 时会使用它,这很常见,因此您可以执行诸如让“帮助”基于上下文触发不同 Intent 之类的事情。在输出上下文中,它会自动捕获 Intent 中指定的所有参数,包括由用户响应填写的参数,因此这可以很容易地记住用户一轮又一轮所说的话。

要在评论中回答您的问题 - 它没有具体说明之前触发了哪些Intent,或者最近触发了哪些 Intent,尽管如果您在使用输出上下文的方式和赋予它们的生命周期方面保持一致,您可以使用它这个方式。它确实说的是您的对话处于什么状态,无论如何这通常要好得多。

记住——意图代表用户所说或所做的。它不代表有关对话的任何其他内容。只有系统的状态代表了这一点,而我们必须控制该状态的一个工具是通过上下文。


推荐阅读