postback.js 4.29 KB
const express = require('express');
const app = express();
const line = require('@line/bot-sdk');
const config = require('./config');

const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
//papago api
const request = require('request');

//번역 api_url
const translate_api_url = 'https://openapi.naver.com/v1/papago/n2mt';

//언어감지 api_url
const languagedetect_api_url = 'https://openapi.naver.com/v1/papago/detectLangs';

//eng grammar check
const textgears =require('textgears');

// create LINE SDK client
const client = new line.Client(config.line_config);

// create Express app
// about Express itself: https://expressjs.com/

// register a webhook handler with middleware

// about the middleware, please refer to doc
app.post("/webhook", line.middleware(config.line_config), (req, res) => {
    // res.status(200).end();
    Promise.all(req.body.events.map(handleEvent)).then(result =>
        res.json(result)
    );
});

const message ={
    type: 'text',
    text:'메뉴를 선택해 주세요 \t 1.번역 \t 2. 문법'
}

function handleEvent(event) {

    if (event.type !== 'message' || event.message.type !== 'text' ) {
        // ignore non-text-message event
        return Promise.resolve(null);
    }
    return client.replyMessage(event.replyToken,message);
app.post('/message/reply',function(req,res){
   const msg = req.body;

  switch(msg) {
      case '번역':
      case '1':

          return new Promise(function(resolve, reject) {
              //언어 감지 option
              var detect_options = {
                  url : languagedetect_api_url,
                  form : {'query': event.message.text},
                  headers: config.naver_header
              };
              //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') {
                          source = detect_body.langCode == 'ko' ? 'ko' : 'en';
                          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: config.naver_header
                          };
                          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);
                              }
                          });
                      }
                  }});
  });
          break;
          case '문법':
              textgears({
                          key: '9WUGcY6ZayYMphG7',
                          text: event.message.text,
                      }).then(res => {
                          for (const error of res.errors) {
                              console.log('Bad: %s. Better: %s', error.bad, error.better.join(', '));
                          }
                      });
          break;
       }
});
}

app.listen(3000, function () {
    console.log('Linebot listening on port 3000!');
})