带有节点js的facebook messeger bot api发送多个回复

我与消息bot api有一个错误。 由于某种原因,它在发送给某个用户的消息的时候会像多个20一样发射。 我在节点上使用heroku。 我不知道为什么这样做? 任何帮助将非常感激。 在这里输入图像描述

"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); 

这可能是Messenger客户端中的一个错误。 他们与Android应用程序有很多问题。 检查这个错误和这个错误 。

我build议你使用一个低限制的速率限制器 – 例如每秒最多1个请求 – 来解决这个问题。 这也将防止将来的Messenger客户端中可能存在的错误。 或者你可以等待他们解决客户端的问题,但请记住,过时版本的用户会给你的机器人造成麻烦。

另外,请考虑您可以在消息事件中收到送达回执。 考虑在代码中插入下面的代码片段来忽略这些事件。

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