Sto giocando intorno con la costruzione di un semplice chatbot Facebook Messenger e sto avendo problemi a inviare messaggi in sequenza.
Nell'esempio di cui sopra, si dovrebbe aver scritto Ciao!, 1, 2, 3 in ordine. Attualmente sto seguendo la documentazione di Facebook trovate qui di attuare questa semplice funzione messaggio di testo. Ho incluso il mio codice Server Express Node.JS qui di seguito:
Definire la sendTextMessage()funzione di:
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.)
}
});
}
Usandolo per inviare una risposta:
sendTextMessage(user, Hello!);
sendTextMessage(user, 1);
sendTextMessage(user, 2);
sendTextMessage(user, 3);
Ho anche cercato di attuare una semplice coda che mette in coda i messaggi e invia solo un messaggio alla volta dopo ogni request's callback successo. Questo mi sta facendo il sospetto che io non sono l'interazione con l'API Messenger in modo corretto.
Qualcuno ha riscontrato questo problema? Come posso ottenere messaggi da inviare in sequenza? Grazie!
MODIFICARE
Perché ho implementato un semplice coda, ma ancora si verifica questo problema, ho compreso il codice per il mio sistema semplice coda di qui.
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 */);
AGGIORNARE
Questo bug è stato segnalato per Facebook, ma suona come se non si ha intenzione di risolvere il problema . Si prega di leggere il thread biglietto sul post di Facebook qui per maggiori dettagli su quello che dicono che sta succedendo. (Grazie a Louise per ottenere l'attenzione di Facebook su questo)














