【问题标题】:how to add middleware/intercepter for every request in on dialogflow webhook server如何为 dialogflow webhook 服务器上的每个请求添加中间件/拦截器
【发布时间】:2017-11-03 05:36:10
【问题描述】:

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

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

但是当用户直接说出命令时,这个逻辑就会变成垃圾,比如如果用户不说talk to my xyz app,而是说ask my xyz app john wink is present or not,那么应用程序无法识别这个名称,请注意我不能使用系统名称实体,因为在我的情况下,这些是不是英文名称

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

【问题讨论】:

  • 您使用的是什么应用服务器?您能否更新您的问题以包含代码,在其中说明您现在如何针对一个意图处理此问题以及为什么您在其他意图时遇到问题?
  • firebase 函数,一个名为webhook的函数

标签: artificial-intelligence actions-on-google api-ai dialogflow-es


【解决方案1】:

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

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

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

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

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

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

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

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

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

【讨论】:

  • 确实很难理解指定的指令,还在努力消化:-)
  • 这听起来像是解决方案,如果有人理解它,请在评论中解释一下
  • 哪部分需要帮助理解?
猜你喜欢
  • 2023-01-06
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
相关资源
最近更新 更多