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)
这个"错误"被报告给Facebook,但听起来他们不会解决它.请阅读Facebook上的帖子票线程这里的详细信息,他们说是怎么回事.(感谢Louise让Facebook关注此事)
我向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)
他们应该一个接一个地去。如果需要,您还可以将这些函数相互嵌入。
归档时间: |
|
查看次数: |
9218 次 |
最近记录: |