2016-04-25 18 views
0

Ich mache einen Facebook-Chatbot und benötige einige grundlegende Benutzerinformationen.Abrufen von Facebook Benutzerinformationen aus einer Get-Anfrage mit NodeJS

Ich schreibe meinen Bot in NodeJS und im Moment habe ich meinen Bot als Echobot laufen. Alles, was es tut, ist, eine Benutzernachricht zu nehmen und ihnen mit demselben Text zu antworten.

Ich wollte den Benutzer first_name und last_name von Facebook zu verwenden, in der Nachricht erhalten. Ich verwende die Facebook Graph API und ich fand dies in der Facebook-Dokumentation:

curl -X GET "https://graph.facebook.com/v2.6/<USER_ID>?fields=first_name,last_name,profile_pic&access_token=<PAGE_ACCESS_TOKEN>" 

so lief ich in meinem Terminal und wurde die richtige Information zurückgegeben.

Ich möchte nur diese CURL-Funktion in meinem Chatbot-Code in NodeJS verwenden. Ich habe diese Dokumentation durchgesehen: https://nodejs.org/docs/v0.5.2/api/http.html#http.request, konnte es aber nicht herausfinden.

Also wie würde ich die gleiche CURL-Anfrage in NodeJs ausführen, um den Namen zu erhalten, wenn der Benutzer?

Hier ist mein Code:

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

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

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://#@ds013911.mlab.com:13911/wyrdbot'); 

var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open', function() { 
    console.log("We're connceted") 
}); 

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

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

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

    res.send(req.query['hub.challenge']); 
}) 

app.post('/', function (req, res) { 
    console.log("app.post ran") 
    messaging_events = req.body.entry[0].messaging; 
    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; 

      if (text === 'Generic') { 
       sendGenericMessage(sender); 
       continue; 
      } 

      sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200)); 

     } 
    } 

    res.sendStatus(200); 
}); 

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

function sendGenericMessage(sender) { 
    messageData = { 
     "attachment": { 
     "type": "template", 
      "payload": { 
       "template_type": "generic", 
       "elements": [{ 
        "title": "First card", 
        "subtitle": "Element #1 of an hscroll", 
        "image_url": "http://messengerdemo.parseapp.com/img/rift.png", 
        "buttons": [{ 
         "type": "web_url", 
         "url": "https://www.messenger.com/", 
         "title": "Web url" 
        },{ 
         "type": "postback", 
         "title": "Postback", 
         "payload": "Payload for first element in a generic bubble", 
        }], 
       },{ 
        "title": "Second card", 
        "subtitle": "Element #2 of an hscroll", 
        "image_url": "http://messengerdemo.parseapp.com/img/gearvr.png", 
        "buttons": [{ 
         "type": "postback", 
         "title": "Postback", 
         "payload": "Payload for second element in a generic bubble", 
        }], 
       }] 
      } 
     } 
    }; 

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

Jede Hilfe sehr geschätzt wird. Vielen Dank!

Antwort

0

Werfen Sie einen Blick auf facebook-node-sdk.

Beispiel:

let url = "https://graph.facebook.com/v2.6/<USER_ID>?fields=first_name,last_name,profile_pic&access_token=<PAGE_ACCESS_TOKEN>"; 
facebook.api(url, function(err, data){ 
    if(err){ 
     console.error(err); 
     res.sendStatus(502); 
     res.end(); 
    } 
    else{ 
     //Do some stuff with the data object 
    } 
}); 
+0

Cool, danke! –

Verwandte Themen