app.js 11.6 KB
var end = 'not';
var count = 0;
var n = 1;
var choosen = new Array();
var opt_1 = ['Korean cuisine', 'Chinese food', 'Japanese food', 'Western food', 'Guitar'];
var express = require('express');
const request = require('request');
const TARGET_URL = '라인 URL'
const TOKEN = '라인 토큰'
const PAPAGO_URL = '파파고 API URL'
const PAPAGO_ID = '파파고 ID'
const PAPAGO_SECRET = '파파고 시크릿'
const fs = require('fs');
const path = require('path');
const HTTPS = require('https');
const domain = "도메인"
const sslport = 23023;
const bodyParser = require('body-parser');
const res = require('express/lib/response');
var app = express();
app.use(bodyParser.json());
app.post('/hook', function (req, res) {
    n=1;
    var eventObj = req.body.events[0];
    var source = eventObj.source;
    var message = eventObj.message;

    // request log
    console.log('======================', new Date(), '======================');
    console.log('[request]', req.body);
    console.log('[request source] ', eventObj.source);
    console.log('[request message]', eventObj.message);
    // switch (count) {
    //     case 0:
    if (eventObj.message.text == 'start') {

        count++;
        start_msg(eventObj.replyToken, eventObj.message.text);

        sleep(5000);
        
        for(var i = 0; i<5; i++)
        {
            option(eventObj.replyToken, opt_1[i]);
            console.log(opt_1[i]);
            n++;
            sleep(5000);
        }
    }
    //         break;
    //     case 1:
    //         if (eventObj.message.text === '1' || eventObj.message.text === '2' || eventObj.message.text === '3' || eventObj.message.text == '4' || eventObj.message.texts == '5') {
    //             q_1(eventObj.replyToken, eventObj.message.text);
    //         } else {
    //             request.post(
    //                 {
    //                     url: TARGET_URL,
    //                     headers: {
    //                         'Authorization': `Bearer ${TOKEN}`
    //                     },
    //                     json: {
    //                         "replyToken": eventObj.replyToken,
    //                         "messages": [
    //                             {
    //                                 "type": "text",
    //                                 "text": "Please choose a number between 1 to 5!"
    //                             }
    //                         ]
    //                     }
    //                 }, (error, response, body) => {
    //                     console.log(body)
    //                 });
    //         }
    //         break;
    //     case 2:
    //         if (eventObj.message.text === '1' || eventObj.message.text === '2' || eventObj.message.text === '3') {
    //             q_2(eventObj.replyToken, eventObj.message.text);
    //         } else {
    //             request.post(
    //                 {
    //                     url: TARGET_URL,
    //                     headers: {
    //                         'Authorization': `Bearer ${TOKEN}`
    //                     },
    //                     json: {
    //                         "replyToken": eventObj.replyToken,
    //                         "messages": [
    //                             {
    //                                 "type": "text",
    //                                 "text": "Please choose a number between 1 to 3!"
    //                             }
    //                         ]
    //                     }
    //                 }, (error, response, body) => {
    //                     console.log(body)
    //                 });
    //         }
    //         break;
    //     case 3:
    //         if (eventObj.message.text === '1' || eventObj.message.text === '2' || eventObj.message.text === '3') {
    //             q_2(eventObj.replyToken, eventObj.message.text);
    //         } else {
    //             request.post(
    //                 {
    //                     url: TARGET_URL,
    //                     headers: {
    //                         'Authorization': `Bearer ${TOKEN}`
    //                     },
    //                     json: {
    //                         "replyToken": eventObj.replyToken,
    //                         "messages": [
    //                             {
    //                                 "type": "text",
    //                                 "text": "Please choose a number between 1 to 3!"
    //                             }
    //                         ]
    //                     }
    //                 }, (error, response, body) => {
    //                     console.log(body)
    //                 });
    //         }
    //         break;
    //     case 4:
    //         if (eventObj.message.text === '1' || eventObj.message.text === '2') {
    //             q_4(eventObj.replyToken, eventObj.message.text);
    //         } else {
    //             request.post(
    //                 {
    //                     url: TARGET_URL,
    //                     headers: {
    //                         'Authorization': `Bearer ${TOKEN}`
    //                     },
    //                     json: {
    //                         "replyToken": eventObj.replyToken,
    //                         "messages": [
    //                             {
    //                                 "type": "text",
    //                                 "text": "Please choose a number between 1 to 2!"
    //                             }
    //                         ]
    //                     }
    //                 }, (error, response, body) => {
    //                     console.log(body)
    //                 });
    //         }
    //         break;
    //     case 5:
    //         end = 'end';
    //         break;
    //     default:
    //         break;
    // }


    res.sendStatus(200);
});

function start_msg(replyToken, message) {
    request.post(
        {
            url: PAPAGO_URL,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'X-Naver-Client-Id': `${PAPAGO_ID}`,
                'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
            },
            body: 'source=en&target=ko&text=' + "Hi This is Menu recommend Chatbot! If you follow the instructions, I will recommend the menu",
            json: true
        }, (error, response, body) => {
            if (!error && response.statusCode == 200) {
                console.log(body.message);
                var transMessage = body.message.result.translatedText;
                request.post(
                    {
                        url: TARGET_URL,
                        headers: {
                            'Authorization': `Bearer ${TOKEN}`
                        },
                        json: {
                            "replyToken": replyToken,
                            "messages": [
                                {
                                    "type": "text",
                                    "text": transMessage
                                }
                            ]
                        }
                    }, (error, response, body) => {
                        console.log(body)
                    });
            }
        });
        sleep(5000);
}

function option(replyToken, message)
{
    request.post(
        {
            url: PAPAGO_URL,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'X-Naver-Client-Id': `${PAPAGO_ID}`,
                'X-Naver-Client-Secret': `${PAPAGO_SECRET}`
            },
            body: 'source=en&target=ko&text=' + n + "." + message,
            json: true
        }, (error, response, body) => {
            if (!error && response.statusCode == 200) {
                console.log(body.message);
                var transMessage = body.message.result.translatedText;
                request.post(
                    {
                        url: TARGET_URL,
                        headers: {
                            'Authorization': `Bearer ${TOKEN}`
                        },
                        json: {
                            "replyToken": replyToken,
                            "messages": [
                                {
                                    "type": "text",
                                    "text": transMessage
                                }
                            ]
                        }
                    }, (error, response, body) => {
                        console.log(body)
                    });
            }
        });
        sleep(5000);
}

function q_1(replyToken, msg) {
    count++;
    choosen.push(msg);
    request.post(
        {
            url: TARGET_URL,
            headers: {
                'Authorization': `Bearer ${TOKEN}`
            },
            json: {
                "replyToken": replyToken,
                "messages": [
                    {
                        "type": "text",
                        "text": "Choose a number\n1. 고기\n2. 해산물\n3. 기타"
                    }
                ]
            }
        }, (error, response, body) => {
            console.log(body)
        });
}

function q_2(replyToken, msg) {
    count++;
    choosen.push(msg);
    request.post(
        {
            url: TARGET_URL,
            headers: {
                'Authorization': `Bearer ${TOKEN}`
            },
            json: {
                "replyToken": replyToken,
                "messages": [
                    {
                        "type": "text",
                        "text": "Choose a number\n1. 뜨거운 음식\n2. 찬 음식"
                    }
                ]
            }
        }, (error, response, body) => {
            console.log(body)
        });
}

function q_3(replyToken, msg) {
    count++;
    choosen.push(msg);
    request.post(
        {
            url: TARGET_URL,
            headers: {
                'Authorization': `Bearer ${TOKEN}`
            },
            json: {
                "replyToken": replyToken,
                "messages": [
                    {
                        "type": "text",
                        "text": "Choose a number\n1. 국물\n2. 국물 없는 음식"
                    }
                ]
            }
        }, (error, response, body) => {
            console.log(body)
        });
}

function q_4(replyToken, msg) {
    count++;
    choosen.push(msg);
    request.post(
        {
            url: TARGET_URL,
            headers: {
                'Authorization': `Bearer ${TOKEN}`
            },
            json: {
                "replyToken": replyToken,
                "messages": [
                    {
                        "type": "text",
                        "text": "Choose a number\n1. 매운 음식\n2. 안매운 음식"
                    }
                ]
            }
        }, (error, response, body) => {
            console.log(body)
        });
}

function sleep(ms) {
    const wakeUpTime = Date.now() + ms;
    while (Date.now() < wakeUpTime) {}
  }

try {
    const option = {
        ca: fs.readFileSync('/etc/letsencrypt/live/' + domain + '/fullchain.pem'),
        key: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/privkey.pem'), 'utf8').toString(),
        cert: fs.readFileSync(path.resolve(process.cwd(), '/etc/letsencrypt/live/' + domain + '/cert.pem'), 'utf8').toString(),
    };

    HTTPS.createServer(option, app).listen(sslport, () => {
        console.log(`[HTTPS] Server is started on port ${sslport}`);
    });
} catch (error) {
    console.log('[HTTPS] HTTPS 오류가 발생하였습니다. HTTPS 서버는 실행되지 않습니다.');
    console.log(error);
}