3

J'ai une erreur avec le message bot api. Pour une raison quelconque, il déclenche plusieurs comme 20 à la fois des messages à un certain utilisateur. J'utilise heroku sur le noeud. Je n'ai pas la moindre idée de pourquoi il fait ça? Toute aide serait très appréciée. enter image description herefacebook messeger bot api avec le noeud js envoie plusieurs réponses

"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

Votre code semble OK. Quelles sont toutes les valeurs que vous avez envoyées et dans quel ordre? –

+0

Quelqu'un at-il trouvé une solution à ce problème? actuellement je cache chaque message et vérifie la différence de temps entre le message suivant. Si c'est en microsecondes, je l'ignore. Cela semble résoudre mon but pour le moment. – thekosmix

Répondre

1

Il est probablement un bogue dans le client du Messenger. Ils ont beaucoup de problèmes avec l'application Android. Vérifiez this bug et this bug.

Je vous recommande d'utiliser un rate limiter avec une limite basse - max 1 demande par seconde, par exemple - pour résoudre le problème. Cela permettra également d'éviter d'éventuels bugs dans les clients du Messenger à l'avenir. Ou vous pouvez attendre qu'ils résolvent le problème chez les clients, mais gardez à l'esprit que les utilisateurs dont la version est obsolète causeront des problèmes à votre robot. En outre, sachez que vous pouvez recevoir des accusés de réception dans vos événements de message. Pensez à insérer l'extrait ci-dessous dans votre code pour ignorer ces événements.

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

    ... 
} 
...