2016-04-21 29 views
1

我正在嘗試使用NodeJS,Express和Heroku服務器創建Facebook chatbot。Facebook messenger bot錯誤「TypeError:無法讀取未定義的屬性'0'。」

我在Heroku上創建了我的webhook,並通過Facebook進行了驗證和保存。然後我運行這段代碼將我的webhook連接到Facebook。

curl -ik -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=<token>" 

返回{success:true}。

因此,我開始添加回復傳入消息的代碼,但似乎無法讓它接收發送的信息。每當我發送消息,我都沒有回覆。

一切都連接並正在運行,但我得到這個錯誤「TypeError:無法讀取未定義的屬性'0'是因爲我沒有從Facebook發送到我的webhook的消息信息。這是代碼行是空:

messaging_events = req.body.entry[0].messaging; 

這裏是我的全碼:

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

var app = express(); 
var port = process.env.PORT || 3000; 

// body parser middleware 
app.use(bodyParser.urlencoded({ extended: true })); 

app.get('/', function (req, res) { 
    if (req.query['hub.verify_token'] === '8FKU9XWeSjnZN4ae') { 
    res.send(req.query['hub.challenge']); 
    console.log("app.get ran") 
    res.sendStatus(200) 
    } 

    console.log("Error: wrong validation token") 
}) 

app.post('/', function (req, res) { 
    messaging_events = req.body.entry[0].messaging; 
    console.log("app.post ran") 
    for (i = 0; i < messaging_events.length; i++) { 
    event = req.body.entry[0].messaging[i]; 
    sender = event.sender.id; 
    if (event.message && event.message.text) { 
     text = event.message.text; 
     sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200)); 
    } 
    } 
    res.sendStatus(200); 
}); 

app.listen(port, function() { 
    console.log('Listening on port ' + port); 
}); 

var token = "<myToken>"; 

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

這裏是我的Heroku的日誌:

Heroku Logs

所以我很困惑至於爲什麼當我的webhook連接到Facebook並且他們正在通信時我沒有收到消息數據。我也確保我已經檢查了所有需要的訂閱字段。

任何人都看到問題了嗎?任何幫助表示讚賞。謝謝!

編輯:我按照本指南的方式 - https://developers.facebook.com/docs/messenger-platform/quickstart

回答

2

我有同樣的問題。你可以在bodyParser.urlencoded()之前添加app.use(bodyParser.json())嗎?

+0

是的!謝謝你的工作! –

相關問題