Node.js 通过ngrok处理来自多个用户的Dialogflow请求

Node.js 通过ngrok处理来自多个用户的Dialogflow请求,node.js,reactjs,dialogflow-es-fulfillment,ngrok,Node.js,Reactjs,Dialogflow Es Fulfillment,Ngrok,我正在为学校制作一个网站,使用Dialogflow、ReactJs和NodeJs。我对这样做还很陌生,我不确定我的实现是否适合我的用例 我的网站涉及一个游戏,服务器端需要从中获取游戏状态信息。我从React向NodeJs发送请求,如下所示: axios({ 方法:“post”, url:“/game_state”, 数据:{'current_player':current_player} //…(实际发送的数据更多) } ); 然后,我的post请求由NodeJs处理,如下所示: app.po

我正在为学校制作一个网站,使用Dialogflow、ReactJs和NodeJs。我对这样做还很陌生,我不确定我的实现是否适合我的用例

我的网站涉及一个游戏,服务器端需要从中获取游戏状态信息。我从React向NodeJs发送请求,如下所示:

axios({
方法:“post”,
url:“/game_state”,
数据:{'current_player':current_player}
//…(实际发送的数据更多)
}
);
然后,我的post请求由NodeJs处理,如下所示:

app.post('/game_state',express.json(),(event)=>{
当前_玩家=event.body.current_玩家;
//…(更多数据)
});
然后可以通过Dialogflow请求访问此数据。例如,如果用户问:“该轮到谁了?”,则可以触发webhook实现的意图。代码如下:

功能转向(代理){
当前玩家==1?代理添加(“你的回合”):代理添加(“我的回合”);
}
正如我之前所说,我对开发网站不是很有经验。我希望能够同时对多个用户使用我的实现,这样一个用户的游戏状态就不会影响另一个用户的游戏状态

到目前为止,我一直在使用(免费版)ngrok来测试我的网站。如果只有一个用户访问链接,我的实现就可以很好地工作。然而,当我在同一台计算机上两次打开网站(使用ngrok生成的链接)并与例如转向意图进行交互时,我注意到,即使在一个会话中,轮到玩家,而在另一个会话中,轮到聊天机器人,两个会话的转向响应都是相同的

考虑到使用了相同的链接,post请求很可能被覆盖。我想找到一个解决方案,使它可以使用相同的链接,但有服务器保持游戏状态信息为每个用户分开。我觉得使用用户ID就可以实现这一点,但我对如何实现这一点感到困惑

我知道类似的内容可能是一个选项:
app.get(“/game\u state/:id”,…)
,但我不确定如何将此信息也用于实现的Dialogflow部分。Dialogflow调用服务器本身,因此它不会传递此用户ID。不知何故,我也需要在那里加以区分


如有任何建议,将不胜感激

当您进行Dialogflow detected intent API调用时,您正在创建会话路径

const sessionPath=await sessionClient.projectAgentSessionPath(PROJECTID,sessionId)

如果您传递了会话Id=123456789A,那么对于此Id,Dialogflow管理了Id上的所有上下文和参数
123456789A

sessionid=USER
当您得到对服务器的webhook调用时,您也会得到这个会话Id,或者我们也称之为UserId-like

让userId=agent.session.split('/')[4]

你可以在这里找到更多信息