Facebook メッセンジャー ボット用の node.js Webhook を作成しました。ボットはダイアログ フローに組み込まれており、データベースは firebase に接続されています。ログインするためにWebhookで関数が呼び出されたときの質問です。ログイン後、データベースからユーザーIDを取得します。これをコードのどこかに保存して、ユーザーセッション全体でユーザーID情報を利用できるようにします。グローバル変数に格納しています。ただし、ボットを使用しているユーザーが 1 人だけの場合、これは問題なく機能します。別のユーザーが同時にボットを使用している場合、このユーザー 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();
}