2017-11-17 6 views
0

페이스 북의 메신저 봇에서 작업하고 있습니다. 웹 훅은 node.js로 작성되어 사용자의 메시지를 듣고 응답하며, 대화의 흐름은 모듈로 구성되어 있습니다. 각 모듈에는 모듈 이름과 bot-statement 및 하위 모듈에 대한 참조가 있습니다. Forex 충분한 거기 진술을 가진 환영 단위가있다 "안녕하세요 나는 뒤에 오는 정보 1를 제안 할 수있는 중대한 로봇이다 : - 영화 2 : - 음악" 지금 환영받은 단위는 2 개의 아이 모듈 영화 및 음악, 대화의 참고가있다 사용자 응답에 따라이 두 방향 중 하나에서 진행해야합니다. 예를 들어 사용자가 영화에 응답하면 봇은 영화 모듈에서 모듈 문을 가져 와서 다시 페이스 북으로 보내어 영화에 대한 사용자의 회신을 좋아합니다 "흥분, 어떤 종류의 영화에 대해 알고 싶습니까? 액션, 모험, 공상 과학"그리고 다시 사용자가 알고 싶은 것으로 회신하고 봇이 모듈 선언문을 집어 들고 사용자. 이제이 모든 것이 효과적이지만 문제는 두 명의 사용자가 사용자 A와 사용자 B를 말하면 사용자 A는 안녕이라고 말합니다. 로봇은 영화 나 음악을 알고 싶은 것을 환영합니다. 사용자가 영화에 반응하고 어떤 종류의 영화 액션 어드벤쳐 또는 공상 과학을 던집니다.하지만 안녕하세요라고하는 사용자 B가 오면 로봇 A는 사용자 A와 동일한 현재 모듈로 응답합니다. 여기에 코드facebook messenger bot에 대한 사용자 세션을 유지 관리 할 수 ​​있습니까?

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의 대화 상태에 종속되지 않도록 각 새 사용자마다 별도로 정의되기를 원합니다. 어떻게 할 수 있습니까? 나는 그것이 더 이해할 필요가 있는지 물어 보시기 바랍니다.

답변

0

범위 sender을 차단 한 다음 모듈에서 모듈로 전달해야합니다. 그러면 들어오는 각 PSID가 고유 한 경로를 따라 가게됩니다.