Javascript 云函数中的Dialogflow会话处理

Javascript 云函数中的Dialogflow会话处理,javascript,node.js,google-cloud-functions,dialogflow-es,dialogflow-es-fulfillment,Javascript,Node.js,Google Cloud Functions,Dialogflow Es,Dialogflow Es Fulfillment,目前,我正在云函数中处理一个简单的会话,如Dialogflow实现。 在我的脚本中,我保留了各种变量,这些变量可以是用户输入的,也可以是从外部API获取的。为了处理会话,我将变量数据保存在Firestore数据库中。但是,当两个不同的用户同时与bot通信时,会话仍然会覆盖彼此的变量,从而导致会话中断 现在,我有以下工作流程: 检测到意图时,在Firestore中查找现有会话数据(外部触发器提供的Dialogflow会话ID用作存储密钥) 如果已经存在任何数据,请将变量数据加载到脚本中的全局变量

目前,我正在云函数中处理一个简单的会话,如Dialogflow实现。 在我的脚本中,我保留了各种变量,这些变量可以是用户输入的,也可以是从外部API获取的。为了处理会话,我将变量数据保存在Firestore数据库中。但是,当两个不同的用户同时与bot通信时,会话仍然会覆盖彼此的变量,从而导致会话中断

现在,我有以下工作流程:

  • 检测到意图时,在Firestore中查找现有会话数据(外部触发器提供的Dialogflow会话ID用作存储密钥)
  • 如果已经存在任何数据,请将变量数据加载到脚本中的全局变量中
  • 根据加载的变量处理intent的代码
  • 根据变量向用户生成输出
  • agent.add(…)
    之后,将数据保存回Firestore数据库

对我来说,这看起来仍然合乎逻辑。此外,加载和保存到数据库是经过测试的,并按预期工作。但是,如果两个或多个用户同时通信,数据将在两者之间覆盖。我怎样才能防止这种情况?云函数不应该能够自己“扩展”吗?对我来说,这意味着这些函数在没有任何竞争条件的情况下一次可以为1000个用户工作?

您没有显示您的代码,这将帮助我们诊断确切的问题,但您描述中的问题短语是

将变量数据加载到脚本中的全局变量中

云函数可以对多个调用使用同一实例。所以函数中的局部变量应该可以安全使用,但真正的全局变量可能会被践踏


如果您仍然存在问题,使用确切的编码问题更新您的问题可能会让我们更好地帮助您。

您不显示代码,这将帮助我们诊断确切的问题,但您描述中的问题短语是

将变量数据加载到脚本中的全局变量中

云函数可以对多个调用使用同一实例。所以函数中的局部变量应该可以安全使用,但真正的全局变量可能会被践踏


如果您仍然有问题,使用确切的编码问题更新您的问题可能会让我们更好地帮助您。

这是代码,我不得不放弃很多行(最初超过1000行):我想知道您是否找到了解决方案?我也遇到了同样的问题。下面是代码,我不得不放弃很多行(最初超过1000行):我想知道你是否找到了解决方案?在上面的代码片段中,我已经将变量声明更改为local(在exports.dialogflowFirebaseFulfillment块中)。但是,这也不起作用,可能是大量的局部变量(现在大约30个)降低了云函数的速度。在上面的代码片段中,我已经将变量声明更改为局部(在exports.dialogflowFirebaseFulfillment块中)。然而,这也不起作用,可能是大量的局部变量(现在大约30个)减慢了云函数的速度。