Last active
March 4, 2017 21:04
-
-
Save tina1998612/e4bac5a64528bdc06f5ba562b55b029b to your computer and use it in GitHub Desktop.
This file contains hidden or 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
'use strict'; | |
const PAGE_ACCESS_TOKEN = process.env.PAGE_ACCESS_TOKEN; | |
const APIAI_TOKEN = process.env.APIAI_TOKEN; | |
const WEATHER_API_KEY = process.env.WEATHER_API_KEY; | |
const express = require('express'); | |
const bodyParser = require('body-parser'); | |
const request = require('request'); | |
const apiai = require('apiai'); | |
const app = express(); | |
app.use(bodyParser.json()); | |
app.use(bodyParser.urlencoded({ extended: true })); | |
const server = app.listen(process.env.PORT || 5000, () => { | |
console.log('Express server listening on port %d in %s mode', server.address().port, app.settings.env); | |
}); | |
/* For Facebook Validation */ | |
app.get('/webhook', (req, res) => { | |
if (req.query['hub.mode'] && req.query['hub.verify_token'] === 'tuxedo_cat') { | |
res.status(200).send(req.query['hub.challenge']); | |
} else { | |
res.status(403).end(); | |
} | |
}); | |
/* Handling all messenges */ | |
app.post('/webhook', (req, res) => { | |
//console.log(req.body); | |
if (req.body.object === 'page') { | |
req.body.entry.forEach((entry) => { | |
entry.messaging.forEach((event) => { | |
if (event.message && event.message.text) { | |
sendMessage(event); | |
} | |
}); | |
}); | |
res.status(200).end(); | |
} | |
}); | |
/* GET query from API.ai */ | |
const apiaiApp = apiai('ae0e8abffbda4ad4844ac1bd52b5c1b2'); | |
function sendMessage(event) { | |
let sender = event.sender.id; | |
let text = event.message.text; | |
var apiai = apiaiApp.textRequest(text, { | |
sessionId: 'user1' | |
}); | |
apiai.on('response', function(response) { | |
//console.log(response); | |
//console.log("***********************"); | |
console.log(response.result.fulfillment.messages); | |
let reply_text = response.result.fulfillment.speech; | |
console.log(reply_text); | |
/*if(reply_text != undefined){ | |
let customized_message = { | |
text: reply_text | |
}; | |
} else{ | |
*/ | |
var custom_message = ""; | |
if(reply_text == undefined){ | |
custom_message = response.result.fulfillment.messages; | |
} else { | |
custom_message = {text: reply_text}; | |
} | |
request({ | |
url: 'https://graph.facebook.com/v2.6/me/messages', | |
qs: {access_token: 'EAADo1PANZCxEBAJc0LgCLfPEKNAPvnolUNDouf6ZAkDmZC5wxYZBGmdhlUi3BHyRyhwXtTJbCMldGsZCnO7z7UR8IQSTBx50YBgRxYCwSGiBL949eIelPqMv9ZBSgDZB9T2e7lJ9qvyHKEBqYmx9ZAHw0C2Q3lYh7ZA5HbeaaeEcGyAZDZD'}, | |
method: 'POST', | |
json: { | |
recipient: {id: sender}, | |
message: custom_message | |
} | |
}, (error, response) => { | |
if (error) { | |
console.log('Error sending message: ', error); | |
} else if (response.body.error) { | |
console.log('Error: ', response.body.error); | |
} | |
}); | |
}); | |
apiai.on('error', (error) => { | |
console.log(error); | |
}); | |
apiai.end(); | |
} | |
function UndefinedIntent(res){ | |
let errorMessage = "sry I can't get it D:"; | |
return res.state(400).json({ | |
status:{ | |
code: 400, | |
errorType: errorMessage | |
} | |
}); | |
} | |
app.post('/ai', (req, res) => { | |
let action = req.body.result.action; | |
//console.log(action); | |
if (req.body.result.action === 'input.welcome') { | |
console.log('Intent: welcome'); | |
request.get('https://b54c8cba.ngrok.io/api/user', (err, response, body) => { | |
if (!err) { | |
let json = JSON.parse(body); | |
for(var i=0;i<json.length;i++){ | |
console.log(json[i].name); | |
} | |
/*return res.json({ | |
speech: json[0].name, | |
displayText: json[0].name, | |
source: 'mySrc' | |
});*/ | |
} else { | |
UndefinedIntent(res); | |
} | |
}) | |
} | |
if (req.body.result.action === 'get_group_info') { | |
console.log('Intent: get_group_info'); | |
request.get('https://b54c8cba.ngrok.io/api/newgetGroups', (err, response, body) => { | |
if (!err) { | |
let json = JSON.parse(body); | |
var groups = ""; | |
let return_card = { | |
"attachment": { | |
"type": "template", | |
"payload": { | |
"template_type": "list", | |
"elements": [ | |
{ | |
"title": "Classic T-Shirt Collection", | |
"subtitle": "See all our colors", | |
"image_url": "http://i.imgur.com/P9q4Gas.jpg", | |
"default_action": { | |
"type": "web_url", | |
"url": "https://google.com", | |
"messenger_extensions": true, | |
"webview_height_ratio": "tall", | |
"fallback_url": "https://google.com" | |
}, | |
"buttons": [ | |
{ | |
"title": "View", | |
"type": "web_url", | |
"url": "https://google.com", | |
"messenger_extensions": true, | |
"webview_height_ratio": "tall", | |
"fallback_url": "https://google.com" | |
} | |
] | |
}, | |
{ | |
"title": "Classic White T-Shirt", | |
"subtitle": "100% Cotton, 200% Comfortable", | |
"image_url": "http://i.imgur.com/P9q4Gas.jpg", | |
"default_action": { | |
"type": "web_url", | |
"url": "https://google.com", | |
"messenger_extensions": true, | |
"webview_height_ratio": "tall", | |
"fallback_url": "https://google.com" | |
}, | |
"buttons": [ | |
{ | |
"title": "Shop Now", | |
"type": "web_url", | |
"url": "https://google.com", | |
"messenger_extensions": true, | |
"webview_height_ratio": "tall", | |
"fallback_url": "https://google.com" | |
} | |
] | |
}] | |
} | |
} | |
}; | |
/*for(var i=0;i<json.length;i++){ | |
console.log(json[i]); | |
groups += json[i].name + " "; | |
}*/ | |
return res.json({ | |
messages: return_card | |
}); | |
} else { | |
UndefinedIntent(res); | |
} | |
}) | |
} | |
if (req.body.result.action === 'create_user'){ | |
console.log('Intent: create_user'); | |
request.post({url:"https://b54c8cba.ngrok.io/api/createUser", form: { | |
"facebookid":'5856', | |
"name": "apple" | |
}}, function(err, res, body){ | |
//console.log(req.body); | |
if(!err){ | |
console.log("create user successful"); | |
} else { | |
return console.error('Error on create_user: ', err); | |
} | |
}); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment