3

Ich habe einen Fehler mit der Nachricht bot api. Aus irgendeinem Grund feuert es mehrere 20 zu einem Zeitpunkt der Nachrichten an einen bestimmten Benutzer. Ich verwende Heroku auf Knoten. Ich habe keine Ahnung, warum es das macht? Jede Hilfe würde sehr geschätzt werden. enter image description herefacebook messager bot api mit Knoten js sendet mehrere Antworten

"use strict"; 
var express = require("express"); 
var app = express(); 
var bodyParser = require('body-parser'); 
var request = require('request'); 

app.use(bodyParser.json()); 

app.get('/', function(req, res){ 

    res.send('hello'); 

}); 


app.get('/webhook', function (req, res) { 
    if (req.query['hub.verify_token'] === 'my_voice_is_my_password_verify_me') { 
     res.send(req.query['hub.challenge']) 
    } 
    res.send('Error, wrong token') 
}) 
app.post('/webhook', function (req, res) { 
    let messaging_events = req.body.entry[0].messaging; 
    for (let i = 0; i < messaging_events.length; i++) { 
     let event = req.body.entry[0].messaging[i] 
     let sender = event.sender.id 
     if (event.message && event.message.text) { 
      let text = event.message.text 
      sendTextMessage(sender, "Text received, echo: " + text.substring(0, 200)) 
     } 
    } 
    res.sendStatus(200) 
}) 

function sendTextMessage(sender, text) { 
    let messageData = { text:text } 
    request({ 
     url: 'https://graph.facebook.com/v2.6/me/messages', 
     qs: {access_token: process.env.PAGE_ACCESS_TOKEN}, 
     method: 'POST', 
     json: { 
      recipient: {id:sender}, 
      message: messageData, 
     } 
    }, function(error, response, body) { 
     if (error) { 
      console.log('Error sending messages: ', error) 
     } else if (response.body.error) { 
      console.log('Error: ', response.body.error) 
     } 
    }) 
} 







app.listen(process.env.PORT || 8080); 
+0

Ihr Code sieht OK aus. Was sind alle Werte, die Sie gesendet haben und in welcher Reihenfolge? –

+0

Hat jemand eine Lösung für dieses Problem gefunden? Zur Zeit speichere ich jede Nachricht und überprüfe den Zeitunterschied zwischen der nächsten Nachricht. Wenn es in Mikrosekunden ist, ignoriere ich es. Dies scheint meine Absicht für jetzt zu lösen. – thekosmix

Antwort

1

Es ist wahrscheinlich ein Fehler in dem Client-Messenger. Sie haben viele Probleme mit der Android App. Überprüfen Sie this bug und this bug.

Ich empfehle Ihnen, eine rate limiter mit einer niedrigen Grenze - maximal 1 Anfrage pro Sekunde, zum Beispiel - um das Problem zu lösen. Dies verhindert auch mögliche Fehler in den Messenger-Clients in der Zukunft. Oder Sie können darauf warten, dass sie das Problem in den Clients lösen, aber denken Sie daran, dass Benutzer mit einer veralteten Version Ihrem Bot Probleme bereiten.

Beachten Sie außerdem, dass Sie in Ihren Nachrichtenereignissen Lieferquittungen empfangen können. Ziehen Sie in Betracht, das folgende Code-Snippet in Ihren Code einzufügen, um diese Ereignisse zu ignorieren.

... 
for (let i = 0; i < messaging_events.length; i++) { 
    let event = req.body.entry[0].messaging[i] 
    if (event.hasOwnProperty('delivery')) { 
     continue; 
    } 

    ... 
} 
... 
Verwandte Themen