【问题标题】:Caching response for API.ai Node.js webhookAPI.ai Node.js webhook 的缓存响应
【发布时间】:2018-03-08 23:46:59
【问题描述】:

我有一个用 Node.js 为 API.ai 设计的 webhook,它与多个 API 交互以收集信息并向用户提供响应。

由于我正在与多个 API 交互,因此所用的响应时间超过 5 秒,这导致 API.ai 请求超时。

为了克服这个问题,我尝试在 node.js webhook 中实现缓存,它将 API 的响应保存到一定时间。这将删除超时,直到达到 max-age 标头时间。

编辑:我可以用来缓存子请求请求的 API 响应的最佳节点模块是什么。

注意:我使用request node module 处理http 请求,但它似乎没有提供缓存响应的方法。

【问题讨论】:

  • 不清楚你想从 StackOverflow 得到什么。
  • 编辑了问题:-)。希望现在清楚。
  • 如果你的服务器上有 mongodb,你可以使用我不久前制作的这个模块:npmjs.com/package/wp-node你可以将 TTL 传递给 .cache 方法或全局定义它。
  • 对不起。不使用 MongoDB。 :-(
  • 您应该为此查看一些内存数据库,例如 redis 或 memcached。

标签: node.js caching node-modules dialogflow-es actions-on-google


【解决方案1】:

所有给出的答案对于解决请求端的缓存问题都是合理的。但由于您指定了 API.AI 和 Actions,您可能还能够或需要在对话进行时存储信息。您可以使用 API.AI 上下文来执行此操作。

如果您将用户的每个响应限制为仅一次远程调用,您甚至可以将其适应时间范围。

例如,如果您正在讨论电影时间和订票,对话可能是这样的:

用户:“我想看电影。”

[您使用 API 查找最近的剧院,将剧院的位置存储在上下文中并回复]“您最近的剧院是 Mall Megaplex。您对那里的一个感兴趣吗?”

用户:“当然”

[您现在已经拥有影院,因此您使用另一个 API 调用查询它正在播放的内容并将其存储在上下文中]“有七部不同的电影正在播放,包括《星球大战》和《大白鲨》。这些听起来有趣吗?”

用户:“否”

[您已经拥有上下文中的数据,因此您不需要再次调用。]“Rocky 或者...”

通过这种方式,您(通常)进行了相同数量的调用,但将用户的结果存储在会话中,而不是收集用户的所有信息或所有可能的结果,然后缩小范围他们。

【讨论】:

    【解决方案2】:

    最终决定使用下面的模块:

    https://www.npmjs.com/package/memory-cache

    这更适合我的场景。有时间可能会尽快尝试使用 Redis。

    【讨论】:

      猜你喜欢
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多