【LINE BOT】WebAPI를 사용해 자동 회신 BOT를 만들어 보았다

소개



LINE BOT를 이용하여 6요일과 그 내용을 자동으로 회신하는 것을 만들었습니다.
입력 문자를 바꾸는 것으로, NASA(비공식)의 「오늘의 천문학 사진」을 즐길 수도 있습니다.

목적



육요일을 고집하는 사람은 적어지고 있다고 생각합니다만, 아직 대안등의 길일을 좋아하는 사람은 많다고 생각합니다, 개인적인 이벤트가 발생하면 「오늘은 대안일까?」 「친구일까?」 등과 가끔 신경이 쓰이는 일이 있으므로, 「오늘은」이라고 입력하는 오늘의 6요일을 자동 회신하는 BOT를 제작했습니다.

별로 만든 편이 좋을까 생각했습니다만, 이번은 연습도 겸해로 화상도 취득하고 싶었으므로, 「오늘의 화상은」라고 입력하면 NASA(비공식)보다 「오늘의 천문학 사진」 가져오고 자동으로 표시합니다. 우주의 아름다움 넓이를 보고 자신의 작음을 느낍니다.

만든 것





구성



환경


  • node.js v14.5.0
  • @line/bot-sdk 7.0.0
  • axios 0.19.2
  • date-utils 1.2.21
  • express 4.17.1

  • LINE Messaging API



    Node.js에서 LINE BOT을 만드는 방법은 여기를 참고로했습니다.

    1시간에 LINE BOT 만들기 핸즈온 (자료 + 리포트) in Node 학원제 2017 #nodefest

    이번에 사용한 WEBAPI



  • 음력, 육요일 등 날짜에 관한 정보를 취득할 수 있는 API(외부 사이트)
  • 지정된 일자에 관한 다양한 ("오늘은 무슨 날"적인) 정보를 취득할 수 있습니다.


  • NASA APOD (unofficial API)
  • 「오늘의 천문학 사진」을 취득하는데 사용했습니다.


  • 코드



    server.js
    "use strict";
    
    const express = require("express");
    const line = require("@line/bot-sdk");
    const axios = require('axios');
    const PORT = process.env.PORT || 3030;
    
    const config = {
        channelSecret: 'channelSecret',
        channelAccessToken: 'channelAccessToken'
    };
    
    const app = express();
    require('date-utils');
    
    var dt = new Date();
    var formatted = dt.toFormat("YYYY-MM-DD");
    console.log(formatted);
    
    app.get("/", (req, res) => res.send("Hello LINE BOT!(GET)")); //ブラウザ確認用(無くても問題ない)
    app.post("/webhook", line.middleware(config), (req, res) => {
      console.log(req.body.events);
    
      //ここのif分はdeveloper consoleの"接続確認"用なので削除して問題ないです。
      if (
        req.body.events[0].replyToken === "00000000000000000000000000000000" &&
        req.body.events[1].replyToken === "ffffffffffffffffffffffffffffffff"
      ) {
        res.send("Hello LINE BOT!(POST)");
        console.log("疎通確認用");
        return;
      }
    
      Promise.all(req.body.events.map(handleEvent)).then((result) =>
        res.json(result)
      );
    });
    
    const client = new line.Client(config);
    
    async function handleEvent(event) {
        if(event.type !== 'message' || event.message.type !== 'text'|| event.message.type !== 'location') {
            return Promise.resolve(null);
        }
    
    
    
        let shakkou='';
       let mes = '';
        if(event.message.text === '今日は') {//「きょうは」と入力する。
        const res = await axios.get('https://dateinfoapi.appspot.com/v1?date='+ formatted);
        const pushText = res.data.rokuyo;
            if(res.data.rokuyo === '赤口'){
                shakkou ="正午の前後を除いて凶日、午前11時ごろから午後1時ごろまでは吉です。";
            }else if(res.data.rokuyo === '大安'){
                shakkou ="何事においても吉、成功しないことはない日";
            }else if(res.data.rokuyo === '先勝'){
                shakkou ="午前は吉、午後は凶";
            }else if(res.data.rokuyo === '友引'){
                shakkou ="朝晩は吉、昼は凶";
            }else if(res.data.rokuyo === '先負'){
                shakkou ="午前は凶、午後吉";
            }else if(res.data.rokuyo === '仏滅'){
                shakkou ="大凶日";
            }
        console.log(pushText);
        mes = '今日は「'+ pushText +'」です。\n'+ shakkou;
        return client.replyMessage(event.replyToken, {
            type: 'text',
            text: mes,
        });
        }else if(event.message.text === '今日の画像は'){
            const response = await axios.get('https://api.nasa.gov/planetary/apod?api_key='+ {APIkey});
            console.log(response.data.url);
        await client.pushMessage(event.source.userId, {
            type: 'image',
            originalContentUrl:response.data.url,
            previewImageUrl:response.data.url,
        }); 
        }
    }
    
    
    
    app.listen(PORT);
    console.log(`Server running at ${PORT}`);
    

    끝에



    LINE의 국내 유저수는 8400만명이며, SNS 중에서는 던트츠로 1위이다, 덧붙여서 2위의 Twitter는 4500만명(2020년 6월 시점). 메시지 인프라로 정착하고 있다는 장점이 있습니다. UI 등도 간단하게 할 수 있기 때문에, 서비스를 고속으로 구축할 수 있을 것 같다.

    앞으로도 LINE Messaging API를 활용하여 출력하고 싶습니다.

    좋은 웹페이지 즐겨찾기