GAS+linebot에서 google spreadsheet 근태 관리

여러분이 하고 있는지 생각합니다만, 일단 메모로서 남겨 둡니다.
대학의 아르바이트에서의 근태 관리용입니다.

하고 싶은 일


  • 出勤 , 退勤 를 포함한 단어를 line에 투하하면, 그 사람의 유저명, 출근 시간대 및 메세지가 google spreadsheet에 기록된다.
  • line에서 出勤よろしくお願いします! , お疲れ様でした! 등의 응답을 반환합니다.

  • (바이트에서는 불필요했기 때문에 스프레드 시트에 퇴근의 기록을 남기지 않는 방침으로 실장했습니다. 아마 추가하는 것은 간단하다고 생각합니다.)

    전제


  • line account를 가지고
  • google account가 있습니다
  • line developers등록됨

  • 우선 할 일


  • google spreadsheet 만들기
  • 시트의 이름을 sheet1로 한다.
  • sheet id를 적어 두십시오

  • 아래와 같은 시트가 있으면 괜찮습니다.



    line 의 액세스 토큰 취득



    developers console에서 가져옵니다. 내 bot 채널의 Messaging API에 있습니다.



    GAS 코드



    스프레드시트 메뉴에서 GAS 코드 편집기를 엽니다.



    GAS 스크립트는 다음과 같습니다.ACCESSTOKEN , id 빨리 각각 취득한 것을 사용합시다.

    덧붙여서, url을 get할 때에 돌려주어지는 변수는 reponse 라고 하는 변수명에 포함하지 않으면 에러가 됩니다.

    code.gs
    var ACCESSTOKEN = "xxxxxx"
    
    //spreadSheetの設定
    var id = 'xxxxxx';//https://docs.google.com/spreadsheets/d/"この部分がidです"/edit#gid=1856578608
    var spreadsheet = SpreadsheetApp.openById(id);
    
    var URL = "https://api.line.me/v2/bot/message/reply"; // 応答メッセージ用のAPI URL
    
    
    // ボットにメッセージ送信/フォロー/アンフォローした時の処理
    function doPost(e) {
      var json = JSON.parse(e.postData.contents);  
      var reply_token= json.events[0].replyToken;  
      var user_id = json.events[0].source.userId;
      var user_message = json.events[0].message.text; //ここにメッセージが格納される
    
      // ユーザー名を取得する場合は、user_idから取得する必要がある。あと、ここはresponseという変数名に格納しないとエラーになる?
      var response = UrlFetchApp.fetch(
        'https://api.line.me/v2/bot/profile/' + user_id,
        {
          "headers": {
            "Authorization": "Bearer " + ACCESSTOKEN,
          }
        }
      );
      profile = JSON.parse(response);
      var username = profile.displayName
    
      var today = new Date();
      var month = today.getMonth() + 1;
      var date = today.getDate();
      var hour = today.getHours();
      var minute = today.getMinutes();
      var time = month + '月' + date + '日' +hour + ':' + minute;
    
      // 時間帯によってどの時限のシフトか分ける
      switch (true) {
        case hour <= 13:
          var period = "lunch";
          break
        case hour <= 14:
          var period = "3rd period";
          break
        case hour <= 16:
          var period = "4th period";
          break
        default:
          var period = "finished";
          break
      }
    
      if(user_message.includes('出勤')){//出勤という言葉を含む場合
        var sheet;
        sheet = spreadsheet.getSheetByName("sheet1");//sheet1に記入する
        sheet.appendRow([user_message, username, period]);//シートにメッセージを記入
        //返信
        if (period == "finished") {
          textMessage = "tutoring sessions are over for today!";
        } else {
          textMessage = username + 'さん、' + period + 'のシフトよろしくお願いします!';
        }
        pushMessage(textMessage, reply_token);
      }
      else if(user_message.includes('退勤')){//退勤という言葉を含む場合
        textMessage = username + 'さん、' + 'お疲れ様でした!';
        pushMessage(textMessage, reply_token);
      }
    }
    
    /*メッセージを送信*/
    function pushMessage(textMessage, replyToken) {
      UrlFetchApp.fetch(URL, {
        "headers": {
          "Content-Type": "application/json; charset=UTF-8",
          "Authorization": "Bearer " + ACCESSTOKEN,
        },
        "method": "post",
        "payload": JSON.stringify({
          "replyToken": replyToken,
          "messages": [{
            "type": "text",
            "text": textMessage,
          }],
        }),
      });
    }
    

    배포



    웹 앱으로 배포합니다. 액세스할 수 있는 사용자는 全員로 둡니다.



    이제 배포되므로 URL을 복사하고



    webhook에 붙여넣습니다.



    verify를 눌러 success이면 성공입니다.



    라인에서의 행동



    시간외에 출근하려고 했으므로, 이미 끝났다고 말해져 버렸습니다,,,



    퇴근 때는 잘 작동합니다.



    다만 출근과 퇴근으로 연동할 수 없는 것이 조금 걸린다. 하지만 괜찮습니까?

    spreadsheet 측의 거동



    여기는 고치는 것을 잊었고, finished 그대로 기록되고 있네요. 뭐 거동을 확인할 수 있었으므로 다음 번 이후 고치겠다고 합니다.



    요약



    GAS에서 Linebot을 만들어 스프레드 시트 측에서도 반영시킬 수있었습니다.
    오류나 실수로 대체로 3시간 정도 걸렸다고 생각합니다.

    GAS를 만질 수 있었던 것은 재미있었습니다! 그냥 디버깅하는 간단한 방법을 가르쳐주세요,,,

    참고



    GAS를 사용하여 LINEBOT을 만들자 (1).

    Google Apps Script로 LINE Bot 만들기

    Messaging API 참조 #분석

    Messaging API 참조 #응답 메시지

    클래스 UrlFetchApp

    좋은 웹페이지 즐겨찾기