我为我的 facebook messenger 机器人创建了一个 node.js webhook。该机器人内置于对话流中,并且数据库连接到 Firebase。我的问题是,当在 webhook 中调用函数进行登录时,登录后,我从数据库中获取了一个用户 ID,我想将其存储在代码中的某个位置,以便在整个用户会话期间都可以使用用户 ID 信息。我将它存储在一个全局变量中。但是,如果只有一个用户在使用该机器人,这可以正常工作。如果另一个用户同时使用该机器人,则此用户 ID 信息将在用户之间共享,因为它存储在全局变量中。我该如何解决这个问题?请帮忙。
var loggedIn = true;
for (i = 0; i < contexts.length; i++) {
console.log("Inside contexts for loop");
//Check for login details context.
if (contexts[i].name == "logindetails") {
if (contexts[0].parameters.loggedIn == "true") {
//set this true if found.
loggedIn = true;
}
}
}
if (loggedIn) {
showUserAccountOptions(sender);
} //else start the login flow and once logged in create the 'logindetails' contexts and set the loggedIn parameter as true.
else {
//Login
login(email, password);
//Post the logindetails contexts
console.log("Not found");
let url = "https://api.dialogflow.com/v1/contexts?sessionId=" + response.sessionId;
console.log("URL", url);
var con = {
method: 'POST',
url: url,
qs: { access_token: '****' },
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer' + ' ****'
},
body:
[
{
"lifespan": 25,
"name": "logindetails",
"parameters": {
"loggedIn": "true"
}
}
],
json: true
};
request(con, function (error, response, body) {
console.log("Inside api request");
if (error) {
console.log("Inside Error", error);
}
else{
//show user options
showUserAccountOptions(sender);
}
});
}
将上下文更新发送到对话流:
let apirespone = let apirespone = {
"contexts": [
{
"name": "logindetails",
"parameters": {},
"lifespan": 5
}
]
}
sendToApiAi(sender,apirespone);
function sendToApiAi(sender, text) {
sendTypingOn(sender);
let apiaiRequest = apiAiService.textRequest(text, {
sessionId: sessionIds.get(sender)
});
apiaiRequest.on('response', (response) => {
if (isDefined(response.result)) {
handleApiAiResponse(sender, response);
}
});
apiaiRequest.on('error', (error) => console.error(error));
apiaiRequest.end();
}