【问题标题】:how to collect data from user with the facebook messenger bot api in node js如何使用节点 js 中的 facebook messenger bot api 从用户那里收集数据
【发布时间】:2016-12-18 20:21:35
【问题描述】:

我正在节点中构建一个信使机器人。我希望它收集用户输入数据并进行对话或提问,但我的代码不起作用。不起作用的部分是如果我键入相同的代码,它只会继续到下一个 else if 块。其次,数组没有在第一个 if 语句之后捕获文本。有更好的方法吗?有人可以提供代码吗?

我的代码如下。我想要的就是这个 iimage:

var currentbot = 0;
var awnswers = [];
app.post('/webhook', function(req, res) {
  var events = req.body.entry[0].messaging;
  for (i = 0; i < events.length; i++) {
    var event = events[i];
    if (event.message && event.message.text) {
      var text = event.message.text;
      if (text == "hi") {
        start(event.message.text, event.sender.id);
      }
    }
  }
  res.sendStatus(200);
});
var awnswers = [];

function start(text, id) {
  if (count == 0) {
    sendTextMessage('hello lets order!', id);
    arr.push(text);
    console.log(awnswers);
    count = 1;
  } else if (count == 1) {
    sendTextMessage('what size do you want?', id);
    arr.push(text);
    console.log(awnswers);
    count = 2;
  } else if (count == 2) {
    sendTextMessage('its on its way!', id);
    arr.push(text);
    console.log(awnswers);
    count = 0;
  }
}

function sendTextMessage(messageText, recipientId) {
  var messageData = {
    recipient: {
      id: recipientId
    },
    message: {
      text: messageText
    }
  };
  callSendAPI(messageData);
}

function callSendAPI(messageData) {
  request({
    uri: 'https://graph.facebook.com/v2.6/me/messages',
    qs: {
      access_token: process.env.access_token
    },
    method: 'POST',
    json: messageData
  }, function(error, response, body) {
    if (!error && response.statusCode == 200) {
      var recipientId = body.recipient_id;
      var messageId = body.message_id;
      console.log("Successfully sent generic message with id %s to recipient %s", messageId, recipientId);
    } else {
      console.error("Unable to send message.");
      console.error(response);
      console.error(error);
    }
  });
}

【问题讨论】:

  • "我拥有的代码不起作用" -- 究竟是什么"不起作用"?是否有错误消息(和行号)? StackOverflow 不是代码编写或调试服务。请提供一个更简洁的问题。
  • @LambdaNinja 不起作用的部分是如果我键入相同的代码,它只会继续到下一个 else if 块。第二个数组没有捕获第一个 if 语句之后的文本。

标签: chat artificial-intelligence bots facebook-messenger messenger


【解决方案1】:

我认为我看到的主要问题是:

  1. Start() 仅在 text == hi 时调用
  2. 计数未定义
  3. 你推送到数组 'arr' 不是,awnswers

您可以通过以下方式解决这些问题:

  1. 对每条消息调用 start()
  2. 定义计数如 var count = 0;在文件顶部,var currentbot 旁边
  3. awswers.push(文本);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2017-05-02
    • 1970-01-01
    相关资源
    最近更新 更多