Created
January 28, 2018 23:41
-
-
Save marketingstarz/8e8aec805adbe54e10a83e14ed9c99f7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Imports dependencies and set up http server | |
const | |
express = require('express'), | |
bodyParser = require('body-parser'), | |
app = express().use(bodyParser.json()); // creates express http server | |
// Sets server port and logs message on success | |
app.listen(process.env.PORT || 1337, () => console.log('webhook is listening')); | |
// Creates the endpoint for our webhook | |
app.post('/webhook', (req, res) => { | |
let body = req.body; | |
// Checks this is an event from a page subscription | |
if (body.object === 'page') { | |
// Iterates over each entry - there may be multiple if batched | |
body.entry.forEach(function(entry) { | |
// Gets the message. entry.messaging is an array, but | |
// will only ever contain one message, so we get index 0 | |
let webhookEvent = entry.messaging[0]; | |
console.log(webhookEvent); | |
}); | |
// Returns a '200 OK' response to all requests | |
res.status(200).send('EVENT_RECEIVED'); | |
} else { | |
// Returns a '404 Not Found' if event is not from a page subscription | |
res.sendStatus(404); | |
} | |
}); | |
// Adds support for GET requests to our webhook | |
app.get('/webhook', (req, res) => { | |
// Your verify token. Should be a random string. | |
let VERIFY_TOKEN = "999999999999999"; | |
// Parse the query params | |
let mode = req.query['hub.mode']; | |
let token = req.query['hub.verify_token']; | |
let challenge = req.query['hub.challenge']; | |
// Checks if a token and mode is in the query string of the request | |
if (mode && token) { | |
// Checks the mode and token sent is correct | |
if (mode === 'subscribe' && token === VERIFY_TOKEN) { | |
// Responds with the challenge token from the request | |
console.log('WEBHOOK_VERIFIED'); | |
res.status(200).send(challenge); | |
} else { | |
// Responds with '403 Forbidden' if verify tokens do not match | |
res.sendStatus(403); | |
} | |
} | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "messenger_chatbox", | |
"version": "1.0.0", | |
"lockfileVersion": 1, | |
"requires": true, | |
"dependencies": { | |
"accepts": { | |
"version": "1.3.4", | |
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", | |
"integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", | |
"requires": { | |
"mime-types": "2.1.17", | |
"negotiator": "0.6.1" | |
} | |
}, | |
"array-flatten": { | |
"version": "1.1.1", | |
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | |
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" | |
}, | |
"body-parser": { | |
"version": "1.18.2", | |
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", | |
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", | |
"requires": { | |
"bytes": "3.0.0", | |
"content-type": "1.0.4", | |
"debug": "2.6.9", | |
"depd": "1.1.2", | |
"http-errors": "1.6.2", | |
"iconv-lite": "0.4.19", | |
"on-finished": "2.3.0", | |
"qs": "6.5.1", | |
"raw-body": "2.3.2", | |
"type-is": "1.6.15" | |
} | |
}, | |
"bytes": { | |
"version": "3.0.0", | |
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", | |
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" | |
}, | |
"content-disposition": { | |
"version": "0.5.2", | |
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", | |
"integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" | |
}, | |
"content-type": { | |
"version": "1.0.4", | |
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", | |
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" | |
}, | |
"cookie": { | |
"version": "0.3.1", | |
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", | |
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" | |
}, | |
"cookie-signature": { | |
"version": "1.0.6", | |
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", | |
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" | |
}, | |
"debug": { | |
"version": "2.6.9", | |
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | |
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", | |
"requires": { | |
"ms": "2.0.0" | |
} | |
}, | |
"depd": { | |
"version": "1.1.2", | |
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", | |
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" | |
}, | |
"destroy": { | |
"version": "1.0.4", | |
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", | |
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" | |
}, | |
"ee-first": { | |
"version": "1.1.1", | |
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | |
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | |
}, | |
"encodeurl": { | |
"version": "1.0.2", | |
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", | |
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" | |
}, | |
"escape-html": { | |
"version": "1.0.3", | |
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", | |
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" | |
}, | |
"etag": { | |
"version": "1.8.1", | |
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", | |
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" | |
}, | |
"express": { | |
"version": "4.16.2", | |
"resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", | |
"integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", | |
"requires": { | |
"accepts": "1.3.4", | |
"array-flatten": "1.1.1", | |
"body-parser": "1.18.2", | |
"content-disposition": "0.5.2", | |
"content-type": "1.0.4", | |
"cookie": "0.3.1", | |
"cookie-signature": "1.0.6", | |
"debug": "2.6.9", | |
"depd": "1.1.2", | |
"encodeurl": "1.0.2", | |
"escape-html": "1.0.3", | |
"etag": "1.8.1", | |
"finalhandler": "1.1.0", | |
"fresh": "0.5.2", | |
"merge-descriptors": "1.0.1", | |
"methods": "1.1.2", | |
"on-finished": "2.3.0", | |
"parseurl": "1.3.2", | |
"path-to-regexp": "0.1.7", | |
"proxy-addr": "2.0.2", | |
"qs": "6.5.1", | |
"range-parser": "1.2.0", | |
"safe-buffer": "5.1.1", | |
"send": "0.16.1", | |
"serve-static": "1.13.1", | |
"setprototypeof": "1.1.0", | |
"statuses": "1.3.1", | |
"type-is": "1.6.15", | |
"utils-merge": "1.0.1", | |
"vary": "1.1.2" | |
}, | |
"dependencies": { | |
"setprototypeof": { | |
"version": "1.1.0", | |
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", | |
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" | |
}, | |
"statuses": { | |
"version": "1.3.1", | |
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", | |
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" | |
} | |
} | |
}, | |
"finalhandler": { | |
"version": "1.1.0", | |
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", | |
"integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", | |
"requires": { | |
"debug": "2.6.9", | |
"encodeurl": "1.0.2", | |
"escape-html": "1.0.3", | |
"on-finished": "2.3.0", | |
"parseurl": "1.3.2", | |
"statuses": "1.3.1", | |
"unpipe": "1.0.0" | |
}, | |
"dependencies": { | |
"statuses": { | |
"version": "1.3.1", | |
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", | |
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" | |
} | |
} | |
}, | |
"forwarded": { | |
"version": "0.1.2", | |
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", | |
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" | |
}, | |
"fresh": { | |
"version": "0.5.2", | |
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", | |
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" | |
}, | |
"http-errors": { | |
"version": "1.6.2", | |
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", | |
"integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", | |
"requires": { | |
"depd": "1.1.1", | |
"inherits": "2.0.3", | |
"setprototypeof": "1.0.3", | |
"statuses": "1.4.0" | |
}, | |
"dependencies": { | |
"depd": { | |
"version": "1.1.1", | |
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", | |
"integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" | |
} | |
} | |
}, | |
"iconv-lite": { | |
"version": "0.4.19", | |
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", | |
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" | |
}, | |
"inherits": { | |
"version": "2.0.3", | |
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", | |
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" | |
}, | |
"ipaddr.js": { | |
"version": "1.5.2", | |
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", | |
"integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" | |
}, | |
"media-typer": { | |
"version": "0.3.0", | |
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", | |
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" | |
}, | |
"merge-descriptors": { | |
"version": "1.0.1", | |
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", | |
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" | |
}, | |
"methods": { | |
"version": "1.1.2", | |
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", | |
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" | |
}, | |
"mime": { | |
"version": "1.4.1", | |
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", | |
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" | |
}, | |
"mime-db": { | |
"version": "1.30.0", | |
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", | |
"integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" | |
}, | |
"mime-types": { | |
"version": "2.1.17", | |
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", | |
"integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", | |
"requires": { | |
"mime-db": "1.30.0" | |
} | |
}, | |
"ms": { | |
"version": "2.0.0", | |
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | |
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | |
}, | |
"negotiator": { | |
"version": "0.6.1", | |
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", | |
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" | |
}, | |
"on-finished": { | |
"version": "2.3.0", | |
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", | |
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", | |
"requires": { | |
"ee-first": "1.1.1" | |
} | |
}, | |
"parseurl": { | |
"version": "1.3.2", | |
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", | |
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" | |
}, | |
"path-to-regexp": { | |
"version": "0.1.7", | |
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", | |
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" | |
}, | |
"proxy-addr": { | |
"version": "2.0.2", | |
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", | |
"integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", | |
"requires": { | |
"forwarded": "0.1.2", | |
"ipaddr.js": "1.5.2" | |
} | |
}, | |
"qs": { | |
"version": "6.5.1", | |
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", | |
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" | |
}, | |
"range-parser": { | |
"version": "1.2.0", | |
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", | |
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" | |
}, | |
"raw-body": { | |
"version": "2.3.2", | |
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", | |
"integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", | |
"requires": { | |
"bytes": "3.0.0", | |
"http-errors": "1.6.2", | |
"iconv-lite": "0.4.19", | |
"unpipe": "1.0.0" | |
} | |
}, | |
"safe-buffer": { | |
"version": "5.1.1", | |
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", | |
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" | |
}, | |
"send": { | |
"version": "0.16.1", | |
"resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", | |
"integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", | |
"requires": { | |
"debug": "2.6.9", | |
"depd": "1.1.2", | |
"destroy": "1.0.4", | |
"encodeurl": "1.0.2", | |
"escape-html": "1.0.3", | |
"etag": "1.8.1", | |
"fresh": "0.5.2", | |
"http-errors": "1.6.2", | |
"mime": "1.4.1", | |
"ms": "2.0.0", | |
"on-finished": "2.3.0", | |
"range-parser": "1.2.0", | |
"statuses": "1.3.1" | |
}, | |
"dependencies": { | |
"statuses": { | |
"version": "1.3.1", | |
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", | |
"integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" | |
} | |
} | |
}, | |
"serve-static": { | |
"version": "1.13.1", | |
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", | |
"integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", | |
"requires": { | |
"encodeurl": "1.0.2", | |
"escape-html": "1.0.3", | |
"parseurl": "1.3.2", | |
"send": "0.16.1" | |
} | |
}, | |
"setprototypeof": { | |
"version": "1.0.3", | |
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", | |
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" | |
}, | |
"statuses": { | |
"version": "1.4.0", | |
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", | |
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" | |
}, | |
"type-is": { | |
"version": "1.6.15", | |
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", | |
"integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", | |
"requires": { | |
"media-typer": "0.3.0", | |
"mime-types": "2.1.17" | |
} | |
}, | |
"unpipe": { | |
"version": "1.0.0", | |
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", | |
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" | |
}, | |
"utils-merge": { | |
"version": "1.0.1", | |
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", | |
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" | |
}, | |
"vary": { | |
"version": "1.1.2", | |
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", | |
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "messenger chatbox", | |
"version": "1.0.0", | |
"main": "index.js", | |
"dependencies": { | |
"body-parser": "^1.18.2", | |
"express": "^4.16.2" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment