有没有办法在与bot聊天时识别连接的用户?

问题描述 投票:-1回答:1

所以我是IBM Watson助手的新手,我想知道,当我为发送消息的当前用户初始化会话时,我应该在哪里存储它,以及如何告诉watson在user1和user2的session_id之间做出区分?

现在我尝试在nodejs中使用全局变量,但正如我所说的那样,我无法在多个用户的会话之间产生差异。


const assistant = new WatsonAssistant({
  username: process.env.WATSON_USERNAME,
  password: process.env.WATSON_PASSWORD,
  url:      process.env.WATSON_URL,
  version: process.env.WATSON_VERSION

});


exports.getMessage = body => new Promise(async (resolve, reject) => {

  // Initializing session for current user
  if(!global.session_id){
    const createdSessionId = await assistant.createSession({
      assistant_id: process.env.WATSON_ASSISTANT_ID
    });
    global.session_id = createdSessionId.session_id;
  }

  assistant.message(
    {
      workspace_id: process.env.WATSON_WORKSPACE_ID,
      input: { text: body.input },
      session_id: global.session_id,
      assistant_id: process.env.WATSON_ASSISTANT_ID
    },
    function(err, response) {
      if (err) {
        console.log(err);
        reject(err);
      } else {
        resolve(response);
      }
    }
  );
});```

I would like to have session_id's of multiple users who have used my chatbot.
node.js chatbot ibm-watson watson-assistant
1个回答
-1
投票

我建议使用NodeJS Express作为您的Web服务器,然后使用一些Express会话中间件来管理用户会话(在Web浏览器和服务器之间)。我使用的中间件是“快速会话”。

例如,我会这样做:

const session = require('express-session');

// use unique value for secret, here using the bot workspace ID
app.use(session({secret: process.env.WORKSPACE_ID}));

然后,您有一个“req.session”对象,您可以在同一用户的后续调用中存储数据和检索。您可以将助理会话ID存储在此req.session对象上,以使其可用。不同的用户将获得不同的快速会话,从而获得不同的助理会话。

“快速会话”的默认实现使用内存,因此根据其自述文件,您将需要使用诸如磁盘或数据库之类的东西来进行生产。

© www.soinside.com 2019 - 2024. All rights reserved.