ShinSeungMin

Edit to operate Demo versiongit add Chatbot_Demo/app.js

......@@ -4,7 +4,6 @@ const CGV = require('./CGVTicketing.js');
const async = require('async');
MEGABOX.init(); //메가박스 코드 시작(영화관 리스트 가져오기)
CGV.init(); //CGV 코드 시작
const PUSH_TARGET_URL = 'https://api.line.me/v2/bot/message/push'
const REPLY_TARGET_URL = 'https://api.line.me/v2/bot/message/reply'
const asyncHandler = require('express-async-handler')
const bodyParser = require('body-parser');
......@@ -19,7 +18,6 @@ var app = express();
app.use(bodyParser.json());
/////////////////////////////////////////////////
// commit 할때 지워야 할것들
const USER_ID = '';
const TOKEN = '';
const domain = '';
const KAKAO_KEY = '';
......@@ -32,6 +30,7 @@ let CGV_date = ""; //날짜
let CGV_RequestedLocation = ""; //사용자가 입력한 장소
let CGV_RespondedTheaters = []; //API를 통해 받아온 영화관들 및 카카오맵 연결 링크
let CGV_SelectedTheater = ""; //사용자가 설정한 영화관 이름
let CGV_SelectedTheaterURL = "";
let CGV_SelectedTheaterCode = ""; //영화관 고유코드
let CGV_accessible_movies = []; //상영 날짜와 상영관에 따라 예매할 수 있는 영화 목록
let CGV_movie_chart = [];
......@@ -56,9 +55,9 @@ exports.MEGA_PlayingMovieURL = MEGA_PlayingMovieURL;
////////////////////////////////////////////////
//처음 영화관을 가져오는 것까지 대략 30초가 걸림 => 30초 기다리고 메세지 전송
setTimeout(function () {
PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
}, 30000);
// setTimeout(function () {
// PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
// }, 30000);
//app.post('/hook', function (req, res) {
app.post('/hook', asyncHandler(async (req, res, next) => {
......@@ -76,7 +75,7 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
if (eventObj.message.text == "브랜드") {
initFlag = false;
MEGA_flag = -1;
PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
PushSingleMessage(eventObj, "원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
}
if (initFlag == false && eventObj.message.text == "1") { //브랜드 선택- CGV 인 경우: CGV_flag를 0으로 두어 메가박스 임을 확인
......@@ -103,7 +102,7 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
GetCGVKakaoLocalAPI(CGV_RequestedLocation);
setTimeout(function () {
if (CGV_RespondedTheaters.length == 0)
PushSingleMessage("검색 결과가 없습니다. 다시 입력해주세요.");
PushSingleMessage(eventObj, "검색 결과가 없습니다. 다시 입력해주세요.");
else {
if (CGV_RespondedTheaters.length == 1) {
CGV_SelectedTheater = CGV_RespondedTheaters[0].theater_name;
......@@ -118,7 +117,7 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
CGV_OutputString += String(i + 1) + ": " + CGV_RespondedTheaters[i].theater_name + "\n";
}
CGV_OutputString += String(CGV_RespondedTheaters.length + 1) + ": 다시 검색하기";
PushSingleMessage(CGV_OutputString);
PushSingleMessage(eventObj, CGV_OutputString);
CGV_flag = 101;
}
}
......@@ -129,6 +128,7 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
let selection = parseInt(message.text);
if (selection > 0 && selection < CGV_RespondedTheaters.length + 1) {
CGV_SelectedTheater = CGV_RespondedTheaters[selection - 1].theater_name;
CGV_SelectedTheaterURL = CGV_RespondedTheaters[selection - 1].theater_url;
CGV_SelectedTheaterCode = await CGV.getTheaterCode(CGV_SelectedTheater);
CGV_flag = 2;
}
......@@ -142,7 +142,7 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
}
////날짜 입력 받기
if (CGV_flag === 2) {
const text1 = "선택한 영화관은 CGV" + CGV_SelectedTheater + "입니다.\n 영화를 관람할 날짜를 선택해 주세요.";
const text1 = "선택한 영화관은 " + CGV_SelectedTheater + "입니다.\n 영화를 관람할 날짜를 선택해 주세요.";
const text2 = "ex)20020409, YYYYMMDD";
SendMessage(eventObj, text1, text2);
CGV_flag = 3;
......@@ -156,7 +156,7 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
CGV_accessible_movies = await CGV.getMovieChart(5);
const text1 = "현재상영작을 가져오는 중입니다.";
const text2 = "잠시만 기다려주세요.";
PushMessage(text1, text2);
//PushMessage(text1, text2);
console.log(CGV_accessible_movies);
CGV_flag++;
} else {
......@@ -180,23 +180,23 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
if (CGV_flag === 4) {
let AccessibleMovieText = "-- 예매 가능한 상영작 --\n\n";
if (CGV_accessible_movies.length == 0) {
PushMessage("현재상영작이 없습니다.", "영화관 선택 단계로 이동합니다.");
setTimeout(function () {
PushMessage("영화관 위치를 입력해주세요", "ex1) 강남");
}, 1000);
PushMessage(eventObj, "현재상영작이 없습니다.\n영화관 선택 단계로 이동합니다.", "영화관 위치를 입력해주세요\nex1)강남");
// setTimeout(function () {
// PushMessage(eventObj, "영화관 위치를 입력해주세요", "ex1) 강남");
// }, 1000);
CGV_flag = 1;
}
else if (CGV_accessible_movies.length == 1) {
AccessibleMovieText += ("1. " + CGV_accessible_movies[0].title);
const SelectedMovieCode = CGV_accessible_movies[0].code;
PushMessage(AccessibleMovieText, "바로 링크가 전송됩니다.");
setTimeout(function () {
//PushMessage(AccessibleMovieText, "바로 링크가 전송됩니다.");
//setTimeout(function () {
const finalURL_web = CGV_url_web + "?MOVIE_CD=" + SelectedMovieCode + "&MOVIE_CD_GROUP=" + SelectedMovieCode + "&THEATER_CD=" + CGV_SelectedTheaterCode + "&PLAY_YMD=" + CGV_date;
const finalURL_mobile = CGV_url_mobile + "?mgc=" + SelectedMovieCode + "&tc=" + CGV_SelectedTheaterCode + "&ymd=" + CGV_date;
//console.log(finalURL_web);
//PushMessage(finalURL_web, "링크를 누르면 예매 창으로 바로 이동합니다.");
PushURLMessage(finalURL_web, finalURL_mobile);
}, 1000);
PushFinalMessage(eventObj, finalURL_web, finalURL_mobile, CGV_SelectedTheaterURL, "카카오맵으로 검색한 " + CGV_SelectedTheater + "의 위치입니다.", "원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
//}, 1000);
}
else {
setTimeout(function () {
......@@ -207,7 +207,7 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
rank++;
}
console.log(AccessibleMovieText);
PushMessage(AccessibleMovieText, "예매할 영화 번호를 입력해주세요.\n ex)1 (영화 앞 숫자만 입력)");
PushMessage(eventObj, AccessibleMovieText, "예매할 영화 번호를 입력해주세요.\n ex)1 (영화 앞 숫자만 입력)");
CGV_flag = 5;
}, 1000);
}
......@@ -215,30 +215,30 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
if (CGV_flag === 5) {
const index = parseInt(message.text) - 1;
if (index < 0 || index > 4) {
PushSingleMessage("다시 입력해주세요!");
PushSingleMessage(eventObj, "다시 입력해주세요!");
} else {
const SelectedMovieCode = CGV_accessible_movies[index].code;
const finalURL_web = CGV_url_web + "?MOVIE_CD=" + SelectedMovieCode + "&MOVIE_CD_GROUP=" + SelectedMovieCode + "&THEATER_CD=" + CGV_SelectedTheaterCode + "&PLAY_YMD=" + CGV_date;
const finalURL_mobile = CGV_url_mobile + "?mgc=" + SelectedMovieCode + "&tc=" + CGV_SelectedTheaterCode + "&ymd=" + CGV_date;
//console.log(finalURL_web);
//PushMessage(finalURL_web, "링크를 누르면 예매 창으로 바로 이동합니다.");
PushURLMessage(finalURL_web, finalURL_mobile);
setTimeout(function () {
PushFinalMessage(eventObj, finalURL_web, finalURL_mobile, CGV_SelectedTheaterURL, "카카오맵으로 검색한 " + CGV_SelectedTheater + "의 위치입니다.", "원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
//setTimeout(function () {
initFlag = false;
CGV_flag = -1;
PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
}, 1000);
//PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
//}, 1000);
}
}
} else if (initFlag == true && LOTTE_flag != -1) { //롯데시네마로 브랜드 선택된 경우
PushMessage("현재 롯데시네마는 AWS 서버 문제로 지원되지 않습니다!\n다른 브랜드를 선택해주세요.\n롯데시네마의 예매 링크 사이트는 https://www.lottecinema.co.kr/NLCHS/Ticketing 입니다.", "원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
PushMessage(eventObj, "현재 롯데시네마는 AWS 서버 문제로 지원되지 않습니다!\n다른 브랜드를 선택해주세요.\n롯데시네마의 예매 링크 사이트는 https://www.lottecinema.co.kr/NLCHS/Ticketing 입니다.", "원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
initFlag = false;
LOTTE_flag = -1;
}
else if (initFlag == true && MEGA_flag != -1) { //메가박스로 브랜드 선택된 경우
if (MEGA_flag == 0) {
const text1 = "영화관 위치를 입력해주세요";
const text2 = "ex1)강남";
const text2 = "ex)강남";
SendMessage(eventObj, text1, text2);
MEGA_flag++;
//PusbuttonhMessage("https://developers.line.biz/en/reference/messaging-api/#message-common-properties");
......@@ -267,10 +267,10 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
console.log(String(x + 1), MEGA_AbleLocationList[x].LocationName);
}
MEGA_OutputString += String(MEGA_count + 1) + ": 다시 검색하기";
PushSingleMessage(MEGA_OutputString);
PushSingleMessage(eventObj, MEGA_OutputString);
MEGA_flag = 101;
} else {
PushSingleMessage("다시 입력해주세요.");
PushSingleMessage(eventObj, "다시 입력해주세요.");
}
//원본 코드
//console.log(MEGA_flag);
......@@ -313,9 +313,9 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
let today = GettingToday();//오늘 이후인지 확인하기 위해 날짜 가져옴
//console.log(MEGA_date, MEGA_TheaterLocation);
if (today <= MEGA_date && MEGA_date && MEGA_TheaterLocationCode) {
const text1 = "현재상영작을 가져오는 중입니다.";
const text2 = "잠시만 기다려주세요.";
PushMessage(text1, text2);
//const text1 = "현재상영작을 가져오는 중입니다.";
//const text2 = "잠시만 기다려주세요.";
//PushMessage(text1, text2);
MEGA_PlayingMovieURL = "https://megabox.co.kr/on/oh/ohb/SimpleBooking/simpleBookingPage.do" + '?brchNo1=' + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
MEGABOX.using_PlayingMovieURL(MEGA_PlayingMovieURL);
await MEGABOX.geting_PlayingMovie();
......@@ -355,26 +355,26 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
}
console.log(Object.keys(MEGA_PlayingMovieList).length);
if (Object.keys(MEGA_PlayingMovieList).length == 0) {
PushSingleMessage("현재상영작이 없습니다.\n영화관 선택 단계로 이동합니다.");
setTimeout(function () {
PushMessage("영화관 위치를 입력해주세요", "ex1)강남");
}, 1000);
PushMessage(eventObj, "현재상영작이 없습니다.\n영화관 선택 단계로 이동합니다.","영화관 위치를 입력해주세요\nex1)강남");
//setTimeout(function () {
//PushMessage("영화관 위치를 입력해주세요", "ex1)강남");
//}, 1000);
MEGA_flag = 1;
} else if (Object.keys(MEGA_PlayingMovieList).length == 1) {
PlayingMovie += '1: ' + Object.keys(MEGA_PlayingMovieList)[0];
PushMessage(PlayingMovie, "바로 링크가 보내집니다.");
//PushMessage(PlayingMovie, "바로 링크가 보내집니다.");
MEGA_title = MEGA_PlayingMovieList[Object.keys(MEGA_PlayingMovieList)[0]];
setTimeout(function () {
//setTimeout(function () {
const PC_final_URL = "https://www.megabox.co.kr/booking?rpstMovieNo=" + MEGA_title + "&brchNo1=" + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
const Smartphone_final_URL = "https://m.megabox.co.kr/booking/movie?movieNo=" + MEGA_title + "&brchNo1=" + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
PushURLMessage(PC_final_URL, Smartphone_final_URL);
setTimeout(function () {
PushFinalMessage(eventObj, PC_final_URL, Smartphone_final_URL, MegaboxKakaoResultTheaterURL, "카카오맵으로 검색한 " + MegaboxKakaoResultTheaterNAME + "의 위치입니다.", "원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
//setTimeout(function () {
initFlag = false;
MEGA_flag = -1;
MEGA_PlayingMovieList = [];
PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
}, 1000);
}, 1000);
//PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
//}, 1000);
//}, 1000);
} else {
let index = 0;
for (let playingmovie = 0; playingmovie < Object.keys(MEGA_PlayingMovieList).length; playingmovie++) {
......@@ -382,20 +382,20 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
PlayingMovie += "\n";
}
console.log(PlayingMovie);
await PushMessage(PlayingMovie, "예매할 영화 번호를 입력해주세요.\n ex)1 (영화 앞 숫자만 입력)");
PushMessage(eventObj, PlayingMovie, "예매할 영화 번호를 입력해주세요.\n ex)1 (영화 앞 숫자만 입력)");
MEGA_flag = 5;
}
} else if (MEGA_flag == 5) {
const index = parseInt(message.text) - 1;
console.log(Object.keys(MEGA_PlayingMovieList).length);
if (index < 0 || index > Object.keys(MEGA_PlayingMovieList).length - 1) {
PushSingleMessage("다시 입력해주세요!");
PushSingleMessage(eventObj, "다시 입력해주세요!");
} else {
MEGA_title = MEGA_PlayingMovieList[Object.keys(MEGA_PlayingMovieList)[index]];
const PC_final_URL = "https://www.megabox.co.kr/booking?rpstMovieNo=" + MEGA_title + "&brchNo1=" + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
const Smartphone_final_URL = "https://m.megabox.co.kr/booking/movie?movieNo=" + MEGA_title + "&brchNo1=" + MEGA_TheaterLocationCode + '&playDe=' + MEGA_date;
console.log(PC_final_URL, Smartphone_final_URL);
PushURLMessage(PC_final_URL, Smartphone_final_URL);
//PushURLMessage(PC_final_URL, Smartphone_final_URL);
MEGA_PlayingMovieList = []; //영화 리스트 초기화
MegaboxKakaoResultTheater = [];
GetMegaboxKakaoMapURL(MEGA_TheaterLocation);
......@@ -404,13 +404,13 @@ app.post('/hook', asyncHandler(async (req, res, next) => {
let MegaboxKakaoResultTheaterNAME = MegaboxKakaoResultTheater[0]['theater_name'];
let MegaboxKakaoResultTheaterURL = MegaboxKakaoResultTheater[0]['theater_url'];
console.log(MegaboxKakaoResultTheaterNAME, MegaboxKakaoResultTheaterURL);
PushMessage(MegaboxKakaoResultTheaterURL, "카카오맵으로 검색한 " + MegaboxKakaoResultTheaterNAME + "의 위치입니다.");
setTimeout(function () {
//EGA_PlayingMovieList = [];
PushFinalMessage(eventObj, PC_final_URL, Smartphone_final_URL, MegaboxKakaoResultTheaterURL, "카카오맵으로 검색한 " + MegaboxKakaoResultTheaterNAME + "의 위치입니다.", "원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
//setTimeout(function () {
//MEGA_PlayingMovieList = [];
initFlag = false;
MEGA_flag = -1;
PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
}, 1000);
//PushSingleMessage("원하시는 브랜드의 번호를 입력해주세요.\n1: CGV\n2: LotteCinema\n3: Megabox\n언제든 브랜드를 바꾸고 싶으시다면 '브랜드'를 입력해주세요.");
//}, 1000);
}, 2000);
}
}
......@@ -545,15 +545,15 @@ function SendMessage(eventObj, text1, text2 = "") { //reply message
console.log(body);
});
}
function PushMessage(text1, text2 = "") { //push two message
function PushMessage(eventObj, text1, text2 = "") { //push two message
request.post(
{
url: PUSH_TARGET_URL,
url: REPLY_TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"to": `${USER_ID}`,
"replyToken": eventObj.replyToken,
"messages": [
{
"type": "text",
......@@ -569,15 +569,51 @@ function PushMessage(text1, text2 = "") { //push two message
console.log(body)
});
}
function PushSingleMessage(text1) {//push single message
function PushFinalMessage(eventObj, text1, text2, text3, text4, text5) { //push four message with urls
request.post(
{
url: PUSH_TARGET_URL,
url: REPLY_TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"to": `${USER_ID}`,
"replyToken": eventObj.replyToken,
"messages": [
{
"type": "text",
"text": "pc버전 url입니다\n\n" + text1
},
{
"type": "text",
"text": "mobile버전 url입니다\n\n" + text2
},
{
"type": "text",
"text": text3
},
{
"type": "text",
"text": text4
},
{
"type": "text",
"text": text5
}
]
}
}, (error, response, body) => {
console.log(body)
});
}
function PushSingleMessage(eventObj, text1) {//push single message
request.post(
{
url: REPLY_TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"replyToken": eventObj.replyToken,
"messages": [
{
"type": "text",
......@@ -589,15 +625,15 @@ function PushSingleMessage(text1) {//push single message
console.log(body)
});
}
function PushURLMessage(pcurl, smartphoneurl) {//push single message
function PushURLMessage(eventObj, pcurl, smartphoneurl) {//push single message
request.post(
{
url: PUSH_TARGET_URL,
url: REPLY_TARGET_URL,
headers: {
'Authorization': `Bearer ${TOKEN}`
},
json: {
"to": `${USER_ID}`,
"replyToken": eventObj.replyToken,
"messages": [
{
"type": "text",
......