Skip to content

Instantly share code, notes, and snippets.

@tina1998612
Last active March 4, 2017 21:04
Show Gist options
  • Save tina1998612/e4bac5a64528bdc06f5ba562b55b029b to your computer and use it in GitHub Desktop.
Save tina1998612/e4bac5a64528bdc06f5ba562b55b029b to your computer and use it in GitHub Desktop.
'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