【发布时间】:2019-11-15 08:44:47
【问题描述】:
目前,我正在 Cloud Function 中进行简单的会话处理,作为 Dialogflow 实现。 在我的脚本中,我保留了由用户输入或从外部 API 获取的各种变量。为了处理会话,我将变量数据保存在 Firestore 数据库中。但是,当两个不同的用户同时与机器人通信时,会话仍然会覆盖彼此的变量,从而导致会话中断。
现在,我有以下工作流程:
- 检测到意图时,在 Firestore 中查找现有会话数据(外部触发器提供的 Dialogflow 会话 ID 用作存储键)
- 如果已经有数据,将变量数据加载到脚本内部的全局变量中
- 根据加载的变量处理意图代码
- 根据变量向用户生成输出
-
agent.add(...)之后,将数据保存回 Firestore 数据库
对我来说,这看起来仍然合乎逻辑。此外,加载和保存到数据库经过测试并按预期工作。但不知何故,如果两个或更多用户同时通信,则数据会在其间被覆盖。我怎样才能防止这种情况? Cloud Functions 不应该能够自行“扩展”吗,这对我来说意味着这些函数可以同时为一千个用户工作而没有任何竞争条件?
【问题讨论】:
-
这里是代码,我不得不废弃很多行(原来超过 1000 行):codepile.net/pile/JDaz4eGB
-
我想知道您是否找到了解决方案?我也遇到了同样的问题。
标签: javascript node.js google-cloud-functions dialogflow-es dialogflow-es-fulfillment