Можно ли вести пользовательские сессии для бота в Facebook messenger?
Я работаю над ботом мессенджера в Facebook, webhook написан на node.js, который прослушивает сообщения от пользователя и отвечает обратно, поток беседы направляется и структурируется в модули. Каждый модуль имеет имя модуля и бот-оператор и ссылку на дочерние модули. На форексе достаточно модуля приветствия с заявлением "Здравствуйте, я отличный бот, я могу предложить следующую информацию 1:- Фильмы 2:-Музыка". Теперь в модуле приветствия есть ссылки на два дочерних модуля: "Фильмы и музыка". прогресс в одном из этих двух направлений, основанный на ответе пользователя, например, если пользователь отвечает на Фильмы, бот заберет оператор модуля из модуля фильмов и отправит обратно на Facebook, поэтому ответ пользователю на фильмы будет выглядеть как "захватывающий" какие фильмы вы хотите знать о "боевике", "приключении", "фантастике", и пользователь снова отвечает тем, о чем хочет знать, и бот берет оператор модуля и отправляет его обратно пользователю. теперь все это работает хорошо, но проблема здесь в том, что если два пользователя говорят "пользователь А" и "пользователь Б.", пользователь "А" говорит "Привет", бот говорит "добро пожаловать", что вы хотите знать о фильмах или музыке? пользователь отвечает "Фильмы", и бот выдает какие-нибудь фильмы о приключенческом боевике или научно-фантастическом фильме, но затем появляется пользователь "Б", который говорит "привет", поэтому бот отвечает тем же текущим модулем, который предназначен для пользователя А. Вот код
var sender;
var ModID=0;
exports.Facebook_bot = function(req, res) {
// console.log(req.body);
var messaging_events = req.body.entry[0].messaging;
// console.log(messaging_events);
for (var i = 0; i < messaging_events.length; i++) {
var event = messaging_events[i];
sender = event.sender.id;
// console.log('this is event',event);
if (event.message && event.message.text) {
var msg = event.message.text;
console.log( "this is recived text",msg);
// sendText(sender, "text echo" + msg.substring(0, 100));
}
}
res.send(200);
if (ModID == 0) {
ModID = "71072";
botSchema.findOne({ Bot_name: "My Bot" }, function(err, data) {
for (var i = 0; i < data.Modules.length; i++) {
var back = data.Modules[i].ModuleResponse;
if (data.Modules[i].ModuleID === ModID) {
for (var j = 0; j < back.length; j++) {
console.log("back", back[j].Response);
if (back[j].Response === msg || back[j].Response === "-input-") {
//got to module ModID
ModID = back[j].TransBotID;
// console.log("else",ModID);
// console.log(back[j]);
}
}
}
}
}).then(function(data) {
for (var i = 0; i < data.Modules.length; i++) {
if (data.Modules[i].ModuleID === ModID) {
sendText(
sender,
data.Modules[i].ModuleStatement.substring(0, 500)
);
sendUI(sender,data.Modules[i].FBUI)
console.log(data.Modules[i].FBUI);
} else if (ModID === null) {
console.log(false);
}
}
});;
} else {
botSchema
.findOne({ Bot_name: "HIA Airport" }, function(err, data) {
// console.log(data)
for (var i = 0; i < data.Modules.length; i++) {
var back = data.Modules[i].ModuleResponse;
// console.log(back);
if (data.Modules[i].ModuleID === ModID && back != null) {
for (var j = 0; j < back.length; j++) {
console.log("back 2", back[j].Response);
if (back[j].Response === msg || back[j].Response === "-input-") {
ModID = back[j].TransBotID;
console.log("Go to :", ModID);
}
}
}
}
})
.then(function(data) {
for (var i = 0; i < data.Modules.length; i++) {
if (data.Modules[i].ModuleID === ModID) {
sendText(
sender,
data.Modules[i].ModuleStatement.substring(0, 500)
);
console.log(data.Modules[i].ModuleStatement);
} else if (ModID === null) {
console.log(false);
}
}
});
}
//end if
}; переменные sender и ModID определены глобально. Я хочу, чтобы он определялся отдельно для каждого нового пользователя, чтобы состояние диалога для пользователя B не зависело от состояния диалога для пользователя B, как я могу это сделать? Я надеюсь, что это имеет смысл, пожалуйста, спросите, если вам нужно узнать что-нибудь дальше.
1 ответ
Вы должны заблокировать сферу sender
а затем передать его от модуля к модулю. Это обеспечит каждому входящему PSID свой собственный путь.