Skip to content

Instantly share code, notes, and snippets.

@BonsoirDiep
Last active April 2, 2018 02:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BonsoirDiep/892884e9163ca7709ed9a7c589fe751f to your computer and use it in GitHub Desktop.
Save BonsoirDiep/892884e9163ca7709ed9a7c589fe751f to your computer and use it in GitHub Desktop.
Easy Facebook Conversations without Webhook : /graph.facebook.com/v2.12 [step by step]
var request = require('request');
var express = require('express');
var app = express();
var session = require('express-session');
var FB_PAGE_ID = '<FB_PAGE_ID>';
var sess = {
secret: 'keyboard cat',
cookie: {},
resave: true,
saveUninitialized: true
}
if (app.get('env') === 'production') {
app.set('trust proxy', 1) // trust first proxy
sess.cookie.secure = true // serve secure cookies
}
var OAuth2 = require('oauth').OAuth2;
var oauth2 = new OAuth2("<FB_APP_ID>",
"<FB_APP_SECRET>",
"", "https://www.facebook.com/dialog/oauth",
"https://graph.facebook.com/oauth/access_token",
null );
app.use(session(sess));
app.get('/facebook/auth',function (req, res) {
var redirect_uri = "http://localhost:3000/facebook/callback";
// For eg. "http://localhost:3000/facebook/callback"
var params = {'redirect_uri': redirect_uri, 'scope':'user_about_me,publish_actions,pages_messaging,manage_pages,pages_show_list,read_page_mailboxes '};
var rr = oauth2.getAuthorizeUrl(params);
console.log(rr);
res.redirect(rr);
});
app.get("/facebook/callback", function (req, res) {
if (req.error_reason) {
return res.send(req.error_reason);
}
if (req.query.code) {
var loginCode = req.query.code;
var redirect_uri = 'http://localhost:3000/facebook/callback'; // Path_To_Be_Redirected_to_After_Verification
// For eg. "/facebook/callback"
var access_token, expires;
oauth2.getOAuthAccessToken(loginCode, { grant_type: 'authorization_code', redirect_uri: redirect_uri},
function(err, accessToken, refreshToken, params){
if (err) {
console.error(err);
return res.send({'err':err.msg});
}
access_token = accessToken;
expires = params.expires;
req.session.access_token = access_token;
req.session.expires = expires;
return res.send({'access':access_token, 'expires': expires});
}
);
}
});
// get id cua page FB
app.get('/page_token', function(req, res) {
oauth2.get('https://graph.facebook.com/me/accounts', req.session.access_token, function(err, data ,response) {
if (err) {
console.error(err);
return res.send(err);
} else {
var x = JSON.parse(data);
var b = x.data.filter(e=> e.id==FB_PAGE_ID)[0];
req.session.page_token = b['access_token'];
req.session.page_id = b.id;
console.log(req.session);
return res.send(x);
}
});
});
// get messages of page: conversations
app.get('/page_action', function(req, res) {
var url = 'https://graph.facebook.com/v2.12/'+req.session.page_id+'/conversations';
var opts= '\?fields=messages{message,from}';
url+= opts;
oauth2.get(url, req.session.page_token, function(err, data ,response) {
if (err) {
console.error(err);
return res.send(err);
} else {
var profile = JSON.parse(data);
return res.send(profile);
}
});
});
app.get('/all', function(req, res) {
return res.send(req.session);
});
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'));
@BonsoirDiep
Copy link
Author

BonsoirDiep commented Mar 19, 2018

  1. http://localhost:3000/facebook/auth
  2. code-granting
  3. redirect callback url: http://localhost:3000/facebook/callback -> generation access_token
  4. generate page_access_token with access_token: http://localhost:3000/page_token
  5. read conversations.. http://localhost:3000/page_action

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment