Add minimal 'echo' facebook bot
This commit is contained in:
51
bot/facebook/index.js
Normal file
51
bot/facebook/index.js
Normal file
@@ -0,0 +1,51 @@
|
||||
const {text, json, createError} = require('micro')
|
||||
const {get, post, withNamespace} = require('microrouter')
|
||||
|
||||
const fbParser = require('claudia-bot-builder/lib/facebook/parse')
|
||||
const fbReply = require('claudia-bot-builder/lib/facebook/reply')
|
||||
const fbValidate = require('claudia-bot-builder/lib/facebook/validate-integrity')
|
||||
const fbTemplate = require('claudia-bot-builder/lib/facebook/format-message')
|
||||
|
||||
const verifyToken = req => {
|
||||
if (req.query['hub.verify_token'] === process.env.FB_VERIFY_TOKEN) {
|
||||
return req.query['hub.challenge']
|
||||
}
|
||||
console.info(
|
||||
`Your Facebook Access Token (that Facebook will echo back to you as part of callback URL verification): ${
|
||||
process.env.FB_VERIFY_TOKEN
|
||||
}`
|
||||
)
|
||||
return 'INVALID TOKEN'
|
||||
}
|
||||
|
||||
const fbMessage = async req => {
|
||||
req.env = {facebookAppSecret: process.env.FB_APP_SECRET}
|
||||
req.rawBody = await text(req)
|
||||
const data = await json(req)
|
||||
const message = data.entry.map(
|
||||
entry => entry.messaging.map(message => fbParser(message))[0]
|
||||
)[0]
|
||||
|
||||
const isValid = fbValidate(req) && message.type === 'facebook'
|
||||
|
||||
return isValid ? message : false
|
||||
}
|
||||
|
||||
const respond = async (req, res) => {
|
||||
const message = await fbMessage(req)
|
||||
if (message) {
|
||||
const recipient = message.sender
|
||||
const replyMessage = new fbTemplate.Text(
|
||||
`You've said: "${message.text}"`
|
||||
).get()
|
||||
|
||||
await fbReply(recipient, replyMessage, process.env.FB_ACCESS_TOKEN)
|
||||
|
||||
res.end()
|
||||
} else {
|
||||
throw createError(400, 'Invalid message signature.')
|
||||
}
|
||||
}
|
||||
|
||||
const fbApi = withNamespace('/api/v1/facebook')
|
||||
module.exports = fbApi(get('/', verifyToken), post('/', respond))
|
||||
Reference in New Issue
Block a user