0

如何在使用 Action-on-google 库和使用 dialogflow 应用程序时为 dialogflow webhook 服务器上的每个请求添加中间件/拦截器,目的是我想对密钥是否仍然有效的每个请求进行身份验证,我也想要检查该用户是否已经在管理一个组,然后获取组的所有成员并放入 /userEntity,

现在我是在 Wellcome 意图中这样做的,所以当用户说talk to xyz app在 Wellcome 意图中时,如果用户正在管理一个组,我会检查数据库,然后获取该特定组的所有成员并放入用户实体,

但是当用户直接说出命令时,这个逻辑就talk to my xyz app变成垃圾ask my xyz app john wink is present or not

现在我已经限制了带有上下文组合的直接命令,但这并不好,例如:用户不能说直接命令,除非WELCOME_DONE上下文是出于 Wellcome 意图的上下文

4

1 回答 1

1

您提到的“直接命令”(ask my xyz app john wink is present or not)就是我们所说的“动作调用短语”。由于您依赖用户实体从操作短语中提取名称,因此只有在最近匹配另一个意图时才能成功执行此操作,因为您添加的用户实体仅可使用 30 分钟.

解决此问题的一种方法可能如下。在添加用户实体后,我们将做一些聪明的事情,通过 Dialogflow 再次运行用户查询。

  1. 在处理您的“动作调用”的意图中,使用@sys.any(本质上是通配符实体)来捕获名称。为此意图启用 webhook。

  2. 使用与预期“动作短语”匹配的示例创建另一个意图User says,类似于第一个意图,但不要将其添加到“附加触发意图”中。为此意图启用 webhook。

  3. 在您的 webhook 中创建一个函数来处理步骤 1 中的意图。

  4. 在此功能中,查找用户及其组并通过添加成员/userEntity

  5. 现在已经创建了用户实体,/query使用用户所说的任何内容调用 Dialogflow API。

  6. 由于现在已经创建了用户实体,因此将匹配在步骤 2 中创建的意图,因此/queryAPI 响应将包含您在步骤 4 中创建的实体的名称。

  7. 使用名称来生成您想要生成的任何响应。

于 2017-11-06T22:41:58.410 回答