Я создал веб-хук node.js для своего бота-мессенджера в Facebook. Бот встроен в диалоговый поток, а база данных подключена к firebase. Мой вопрос, когда функция вызывается в веб-перехватчике для входа в систему, после входа в систему я получаю идентификатор пользователя из базы данных, который я хочу сохранить где-то в коде, чтобы информация об идентификаторе пользователя была доступна на протяжении всего пользовательского сеанса. Я храню его в глобальной переменной. Однако это прекрасно работает, если бот использует только один пользователь. Если другой пользователь одновременно использует бота, эта информация об идентификаторе пользователя передается между пользователями, поскольку она хранится в глобальной переменной. Как мне это решить? Пожалуйста помоги.
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();
}