Showing
5 changed files
with
113 additions
and
0 deletions
.gitignore
0 → 100644
| 1 | +node_modules |
README.md
0 → 100644
app.js
0 → 100644
| 1 | +var express = require("express"); | ||
| 2 | +var request = require("request"); | ||
| 3 | +var bodyParser = require("body-parser"); | ||
| 4 | + | ||
| 5 | +var app = express(); | ||
| 6 | +app.use(bodyParser.urlencoded({extended: false})); | ||
| 7 | +app.use(bodyParser.json()); | ||
| 8 | +app.listen((process.env.PORT || 5000)); | ||
| 9 | + | ||
| 10 | +// Server index page | ||
| 11 | +app.get("/", function (req, res) { | ||
| 12 | + res.send("Deployed!"); | ||
| 13 | +}); | ||
| 14 | + | ||
| 15 | +// Facebook Webhook | ||
| 16 | +// Used for verification | ||
| 17 | +app.get("/webhook", function (req, res) { | ||
| 18 | + if (req.query["hub.verify_token"] === "process.env.VERIFICATION_TOKEN") { | ||
| 19 | + console.log("Verified webhook"); | ||
| 20 | + res.status(200).send(req.query["hub.challenge"]); | ||
| 21 | + } else { | ||
| 22 | + console.error("Verification failed. The tokens do not match."); | ||
| 23 | + res.sendStatus(403); | ||
| 24 | + } | ||
| 25 | +}); | ||
| 26 | + | ||
| 27 | +// All callbacks for Messenger will be POST-ed here | ||
| 28 | +app.post("/webhook", function (req, res) { | ||
| 29 | + // Make sure this is a page subscription | ||
| 30 | + if (req.body.object == "page") { | ||
| 31 | + // Iterate over each entry | ||
| 32 | + // There may be multiple entries if batched | ||
| 33 | + req.body.entry.forEach(function(entry) { | ||
| 34 | + // Iterate over each messaging event | ||
| 35 | + entry.messaging.forEach(function(event) { | ||
| 36 | + if (event.postback) { | ||
| 37 | + processPostback(event); | ||
| 38 | + } | ||
| 39 | + }); | ||
| 40 | + }); | ||
| 41 | + | ||
| 42 | + res.sendStatus(200); | ||
| 43 | + } | ||
| 44 | +}); | ||
| 45 | + | ||
| 46 | +function processPostback(event) { | ||
| 47 | + var senderId = event.sender.id; | ||
| 48 | + var payload = event.postback.payload; | ||
| 49 | + | ||
| 50 | + if (payload === "Greeting") { | ||
| 51 | + // Get user's first name from the User Profile API | ||
| 52 | + // and include it in the greeting | ||
| 53 | + request({ | ||
| 54 | + url: "https://graph.facebook.com/v2.6/" + senderId, | ||
| 55 | + qs: { | ||
| 56 | + access_token: process.env.PAGE_ACCESS_TOKEN, | ||
| 57 | + fields: "first_name" | ||
| 58 | + }, | ||
| 59 | + method: "GET" | ||
| 60 | + }, function(error, response, body) { | ||
| 61 | + var greeting = ""; | ||
| 62 | + if (error) { | ||
| 63 | + console.log("Error getting user's name: " + error); | ||
| 64 | + } else { | ||
| 65 | + var bodyObj = JSON.parse(body); | ||
| 66 | + name = bodyObj.first_name; | ||
| 67 | + greeting = "Hi " + name + ". "; | ||
| 68 | + } | ||
| 69 | + var message = greeting + "My name is SP Movie Bot. I can tell you various details regarding movies. What movie would you like to know about?"; | ||
| 70 | + sendMessage(senderId, {text: message}); | ||
| 71 | + }); | ||
| 72 | + } | ||
| 73 | +} | ||
| 74 | + | ||
| 75 | +// sends message to user | ||
| 76 | +function sendMessage(recipientId, message) { | ||
| 77 | + request({ | ||
| 78 | + url: "https://graph.facebook.com/v2.6/me/messages", | ||
| 79 | + qs: {access_token: process.env.PAGE_ACCESS_TOKEN}, | ||
| 80 | + method: "POST", | ||
| 81 | + json: { | ||
| 82 | + recipient: {id: recipientId}, | ||
| 83 | + message: message, | ||
| 84 | + } | ||
| 85 | + }, function(error, response, body) { | ||
| 86 | + if (error) { | ||
| 87 | + console.log("Error sending message: " + response.error); | ||
| 88 | + } | ||
| 89 | + }); | ||
| 90 | +} |
package-lock.json
0 → 100644
This diff is collapsed. Click to expand it.
package.json
0 → 100644
| 1 | +{ | ||
| 2 | + "name": "spbot", | ||
| 3 | + "version": "1.0.0", | ||
| 4 | + "description": "SPBot Server", | ||
| 5 | + "main": "app.js", | ||
| 6 | + "scripts": { | ||
| 7 | + "test": "echo \"Error: no test specified\" && exit 1", | ||
| 8 | + "start": "node app.js" | ||
| 9 | + }, | ||
| 10 | + "author": "WonJun Choi", | ||
| 11 | + "license": "ISC", | ||
| 12 | + "dependencies": { | ||
| 13 | + "body-parser": "^1.19.0", | ||
| 14 | + "express": "^4.17.0", | ||
| 15 | + "mongoose": "^5.5.11", | ||
| 16 | + "request": "^2.88.0" | ||
| 17 | + } | ||
| 18 | +} |
-
Please register or login to post a comment