Я пишу приложение для бота на Facebook в Nodejs.Я разделил большинство функций в моем коде на отдельные js-файлы, а затем использовал экспорт для предоставления функций другим файлам.Код не выдает ошибок, однако, когда я запускаю его каждый раз, когда отправляю ему сообщение, он отвечает двумя сообщениями, как показано на следующем рисунке.
Код для отдельных файлов показан ниже
Код для 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)
}
})
}
Ваша помощь будет принята с благодарностьювы.