【问题标题】:Is it possible to maintain user sessions for facebook messenger bot?是否可以维护 facebook messenger bot 的用户会话?
【发布时间】:2017-11-18 00:49:55
【问题描述】:

我正在开发一个 facebook messenger 机器人,webhook 是用 node.js 编写的,它侦听来自用户的消息并做出响应,对话流程在模块中进行引导和结构化。每个模块都有一个模块名称和机器人语句以及一个子模块的引用。外汇充足有一个带有声明的欢迎模块 “你好,我是很棒的机器人,我可以提供以下信息 1:- 电影 2:-音乐” 现在欢迎模块有两个子模块电影和音乐的引用,对话必须根据用户响应在这两个方向之一进行,例如如果用户响应电影,机器人将从电影中提取模块语句模块并发送回facebook,所以对用户的电影回复就像 “令人兴奋,你想知道什么样的电影?动作片、冒险片、科幻片”,用户再次回复他想知道的东西,机器人拿起模块语句并发回给用户. 现在这一切都很好,但这里的问题是,如果有两个用户说用户 A 和用户 B。用户 A 说嗨,机器人说欢迎你想知道什么电影或音乐?用户响应电影,机器人抛出什么样的电影动作冒险或科幻电影,但随后用户 B 打招呼,因此机器人响应与用户 A 相同的当前模块。 这是代码

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 的对话状态,我该怎么做?我希望这是有道理的,请询问您是否需要进一步了解。

【问题讨论】:

    标签: node.js mongodb session logic facebook-messenger-bot


    【解决方案1】:

    您应该阻止作用域sender,然后将其从一个模块传递到另一个模块。这将确保每个传入的 PSID 都遵循自己的路径。

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2018-11-14
      • 2016-10-27
      • 2012-10-29
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多