シンプルな 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.")
}
});
}
それを使用して応答を送信します。
sendTextMessage(user, "Hello!");
sendTextMessage(user, "1");
sendTextMessage(user, "2");
sendTextMessage(user, "3");
request
メッセージをキューに入れ、それぞれの成功コールバックの後に一度に 1 つのメッセージのみを送信する単純なキューを実装してみました。これは、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 */);
アップデート
この「バグ」は Facebook に報告されましたが、修正する予定はないようです。彼らが言っていることの詳細については、こちらの Facebook の投稿のチケット スレッドをお読みください。(これについてFacebookの注目を集めてくれたLouiseに感謝します)