Facebook Messenger僵尸不按顺序发送消息

Bri*_*ian 13 facebook chatbot node.js messenger facebook-chatbot

我正在玩一个简单的Facebook Messenger聊天机器人,我无法按顺序发送消息.

在此输入图像描述

在上面的例子中,它应该按顺序打印"Hello!","1","2","3".我目前正在关注这里发现的Facebook文档来实现这个简单的文本消息功能.我在下面包含了我的Express Node.JS服务器代码:

定义sendTextMessage()功能:

var request = require("request");
function sendTextMessage(user, text) {
    messageData = {
        text: text
    };
    request({
        url: "https://graph.facebook.com/v2.6/me/messages",
        qs: {access_token: PAGE_ACCESS_TOKEN},
        method: "POST",
        json: {
            recipient: {id: user},
            message: messageData
        }
    }, function(error, response, body) {
        if (error) {
            console.log("Error sending message: ", error);
        } else if (response.body.error) {
            console.log("Error: ", response.body.error);
        } else {
            console.log("Message successfully send.")
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

用它来发送回复:

sendTextMessage(user, "Hello!");
sendTextMessage(user, "1");
sendTextMessage(user, "2");
sendTextMessage(user, "3");
Run Code Online (Sandbox Code Playgroud)

我甚至尝试实现一个对消息进行排队的简单队列,并且在每次request成功回调后一次只发送一条消息.这让我怀疑我没有正确地与Messenger API交互.

有没有人遇到过这个问题?如何按顺序发送消息?谢谢!

编辑

因为我实现了一个简单的队列但仍然遇到这个问题,我在这里包含了我的简单队列系统的代码.

var queue = [];
var queueProcessing = false;

function queueRequest(request) {
    queue.push(request);
    if (queueProcessing) {
        return;
    }
    queueProcessing = true;
    processQueue();
}

function processQueue() {
    if (queue.length == 0) {
        queueProcessing = false;
        return;
    }
    var currentRequest = queue.shift();
    request(currentRequest, function(error, response, body) {
        if (error || response.body.error) {
            console.log("Error sending messages!");
        }
        processQueue();
    });
}

queueRequest(/* Message 1 */);
queueRequest(/* Message 2 */);
queueRequest(/* Message 3 */);
Run Code Online (Sandbox Code Playgroud)

UPDATE

这个"错误"被报告给Facebook,但听起来他们不会解决它.请阅读Facebook上的帖子票线程这里的详细信息,他们说是怎么回事.(感谢Louise让Facebook关注此事)

Lou*_*ise 9

我向Facebook提交了一个关于此问题的错误报告,因为我遇到了同样的问题.他们承认这确实是一个错误,正在努力解决它:https://developers.facebook.com/bugs/565416400306038


Eri*_*ier -1

您可以尝试将它们放入 setTimeout 函数中,以便每个函数都在一段时间后运行。

所以替换这个:

sendTextMessage(user, "Hello!");
sendTextMessage(user, "1");
sendTextMessage(user, "2");
sendTextMessage(user, "3");
Run Code Online (Sandbox Code Playgroud)

有了这个:

sendTextMessage(user, "Hello!");              

// 1 second

setTimeout(function() {
    sendTextMessage(user, "1");
}, 1000)

// 2 seconds

setTimeout(function() {
    sendTextMessage(user, "2");
}, 2000)

// 3 seconds

setTimeout(function() {
    sendTextMessage(user, "3");
}, 3000)    
Run Code Online (Sandbox Code Playgroud)

他们应该一个接一个地去。如果需要,您还可以将这些函数相互嵌入。

  • 不幸的是,我需要一个更“可扩展”的解决方案。我希望 Messenger API 中有一些我没有正确使用的东西,但除了上面显示的我使用的内容之外,文档在任何细节上似乎都非常稀疏。 (3认同)