-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
131 lines (120 loc) · 4.57 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/**
* Created by piyush on 13/1/17.
*/
'use strict';
const express = require('express');
const bodyParser = require('body-parser');
const request = require('request');
const app = express();
app.set('port', process.env.PORT||5000);
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.get('/', function (req, res) {
if(req.query['hub.verify_token'] == "verifycode")
res.send(req.query['hub.challenge']);
res.send('https://www.facebook.com/chatwithwiki/');
});
const FBurl = "https://graph.facebook.com/v2.6/me/messages?access_token=<FB_ACCESS_TOKEN>";
//////////////////////////////Send help message or payload message///////////////////////
function sendMessage(id, msg){
const options = {
uri : FBurl,
method : 'POST',
json : {
"recipient" : {"id" : id},
"message" : {"text" : msg}
}
};
//POST request - sending message to messenger
request(options, function (error, response, body) {
if(error)
console.log(error.message);
});
}
/////////////////////////////Send Generic template content////////////////////////////
function wikiBot(id, query){
let options;
//GET request to Wikipedia
request("https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrnamespace" +
"=0&gsrlimit=10&prop=extracts&exintro&explaintext&exsentences=5&exlimit=max&gsrsearch=" + query,
function (error, response, body) {
if(error)
console.log(error.message);
options = {
url : FBurl,
method : 'POST',
json : true,
body : { ////generic template
recipient : {"id" : id},
message : {
attachment : {
type : "template",
payload : {
template_type : "generic",
elements : []
}
}
}
}
};
try{
body = JSON.parse(body);
const pages = body.query.pages;
for(let i in pages){
const elem = {
title : pages[i].title,
subtitle : pages[i].extract.substr(0, 80).trim(),
buttons : [{
type : "postback",
title : "Read More",
payload : ""
}, {
type : "web_url",
url : "https://en.wikipedia.org/?curid=" + pages[i].pageid,
title : "View in browser"
}]
};
if(pages[i].extract != "")
elem.buttons[0].payload = pages[i].extract.substr(0, 1000).trim();
else
elem.buttons[0].payload = "Nothing here, Please view in browser";
options.body.message.attachment.payload.elements.push(elem);
}
}
catch(err){
console.log("error : " + err);
options = {
uri : FBurl,
method : 'POST',
json : {
"recipient" : {"id" : id},
"message" : {"text" : "Something went wrong, please try again."}
}
};
}
//POST request - sending message to messenger
request(options, function (error, response, body) {
if(error)
console.log(error.message);
});
}
);
}
//Receives query from messenger
app.post('/', function (req, res) {
req.body.entry[0].messaging.forEach(function (data, id) {
if(data.message && data.message.text) {
const text = data.message.text.toLowerCase().trim();
if(text.substr(0, 4) == 'wiki')
wikiBot(data.sender.id, text.replace('wiki ', ''));
else
sendMessage(data.sender.id, "Send wiki space 'Your query' to search wikipedia");
}
else if(data.postback && data.postback.payload) /////Postback -> (Read More)
sendMessage(data.sender.id, data.postback.payload);
});
res.end('replied!');
});
app.listen(app.get('port'), function () {
console.log('http://localhost:' + app.get('port'));
});