【发布时间】:2021-07-31 01:09:57
【问题描述】:
我正在为学校开发一个网站,使用 Dialogflow、ReactJs 和 NodeJs。我对这样做很陌生,我不确定我的实现是否适用于我的用例。
我的网站涉及一个游戏,服务器端需要从中获取游戏状态信息。我从 React 向 NodeJs 发送请求如下:
axios({
method: 'post',
url: '/game_state',
data: {'current_player': current_player}
// ... (more data is sent in reality)
}
);
我的帖子请求随后由 NodeJs 处理,如下所示:
app.post('/game_state',express.json(),(event)=>{
current_player = event.body.current_player;
// ... (more data)
});
然后可以通过 Dialogflow 请求访问此数据。例如,如果用户问:“轮到谁了?”,然后可以触发带有 webhook 实现的意图。代码:
function turn(agent){
current_player == 1 ? agent.add("Your turn") : agent.add("My turn");
}
正如我之前所说,我对开发网站不是很有经验。我希望能够同时对多个用户使用我的实现,因此一个用户的游戏状态不应影响另一个用户的游戏状态。
到目前为止,我一直在使用(免费版)ngrok 来测试我的网站。如果只有一个用户访问链接,我的实现工作得很好。但是,当我在同一台计算机上打开网站两次(使用 ngrok 生成的链接)并与例如交互时转弯意图,我注意到即使在一个会话中轮到玩家,而在另一个会话中轮到聊天机器人时,两者的转弯响应都是相同的。
鉴于使用了相同的链接,很可能会覆盖发布请求。我想找到一种解决方案,可以使用相同的链接,但让服务器为每个用户单独保存游戏状态信息。我觉得这可能通过用户 ID 实现,但我不知道如何实现它。
我知道这样的事情可能是一个选项:app.get("/game_state/:id", ...),但我不确定如何获取此信息以用于实现的 Dialogflow 部分。 Dialogflow 调用服务器本身,因此它不会传递此用户 ID。不知何故,我也需要在那里区分它。
任何建议将不胜感激!
【问题讨论】:
标签: node.js reactjs dialogflow-es-fulfillment ngrok