【问题标题】:Handle Dialogflow requests from multiple users through ngrok通过 ngrok 处理来自多个用户的 Dialogflow 请求
【发布时间】: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


    【解决方案1】:

    当您当时进行 Dialogflow 检测到的意图 API 调用时,您正在创建会话路径

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

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

    session Id = USER 当您收到对服务器的 webhook 调用时,您还会获得此会话 ID,或者我们也称为 UserId,例如

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

    您可以在此处找到更多信息 dialogflow session

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多