2016-04-21 1 views
1

Ich versuche, einen Facebook-Chatbot mit NodeJS, Express und einem Heroku-Server zu erstellen.Facebook Messenger Bot Fehler "TypeError: Kann die Eigenschaft '0' von undefined nicht lesen."

Ich habe meinen Webhook auf Heroku erstellt und von Facebook verifiziert und gespeichert. Ich habe dann diesen Code ausgeführt, um meinen Webhook mit Facebook zu verbinden.

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

Dies ergab {Erfolg: Wahr}.

Also habe ich angefangen, Code hinzuzufügen, der auf eingehende Nachrichten antworten würde, aber ich kann nicht scheinen, um die gesendeten Informationen zu erhalten. Immer wenn ich eine Nachricht sende, bekomme ich keine Antwort.

Alles ist verbunden und läuft, aber dieser Fehler bekomme ich "TypeError: Kann Eigenschaft '0' von undefined" nicht lesen, weil ich nicht die Nachricht Informationen von Facebook an meinen Webhook gesendet bekomme. Dies ist die Codezeile, die leer ist:

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

Hier ist meine vollständige Code:

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

Hier sind meine Heroku Protokolle:

Heroku Logs

So verwirrt Ich bin warum ich die Nachrichtendaten nicht bekomme, wenn mein Webhook mit Facebook verbunden ist und sie kommunizieren. Ich stellte auch sicher, dass ich alle erforderlichen Abonnementfelder überprüft hatte.

Wer sieht das Problem? Jede Hilfe wird geschätzt. Vielen Dank!

Edit: Ich bin nach dieser Anleitung durch die Art und Weise - https://developers.facebook.com/docs/messenger-platform/quickstart

Antwort

2

hatte ich das gleiche Problem. Können Sie app.use (bodyParser.json()) vor bodyParser.urlencoded()) hinzufügen?

+0

Ja! Danke, das hat funktioniert! –

Verwandte Themen