从实现中的回退意图获取输出上下文

Getting the output context from the fallback intent in fulfillment

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

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

但是线

var context = request.body.queryResult.outputContexts;

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

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

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

在 "Diagnostic Info" 部分我有点惊讶没有提到回退的意图,解决它的唯一方法似乎是使用 outputcontext 但如上所示相当长的字符串。

谢谢

是的,上下文名称只是该路径的最后一部分。大多数图书馆会为您处理这些,但如果您直接使用 JSON,则需要自己完成。

没有对 "the Intent from which the fallback came" 的引用,因为这不完全是 Intent 的模型。意图表示用户所说或所做的事情,而不是对话的当前状态或您在对话中的位置。当前状态 是由上下文表示的 ,您是否应该选择设置它们。

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

在 Intent 定义中,仅当 all Input Context 字段中列出的 Contexts 被设置时才会触发 Intent(即 - 生命周期大于 0)。例如,Dialogflow 在制作后续 Intent 时使用它,这很常见,因此您可以做一些事情,例如让 "help" 根据 Context 触发不同的 Intent。在Output Context中,它会自动捕获Intent中指定的所有参数,包括用户响应填写的参数,因此可以很容易地记住用户一轮又一轮说过的话。

在评论中回答你的问题 - 它没有具体说明 哪个 Intents 以前被触发过,或者最近触发过哪个,尽管如果你在使用方式上保持一致你的输出上下文和你给他们的生命周期,你可以这样使用它。它所说的是 状态 你的谈话所处的状态,无论如何通常要好得多。

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