-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck.js
183 lines (166 loc) · 6.02 KB
/
check.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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
var route = require('./route');
var UserSys = require('./model/UserSys');
var SysLog = require('./model/SysLog');
/*
* Authorization Event
*
* The value for 'optin.ref' is defined in the entry point. For the "Send to
* Messenger" plugin, it is the 'data-ref' field. Read more at
* https://developers.facebook.com/docs/messenger-platform/webhook-reference#auth
*
*/
exports.receivedAuthentication =function(event) {
var senderID = event.sender.id;
var recipientID = event.recipient.id;
var timeOfAuth = event.timestamp;
// The 'ref' field is set in the 'Send to Messenger' plugin, in the 'data-ref'
// The developer can set this to an arbitrary value to associate the
// authentication callback with the 'Send to Messenger' click event. This is
// a way to do account linking when the user clicks the 'Send to Messenger'
// plugin.
var passThroughParam = event.optin.ref;
console.log("Received authentication for user %d and page %d with pass " +
"through param '%s' at %d", senderID, recipientID, passThroughParam,
timeOfAuth);
// When an authentication is received, we'll send a message back to the sender
// to let them know it was successful.
route.sendTextMessage(senderID, "Authentication successful");
}
/*
* Message Event
*
* This event is called when a message is sent to your page. The 'message'
* object format can vary depending on the kind of message that was received.
* Read more at https://developers.facebook.com/docs/messenger-platform/webhook-reference#received_message
*
* For this example, we're going to echo any text that we get. If we get some
* special keywords ('button', 'generic', 'receipt'), then we'll send back
* examples of those bubbles to illustrate the special message bubbles we've
* created. If we receive a message with an attachment (image, video, audio),
* then we'll simply confirm that we've received the attachment.
*
*/
exports.receivedMessage = function(event) {
var senderID = event.sender.id;
var recipientID = event.recipient.id;
var timeOfMessage = event.timestamp;
var message = event.message;
console.log("Received message for user %d and page %d at %d with message:",
senderID, recipientID, timeOfMessage);
console.log(JSON.stringify(message));
if(message.quick_reply){
this.receivedQuickReply(event);
return;
}
var messageId = message.mid;
// You may get a text or attachment but not both
var messageText = message.text;
var messageAttachments = message.attachments;
if (messageText) {
// If we receive a text message, check to see if it matches any special
// keywords and send back the corresponding example. Otherwise, just echo
// the text we received.
switch (messageText.toLowerCase()) {
case 'help':
case 'give me a hand':
case '幫助':
case '幫忙':
route.helpMessage(senderID);
break;
default:
UserSys.get(senderID, 'field', function(field, err){
if(err || !field || !field.value){
route.randomMessage(senderID, messageText);
return;
}
route.savefield(senderID, field.value, messageText);
});
}
} else if (messageAttachments) {
route.responseAttach(senderID, "Message with attachment received");
}
}
/*
* Delivery Confirmation Event
*
* This event is sent to confirm the delivery of a message. Read more about
* these fields at https://developers.facebook.com/docs/messenger-platform/webhook-reference#message_delivery
*
*/
exports.receivedDeliveryConfirmation = function(event) {
var senderID = event.sender.id;
var recipientID = event.recipient.id;
var delivery = event.delivery;
var messageIDs = delivery.mids;
var watermark = delivery.watermark;
var sequenceNumber = delivery.seq;
if (messageIDs) {
messageIDs.forEach(function(messageID) {
console.log("Received delivery confirmation for message ID: %s",
messageID);
});
}
console.log("All message before %d were delivered.", watermark);
}
/*
* Postback Event
*
* This event is called when a postback is tapped on a Structured Message. Read
* more at https://developers.facebook.com/docs/messenger-platform/webhook-reference#postback
*
*/
exports.receivedPostback = function(event) {
var senderID = event.sender.id;
var recipientID = event.recipient.id;
var timeOfPostback = event.timestamp;
// The 'payload' param is a developer-defined field which is set in a postback
// button for Structured Messages.
var payload = event.postback.payload;
SysLog.set(senderID, 'postback', payload, function(err){
if(err){
route.err(senderID, err);
return;
}
console.log("Received postback for user %d and page %d with payload '%s' " +
"at %d", senderID, recipientID, payload, timeOfPostback);
//locak same payload in 5 seconds
UserSys.setPostback(senderID, payload, function(err){
if(err){
route.err(err);
return;
}
route.postback(senderID, JSON.parse(payload));
});
});
}
/*
* Quick reply Event
*
* This event is called when a postback is tapped on a Structured Message. Read
* more at https://developers.facebook.com/docs/messenger-platform/webhook-reference#postback
*
*/
exports.receivedQuickReply = function(event) {
var senderID = event.sender.id;
var recipientID = event.recipient.id;
var timeOfPostback = event.timestamp;
// The 'payload' param is a developer-defined field which is set in a postback
// button for Structured Messages.
var payload = event.message.quick_reply.payload;
SysLog.set(senderID, 'postback', payload, function(err){
if(err){
route.err(senderID, err);
return;
}
console.log("Received postback for user %d and page %d with payload '%s' " +
"at %d", senderID, recipientID, payload, timeOfPostback);
//locak same payload in 5 seconds
UserSys.setPostback(senderID, payload, function(err){
if(err){
route.err(err);
return;
}
route.postback(senderID, JSON.parse(payload));
});
});
}