김대선

회사명, 태그, 제목으로 검색 챗봇에 적용

Showing 1 changed file with 148 additions and 64 deletions
......@@ -15,7 +15,7 @@ const data = require('./functions/dataFunctions')
const find = require('./functions/findFunction')
// 0초 0분 0시 아무날 아무달 아무년
const saveData = schedule.scheduleJob('00 0 00 * * *', data.save)
const saveData = schedule.scheduleJob('55 51 19 * * *', data.save)
var app = express();
app.use(bodyParser.json());
......@@ -28,75 +28,65 @@ app.post('/hook', function (req, res) {
console.log('======================', new Date() ,'======================');
console.log('[queryString]', req.query)
console.log('[request]', req.body);
console.log('[request source] ', eventObj.source, eventObj2.source);
console.log('[request message]', eventObj.message, eventObj2.message);
console.log('[request postback]', eventObj.postback, eventObj2.postback);
const messageData = find.byCompanyName('naver')
console.log('[request source] ', eventObj.source);
console.log('[request message]', eventObj.message);
console.log('[request postback]', eventObj.postback);
let messageData
const messageResult = []
let string
let start
let finish
let data
let button
let flag = true
if (!eventObj.postback){
let button
if(eventObj.type == "message"){
start = 0;
finish = start + 4
}
else{
start = parseInt(eventObj.postback.data.split(" ")[1])
finish = start + 4
if (finish >= messageData.length){
finish = messageData.length
flag = false
}
}
data = `kakao ${finish}`
button = {
"type" : "flex",
"altText" : "test FLEX",
"contents" : {
"type": "bubble",
"body": {
"type": "box",
"layout" : "vertical",
"contents" : [
{
"type": "button",
"action": {
"type":"postback",
"label":"다음 보기",
"data": data
button = {
"type" : "flex",
"altText" : "test FLEX",
"contents" : {
"type": "bubble",
"body": {
"type": "box",
"layout" : "vertical",
"contents" : [
{
"type": "button",
"action": {
"type":"postback",
"label":"회사명으로 검색하기",
"data": eventObj.message.text + "|||0|||" + "companyName"
},
"style": "primary",
"color": "#ff9a9e"
},
"style": "primary",
"color": "#0000ff"
}
]
}
}
}
console.log(start, finish, data)
for(start ; start < finish; start++){
string = "제목 : " + messageData[start].title +"\n" + "회사명 : " + messageData[start].companyName + "\n" + "tags : " + messageData[start].tags.toString() +"\n" + "링크 : " + messageData[start].url + "\n"
messageResult.push({
"type" : "text",
"text" : string
})
}
if(flag){
messageResult.push(button)
result = {
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":eventObj.replyToken,
"messages": messageResult
{
"type": "button",
"action": {
"type":"postback",
"label":"태그로 검색하기",
"data": eventObj.message.text + "|||0|||" + "tag"
},
"style": "primary",
"color": "#fbc2eb"
},
{
"type": "button",
"action": {
"type":"postback",
"label":"제목으로 검색하기",
"data": eventObj.message.text + "|||0|||" + "title"
},
"style": "primary",
"color": "#8fd3f4"
}
]
}
}
}
}
else{
result = {
url: TARGET_URL,
headers: {
......@@ -104,16 +94,110 @@ app.post('/hook', function (req, res) {
},
json: {
"replyToken":eventObj.replyToken,
"messages": messageResult
"messages": [button]
}
}
}
request.post(result ,(error, response, body) => {
request.post(result ,(error, response, body) => {
console.log(body)
});
res.sendStatus(200);
res.sendStatus(200);
}
else if(eventObj.type = "postback"){
postbackData = eventObj.postback.data.split("|||")
if(postbackData[2] == "companyName") messageData = find.byCompanyName(postbackData[0])
else if(postbackData[2] == "tag") messageData = find.byTags(postbackData[0])
else if(postbackData[2] == "title") messageData = find.byTitle(postbackData[0])
if(messageData.length == 0){
result = {
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":eventObj.replyToken,
"messages": [{
"type" : "text",
"text" : "검색결과가 없습니다!"
}]
}
}
request.post(result ,(error, response, body) => {
console.log(body)
});
res.sendStatus(200);
}
else{
start = parseInt(eventObj.postback.data.split("|||")[1])
finish = start + 4
if (finish >= messageData.length){
finish = messageData.length
flag = false
}
button = {
"type" : "flex",
"altText" : "test FLEX",
"contents" : {
"type": "bubble",
"body": {
"type": "box",
"layout" : "vertical",
"contents" : [
{
"type": "button",
"action": {
"type":"postback",
"label":"다음 보기",
"data": postbackData[0] + " " + finish + " " + postbackData[2]
},
"style": "primary",
"color": "#fbc2eb"
}
]
}
}
}
for(start ; start < finish; start++){
string = "제목 : " + messageData[start].title +"\n" + "회사명 : " + messageData[start].companyName + "\n" + "tags : " + messageData[start].tags.toString() +"\n" + "링크 : " + messageData[start].url + "\n"
messageResult.push({
"type" : "text",
"text" : string
})
}
if(flag){
messageResult.push(button)
result = {
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":eventObj.replyToken,
"messages": messageResult
}
}
}
else{
result = {
url: TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken":eventObj.replyToken,
"messages": messageResult
}
}
}
request.post(result ,(error, response, body) => {
console.log(body)
});
res.sendStatus(200);
}
}
});
try {
const option = {
......