Toggle navigation
Toggle navigation
This project
Loading...
Sign in
최재은
/
밀당강의봇
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
wjc0930
2019-06-01 17:05:43 +0900
Browse Files
Options
Browse Files
Download
Plain Diff
Commit
d7814737142acf7e787c4c5a6756f3edfe93b445
d7814737
2 parents
9d8f2b21
af646aaa
Merge branch 'feat_selectLecture'
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
146 additions
and
140 deletions
app.js
controller.js
models.js
template.js
app.js
View file @
d781473
...
...
@@ -2,9 +2,8 @@
let
express
=
require
(
"express"
),
bodyParser
=
require
(
"body-parser"
),
app
=
express
(),
request
=
require
(
'request'
),
config
=
require
(
'config'
),
images
=
require
(
"./pics"
);
controller
=
require
(
'./controller'
);
app
.
use
(
bodyParser
.
urlencoded
({
extended
:
false
}));
app
.
use
(
bodyParser
.
json
());
...
...
@@ -20,7 +19,7 @@ app.get('/', (req, res) => res.send('Hello World!'));
app
.
get
(
'/webhook'
,
(
req
,
res
)
=>
{
// Your verify token, Should be a random string.
let
VERIFY_TOKEN
=
"2016104171"
;
let
VERIFY_TOKEN
=
config
.
get
(
'facebook.page.verify_token'
)
;
// Parse the query params
let
mode
=
req
.
query
[
'hub.mode'
];
...
...
@@ -67,151 +66,17 @@ app.post('/webhook', (req, res) => {
// Check if the event is a message or postback and
// pass the event to the appropriate handler function
if
(
webhook_event
.
message
)
{
handleMessage
(
sender_psid
,
webhook_event
.
message
);
controller
.
handleMessage
(
sender_psid
,
webhook_event
.
message
);
}
else
if
(
webhook_event
.
postback
)
{
handlePostback
(
sender_psid
,
webhook_event
.
postback
);
controller
.
handlePostback
(
sender_psid
,
webhook_event
.
postback
);
}
});
// Returns a '200 OK' response to all requests
res
.
status
(
200
).
send
(
'EVENT_RECEIVED'
);
}
else
{
// Returns a '404 Not Found' if event is not from a page subscription
// Returns a '404 Not Found' if event is n
inteli
ot from a page subscription
res
.
sendStatus
(
404
);
}
});
// Views - handle Message, handle Postback
// Handles message events
const
handleMessage
=
(
sender_psid
,
received_message
)
=>
{
let
response
;
if
(
received_message
.
text
){
// Create the payload for a basic text message
response
=
askTemplate
()
}
// Sends the reponse message
callSendAPI
(
sender_psid
,
response
;
}
const
handlePostback
=
(
sender_psid
,
received_postback
)
=>
{
let
response
;
// Get the payload for the postback
let
payload
=
received_postback
.
payload
;
// Set the response based on the postback payload
if
(
payload
===
'CAT_PICS'
)
{
response
=
imageTemplate
(
'cats'
,
sender_psid
);
callSendAPI
(
sender_psid
,
response
,
function
(){
callSendAPI
(
sender_psid
,
askTemplate
(
'Show me more'
));
});
}
else
if
(
payload
===
'DOG_PICS'
)
{
response
=
imageTemplate
(
'dogs'
,
sender_psid
);
callSendAPI
(
sender_psid
,
response
,
function
(){
callSendAPI
(
sender_psid
,
askTemplate
(
'Show me more'
));
});
}
else
if
(
payload
===
'GET_STARTED'
){
response
=
askTemplate
(
'Are you a Cat or Dog Person?'
);
callSendAPI
(
sender_psid
,
response
);
}
// Send the message to acknowledge the postback
}
const
askTemplate
=
(
text
)
=>
{
return
{
"attachment"
:{
"type"
:
"template"
,
"payload"
:{
"template_type"
:
"button"
,
"text"
:
text
,
"buttons"
:[
{
"type"
:
"postback"
,
"title"
:
"Cats"
,
"payload"
:
"CAT_PICS"
},
{
"type"
:
"postback"
,
"title"
:
"Dogs"
,
"payload"
:
"DOG_PICS"
}
]
}
}
}
}
// Sends response messages via the Send API
const
callSendAPI
=
(
sender_psid
,
response
,
cb
=
null
)
=>
{
// Construct the message body
let
request_body
=
{
"recipient"
:
{
"id"
:
sender_psid
},
"message"
:
response
};
// Send the HTTP request to the Messenger Platform
request
({
"uri"
:
"https://graph.facebook.com/v2.6/me/messages"
,
"qs"
:
{
"access_token"
:
config
.
get
(
'facebook.page.access_token'
)
},
"method"
:
"POST"
,
"json"
:
request_body
},
(
err
,
res
,
body
)
=>
{
if
(
!
err
)
{
if
(
cb
){
cb
();
}
}
else
{
console
.
error
(
"Unable to send message:"
+
err
);
}
});
}
const
imageTemplate
=
(
type
,
sender_id
)
=>
{
return
{
"attachment"
:{
"type"
:
"image"
,
"payload"
:{
"url"
:
getImage
(
type
,
sender_id
),
"is_reusable"
:
true
}
}
}
}
let
users
=
{};
const
getImage
=
(
type
,
sender_id
)
=>
{
// create user if doesn't exist
if
(
users
[
sender_id
]
===
undefined
){
users
=
Object
.
assign
({
[
sender_id
]
:
{
'cats_count'
:
0
,
'dogs_count'
:
0
}
},
users
);
}
let
count
=
images
[
type
].
length
,
// total available images by type
user
=
users
[
sender_id
],
// // user requesting image
user_type_count
=
user
[
type
+
'_count'
];
// update user before returning image
let
updated_user
=
{
[
sender_id
]
:
Object
.
assign
(
user
,
{
[
type
+
'_count'
]
:
count
===
user_type_count
+
1
?
0
:
user_type_count
+
1
})
};
// update users
users
=
Object
.
assign
(
users
,
updated_user
);
console
.
log
(
users
);
return
images
[
type
][
user_type_count
];
}
...
...
controller.js
0 → 100644
View file @
d781473
let
request
=
require
(
'request'
),
template
=
require
(
'./template'
),
config
=
require
(
'config'
);
// Views - handle Message, handle Postback
// Handles message events
exports
.
handleMessage
=
(
sender_psid
,
received_message
)
=>
{
let
response
;
if
(
received_message
.
text
){
// Create the payload for a basic text message
response
=
template
.
askTemplate
()
}
// Sends the reponse message
callSendAPI
(
sender_psid
,
response
);
}
exports
.
handlePostback
=
(
sender_psid
,
received_postback
)
=>
{
let
response
;
// Get the payload for the postback
let
payload
=
received_postback
.
payload
;
// Set the response based on the postback payload
if
(
payload
===
'CAT_PICS'
)
{
response
=
template
.
imageTemplate
(
'cats'
,
sender_psid
);
callSendAPI
(
sender_psid
,
response
,
function
(){
callSendAPI
(
sender_psid
,
template
.
askTemplate
(
'Show me more'
));
});
}
else
if
(
payload
===
'DOG_PICS'
)
{
response
=
template
.
imageTemplate
(
'dogs'
,
sender_psid
);
callSendAPI
(
sender_psid
,
response
,
function
(){
callSendAPI
(
sender_psid
,
template
.
askTemplate
(
'Show me more'
));
});
}
else
if
(
payload
===
'GET_STARTED'
){
response
=
template
.
askTemplate
(
'Are you a Cat or Dog Person?'
);
callSendAPI
(
sender_psid
,
response
);
}
// Send the message to acknowledge the postback
}
// Sends response messages via the Send API
const
callSendAPI
=
(
sender_psid
,
response
,
cb
=
null
)
=>
{
// Construct the message body
let
request_body
=
{
"recipient"
:
{
"id"
:
sender_psid
},
"message"
:
response
};
// Send the HTTP request to the Messenger Platform
request
({
"uri"
:
"https://graph.facebook.com/v2.6/me/messages"
,
"qs"
:
{
"access_token"
:
config
.
get
(
'facebook.page.access_token'
)
},
"method"
:
"POST"
,
"json"
:
request_body
},
(
err
,
res
,
body
)
=>
{
if
(
!
err
)
{
if
(
cb
){
cb
();
}
}
else
{
console
.
error
(
"Unable to send message:"
+
err
);
}
});
}
models.js
0 → 100644
View file @
d781473
File mode changed
template.js
0 → 100644
View file @
d781473
let
images
=
require
(
"./pics"
);
exports
.
askTemplate
=
(
text
)
=>
{
return
{
"attachment"
:{
"type"
:
"template"
,
"payload"
:{
"template_type"
:
"button"
,
"text"
:
text
,
"buttons"
:[
{
"type"
:
"postback"
,
"title"
:
"Cats"
,
"payload"
:
"CAT_PICS"
},
{
"type"
:
"postback"
,
"title"
:
"Dogs"
,
"payload"
:
"DOG_PICS"
}
]
}
}
}
}
exports
.
imageTemplate
=
(
type
,
sender_id
)
=>
{
return
{
"attachment"
:{
"type"
:
"image"
,
"payload"
:{
"url"
:
getImage
(
type
,
sender_id
),
"is_reusable"
:
true
}
}
}
}
let
users
=
{};
const
getImage
=
(
type
,
sender_id
)
=>
{
// create user if doesn't exist
if
(
users
[
sender_id
]
===
undefined
){
users
=
Object
.
assign
({
[
sender_id
]
:
{
'cats_count'
:
0
,
'dogs_count'
:
0
}
},
users
);
}
let
count
=
images
[
type
].
length
,
// total available images by type
user
=
users
[
sender_id
],
// // user requesting image
user_type_count
=
user
[
type
+
'_count'
];
// update user before returning image
let
updated_user
=
{
[
sender_id
]
:
Object
.
assign
(
user
,
{
[
type
+
'_count'
]
:
count
===
user_type_count
+
1
?
0
:
user_type_count
+
1
})
};
// update users
users
=
Object
.
assign
(
users
,
updated_user
);
console
.
log
(
users
);
return
images
[
type
][
user_type_count
];
}
Please
register
or
login
to post a comment