Как я могу запретить моему приложению Nodejs публиковать два запроса - PullRequest
0 голосов
/ 28 ноября 2018

Я пишу приложение для бота на Facebook в Nodejs.Я разделил большинство функций в моем коде на отдельные js-файлы, а затем использовал экспорт для предоставления функций другим файлам.Код не выдает ошибок, однако, когда я запускаю его каждый раз, когда отправляю ему сообщение, он отвечает двумя сообщениями, как показано на следующем рисунке.enter image description here

Код для отдельных файлов показан ниже

Код для index.js

'use strict'

const express = require('express')
const bodyParser = require('body-parser')
const request = require('request')
const receivers = require('./sources/messageReceivers.js')

const cool = require('cool-ascii-faces')

const app = express()

const PORT = process.env.PORT || 5000

app.set('port', (PORT));
console.log("running on port "+PORT);
app.use(bodyParser.urlencoded({extended: false}))

app.use(bodyParser.json())

//ROUTES
app.get('/', function(req, res){
    res.send("Hie I am a faceboook messenger chatbot, please use messenger to converse with me.")
})

// for facebook
app.get('/webhook', function(req, res){
    if (req.query['hub.verify_token']==="mrfishbot") {
        res.status(200).send(req.query['hub.challenge'])
        console.log("verify token verified");
    }else{
        res.status(403).end()
        res.send("Wrong token")
    }
})

//Post event

app.post('/webhook', (req, res) =>{
    var orderItem = "null"
    var userPhone = "null"
    if(req.body.object === 'page'){
        let messaging_events = req.body.entry[0].messaging
        for (let i = 0; i < messaging_events.length; i++){
            let event = messaging_events[i]
            let sender = event.sender.id

            console.log("Now we are on event number %d", i)
            //console.log("You texted that***** %s",msgTxt)
            console.log(event)

            if (event.postback) {
                orderItem = receivers.receivedPostBack(event)
            }else if(event.message){
                if(event.message.text){
                    userPhone = receivers.receivedMessage(event)
                }else if (event.message.quick_reply) {
                    userPhone = receivers.receivedMessage(event)
                }
            }   
        }
        res.status(200).end()
    }
})

Код для messageReceivers.js

const fbservices = require('./fbservices.js')

exports.receivedMessage = function (event){
    console.log("received message method fired")
    var senderId = event.sender.id
    var message = event.message

    var value = "null"

    var greeting = ["hello", "hi", "hie", "HI", "HELLO", "HIE", "hey", "HEY", "Hey", "Hello", "Hi"]

    console.log(event)

    if(message.quickReply){
        var quickReplyPayload = message.quickReply.payload

        return "null"
    }else if (message.text) {
        console.log("The message was a text message")

        if (is_in_array(message.text, greeting)) {
            console.log("Message is a greeting")

        fbservices.sendText(senderId, "Hello to you too")

        }

    }

}

function is_in_array(s,your_array) {
    for (var i = 0; i < your_array.length; i++) {
        if (your_array[i].toLowerCase() === s.toLowerCase()) return true
    }
    //return false
}

Код для fbservices.js

const request = require('request')
const bodyParser = require('body-parser')

let PAGE_ACCESS_TOKEN = "XXXXXXXXXXXX"
let FB_RESPONSE_URI = "https://graph.facebook.com/v2.6/me/messages"

//Responsible for sending the actual message to facebook
exports.sendText = function (sender, textM){
    let messageData = "{text: text}"
    console.log("The reply is: %s",textM)
    request({
        "url": FB_RESPONSE_URI,
        "qs": {"access_token": PAGE_ACCESS_TOKEN},
        "method": 'POST',
        "json": {
            message_type:"RESPONSE",
            recipient: {id: sender},
            message: {text: textM.substring(0, 100)}
        }
    }, function(error, response, body){
        if(error){
            console.log("sending error")
        }else if(response.body.error){
            console.log("response body error")
            console.log(response)
        }
    })
}

Ваша помощь будет принята с благодарностьювы.

...