1

我写信给你是想问一个关于 Dialogflow 实现的问题。

我正在尝试为 Google Home 创建一个代理,而我的后端基本上是一个用 TypeScript 实现的网络挂钩。

在我设计的对话中,用户请求代理执行一个动作,并提供一个类别作为参数。现在,可能的类别集可能会随时间而变化,因此我使用实体类型@sys.any来检测参数。

我的问题是,当我尝试确定代理需要采取行动的特定类别时,请求的参数可能与多个类别匹配,所以我需要一个后续意图来询问用户澄清它想要选择的实际类别。

例如,对话可能如下:

Agent: 'Welcome.'
User:  'Do action on **category**'
Agent: 'I have found **categoryA**, **categoryB** and **categoryC**. Please specify which one you want to select.'
User:  'Select the second || Select **categoryB**'
Agent: 'Great, action performed on **categoryB**'

现在,我能够使用后续事件和上下文来构建这个对话:例如,我创建了两个后续事件,一个检测数字,另一个检测文本,因此用户会根据它所说的内容被驱动到一个或另一个(如果用户说“第一个”,则检测到一个数字,并在后端循环选择与该索引关联的类别。如果用户说“categoryX”,我会执行类似的操作,但意图不同) .

我想了解的是:通过 Node.js 实现 API 实现这种对话的正确方法是什么?

感谢您的任何帮助。

4

1 回答 1

1

根据您的描述 - 您已经做了正确的事情(尽管您不需要后续意图)。

当您回复用户拥有的选项时,您会包含一个可能包含可能结果数组的上下文。然后,您创建将其作为输入上下文的 Intent,匹配数组的索引(我们将其称为 match.index Intent)或按名称(match.name Intent)。

在您的 webhook 中,match.index Intent 将确定实际选择了哪个类别,然后调用处理该类别的函数。类似地,match.name 的 webhook 将采用带有名称的参数并调用相同的函数来处理该类别。

于 2018-12-15T14:33:37.497 回答