【问题标题】:Waiting for a text reply with a Facebook messenger bot等待 Facebook Messenger 机器人的文本回复
【发布时间】:2016-09-05 16:39:56
【问题描述】:

我正在编写一个 Facebook Messenger 机器人,并试图在回发后存储文本回复。我的意思是我有一条消息可以发回一个帖子,根据他们选择的选项,他们可以输入一条消息,然后我存储该文本。问题是我只想在他们为回发消息选择一个选项后存储此文本。文本也可以是任何东西,所以我不能为它写一个 if 语句。

这是我的代码:

app.post('/', function (req, res) {
  messaging_events = req.body.entry[0].messaging;
  for (i = 0; i < messaging_events.length; i++) {

    event = req.body.entry[0].messaging[i];
    sender = event.sender.id;

    if (event.message && event.message.text) {
      text = event.message.text;

      if (text == "Start") {
        sendTextMessage(sender, "Hey User! I'm a bot");
      }
    }

    else if (event.postback) {
      // These are for chosing availibility
      if (JSON.stringify(event.postback) == '{"payload":"postback"}') {
        setTextMessage(sender, "Postback recieved");
      }
    }
}

一切都已设置并正在运行。但是当收到回发时,我想在完成之前等待用户的回复,这样我就可以保存文本。就像我之前说的,它可以是任何东西,这意味着我不能像“开始”那样只写一个 if 语句。我也只想在他们点击回发按钮后保存文本。

我正在考虑添加一个while循环并在完成回发功能之前等待接收文本,但无法弄清楚。

那么在我发送带有回发的消息后,我将如何等待文本呢?

感谢任何帮助,谢谢!

【问题讨论】:

    标签: node.js facebook bots facebook-chatbot


    【解决方案1】:

    我也尝试了很长时间,以找到一种方法来使用消息 ID 和消息时间来存储发件人发送的文本,但无济于事。唯一对我有用的技术是声明一个名为“state”的全局变量,然后在我发送的每条消息的末尾,我将变量“state”的值更改为“001”或“002”之类的值。因此,如果我想访问对我发送的特定消息的回复,我会输入if (state === '001')。这是一个例子:

    var state = '000';
    
    // if user sends me 'I want dogs'
        sendTextMessage(sender, "How many dogs?");
        state = '001';
    
    // if user sends me 'I want cats'
        sendTextMessage(sender, "How many cats?);
        state = '002';
    
    /* now if I want to access the user's response to how many cats they want, I simply write in an if statement:
    if (state === '002' && /^\d+$/.test(text)) {
        var numberOfCatsWanted = text
    }
    
    // in this last part I essentially write 'if the state is '002' and the text contains numbers then a new variable will store the value of the text
    

    我希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      基本上没有办法满足您的要求。 所以你唯一能做的就是要求用户输入带有一些前缀字符的文本,例如使用“?”或“#”或其他您可以解析的内容。

      【讨论】:

        猜你喜欢
        • 2017-04-12
        • 2020-11-07
        • 2017-01-28
        • 1970-01-01
        • 2017-10-06
        • 2016-08-20
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        相关资源
        最近更新 更多