Toggle navigation
Toggle navigation
This project
Loading...
Sign in
이유혁
/
OSS_Project_Chatbot
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Graphs
Network
Create a new issue
Commits
Issue Boards
Authored by
이유혁
2019-11-18 17:15:58 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
5de736cad3c7187abf14d0f8178a5fe572e63e0c
5de736ca
1 parent
c75eba96
Promise pattern refactoring
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
84 additions
and
86 deletions
app.js
app.js
View file @
5de736c
var
express
=
require
(
'express'
);
var
app
=
express
();
const
express
=
require
(
'express'
);
const
config
=
require
(
'./API_config'
);
const
line
=
require
(
'@line/bot-sdk'
);
const
request
=
require
(
'request'
);
//papago api
var
request
=
require
(
'request'
);
const
app
=
express
();
//번역 api_url
var
translate_api_url
=
'https://openapi.naver.com/v1/papago/n2mt'
;
const
translate_api_url
=
'https://openapi.naver.com/v1/papago/n2mt'
;
//언어감지 api_url
var
languagedetect_api_url
=
'https://openapi.naver.com/v1/papago/detectLangs'
;
const
languagedetect_api_url
=
'https://openapi.naver.com/v1/papago/detectLangs'
;
// Naver Auth Key
//새로 발급받은 naver papago api id, pw 입력
const
client_id
=
config
.
client_id
;
const
client_secret
=
config
.
client_secret
;
// Line Channel Access Tocken
const
config
=
config
.
line_channel
;
const
line_channel
=
config
.
line_channel
;
// create LINE SDK client
const
client
=
new
line
.
Client
(
config
);
// create Express app
// about Express itself: https://expressjs.com/
const
client
=
new
line
.
Client
(
line_channel
);
// ELB health checker
app
.
get
(
'/'
,
(
req
,
res
)
=>
{
console
.
log
(
'
hello,,,,
'
);
console
.
log
(
'
ELB health check
'
);
res
.
writeHead
(
200
,
{
"Content-Type"
:
"text/html"
});
res
.
end
();
});
// register a webhook handler with middleware
// about the middleware, please refer to doc
app
.
post
(
'/webhook'
,
line
.
middleware
(
config
),
(
req
,
res
)
=>
{
Promise
.
all
(
req
.
body
.
events
.
map
(
event
=>
handleEvent
(
event
)))
.
then
((
result
)
=>
res
.
json
(
result
))
app
.
post
(
'/webhook'
,
line
.
middleware
(
line_channel
),
(
req
,
res
)
=>
{
const
promises
=
req
.
body
.
events
.
map
(
async
(
event
)
=>
{
let
language_type
=
await
language_detector
(
event
);
let
options
=
await
option_maker
(
language_type
);
let
result
=
await
receive_result
(
options
);
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
})
Promise
.
all
(
promises
)
.
then
((
result
)
=>
res
.
json
(
result
))
.
catch
((
err
)
=>
{
console
.
error
(
err
);
res
.
status
(
200
).
end
();
});
});
// event handler
function
handleEvent
(
event
)
{
if
(
event
.
type
!==
'message'
||
event
.
message
.
type
!==
'text'
)
{
// ignore non-text-message event
return
Promise
.
resolve
(
null
);
}
return
new
Promise
(
function
(
resolve
,
reject
)
{
//언어 감지 option
var
detect_options
=
{
url
:
languagedetect_api_url
,
form
:
{
'query'
:
event
.
message
.
text
},
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
};
//papago 언어 감지
request
.
post
(
detect_options
,
function
(
error
,
response
,
body
){
console
.
log
(
response
.
statusCode
);
if
(
!
error
&&
response
.
statusCode
==
200
){
var
detect_body
=
JSON
.
parse
(
response
.
body
);
var
source
=
''
;
var
target
=
''
;
var
result
=
{
type
:
'text'
,
text
:
''
};
//언어 감지가 제대로 됐는지 확인
console
.
log
(
detect_body
.
langCode
);
//번역은 한국어->영어 / 영어->한국어만 지원
if
(
detect_body
.
langCode
==
'ko'
||
detect_body
.
langCode
==
'en'
||
detect_body
.
langCode
==
'ru'
||
detect_body
.
langCode
==
'ja'
){
source
=
detect_body
.
langCode
;
if
(
source
!=
'ko'
){
target
=
'ko'
;
}
// target = source == 'ko' ? 'en':'ko';
//papago 번역 option
var
options
=
{
url
:
translate_api_url
,
// 한국어(source : ko), 영어(target: en), 카톡에서 받는 메시지(text)
form
:
{
'source'
:
source
,
'target'
:
target
,
'text'
:
event
.
message
.
text
},
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
};
// Naver Post API
request
.
post
(
options
,
function
(
error
,
response
,
body
){
// Translate API Sucess
if
(
!
error
&&
response
.
statusCode
==
200
){
// JSON
var
objBody
=
JSON
.
parse
(
response
.
body
);
// Message 잘 찍히는지 확인
result
.
text
=
objBody
.
message
.
result
.
translatedText
;
console
.
log
(
result
.
text
);
//번역된 문장 보내기
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
}
});
}
// 메시지의 언어가 영어 또는 한국어가 아닐 경우
else
{
result
.
text
=
'언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.'
;
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
}
}
});
});
}
const
language_detector
=
(
event
)
=>
{
if
(
event
.
type
!==
'message'
||
event
.
message
.
type
!==
'text'
)
{
// ignore non-text-message event
return
reject
(
new
Error
(
'메세지 혹은, 텍스트가 아닙니다.'
));
}
return
new
Promise
((
resolve
)
=>
{
//언어 감지 option
resolve
({
url
:
languagedetect_api_url
,
form
:
{
'query'
:
event
.
message
.
text
},
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
});
})
}
const
option_maker
=
(
language_type
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
request
.
post
(
language_type
,
(
error
,
response
)
=>
{
console
.
log
(
response
.
statusCode
);
if
(
!
error
&&
response
.
statusCode
==
200
){
let
detect_body
=
JSON
.
parse
(
response
.
body
);
let
source
=
''
;
let
target
=
''
;
if
(
detect_body
.
langCode
==
'ko'
||
detect_body
.
langCode
==
'en'
){
source
=
detect_body
.
langCode
==
'ko'
?
'ko'
:
'en'
;
target
=
detect_body
.
langCode
==
'ko'
?
'en'
:
'ko'
;
}
//언어 감지가 제대로 됐는지 확인
console
.
log
(
detect_body
.
langCode
);
source
=
detect_body
.
langCode
;
var
options
=
{
url
:
translate_api_url
,
form
:
{
'source'
:
source
,
'target'
:
target
,
'text'
:
event
.
message
.
text
},
headers
:
{
'X-Naver-Client-Id'
:
client_id
,
'X-Naver-Client-Secret'
:
client_secret
}
};
resolve
(
options
);
}
else
{
reject
(
new
Error
(
"request is failed"
));
}
})
})
}
const
receive_result
=
(
options
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
var
result
=
{
type
:
'text'
,
text
:
''
};
request
.
post
(
options
,
(
error
,
response
)
=>
{
// Translate API Sucess
if
(
!
error
&&
response
.
statusCode
==
200
){
// JSON
var
objBody
=
JSON
.
parse
(
response
.
body
);
// Message 잘 찍히는지 확인
result
.
text
=
objBody
.
message
.
result
.
translatedText
;
console
.
log
(
result
.
text
);
resolve
(
result
);
}
else
{
result
.
text
=
'언어를 감지할 수 없습니다. \n 번역 언어는 한글 또는 영어만 가능합니다.'
;
client
.
replyMessage
(
event
.
replyToken
,
result
).
then
(
resolve
).
catch
(
reject
);
reject
(
new
Error
(
"request is failed"
));
}
})
})
}
app
.
listen
(
3000
,
function
()
{
console
.
log
(
'Linebot listening on port 3000!'
);
...
...
Please
register
or
login
to post a comment