아이가 태어났기 때문에 가정에 「LINE BOT」 추가해 보았다

전치



요 전날 차녀가 태어났습니다.
장녀가 태어났을 때는 비교적 여유가 있었기 때문에 아이가 태어났기 때문에 "집 헉"해 보았습니다. 을 하고 있었습니다만, 이번은 장녀의 육아를 하면서, 재배치 없이 시간이 없고 갓트리 시간을 취할 수 없는 상황입니다.
그럼에도 불구하고 우유와 기저귀 교체 기록과 부부 간의 공유가 필요합니다.

지난번 만든 iPad상의 앱은 AppleDeveloper 라이센스를 갱신하지 않은 것과 비엔지니어의 아내로서는 Slack이 정착하지 않았다는 점에서 부활시키는 것보다 다른 방법을 생각하는 편이 좋을 것 같습니다.

리얼에서도 아는 @LunaChevalier 씨의 기사로 LINEBOT에서 자신이 좋아하는 비서 BOT를 만들어 보자

할 일


  • LINE Developer 라이센스 등록
  • LINE MessagingAPI 준비
  • 기록용 스프레드시트 만들기
  • GAS에서 POST를 수락하는 API 준비

  • 1.LINE Developers 라이센스 등록



    이미 LINE을 이용하고 있다면 아래 URL에서 로그인하여 등록하기만 하면 됩니다.
    ぇぺぺrs. 네. 비 · 자 /

    2.LINE MessagingAPI 준비



    어느 LINE BOT의 기사에서도 링크가 붙어 있다 1시간에 LINE BOT 만들기 핸즈온 (자료 + 리포트) in Node 학원제 2017 #nodefest 를 참고로 했습니다.

    조금 막힌 것은 TOKEN이 버튼을 잡지 않으면 발행되지 않는 점입니다. 그 밖에 채널 토큰등도 있어 혼동입니다만 그것이 아니었습니다.



    3. 녹화용 스프레드시트 만들기



    Google 드라이브에서 원하는 위치에 스프레드를 만듭니다.
    시트는 아기의 「똥」이나 「오시코」를 기록하기 위한 「배설」 시트와,
    우유를 마신 것을 기록하는 "우유"시트를 준비합니다.



    스프레드시트 URL에서 스프레드시트 ID를 기록해 둡니다.

    4. GAS에서 POST를 수락하는 API 준비



    Google 드라이브의 아무 곳에나 새 GAS 파일을 만듭니다.
    그 GAS 파일에 기재된 소스는 아래 그대로 기재합니다.
    // LINE developersのメッセージ送受信設定に記載のアクセストークン
    var ACCESS_TOKEN = '<チャンネルアクセストークンを貼ります>';
    
    function doPost(e) {
      // 送信された内容
      var events = JSON.parse(e.postData.contents).events[0];
      // WebHookで受信した応答用Token
      var replyToken = events.replyToken;
      // ユーザーのメッセージを取得
      var userMessage = events.message;
    
      // 返却用のメッセージ
      var replyMessage = "";
    
      // 記録用の情報
      var reqDate = new Date();
      var saveType = "";
      var saveMessage = "";
    
      if(userMessage.text){
        // メッセージテキストを送信
        if (userMessage.text.match(/ウンチ|うんち/)) {
          replyMessage = "うんちが出たんですね!\n記録しました!!";
          saveType = "排泄";
          saveMessage = "うんち";
        }
        if (userMessage.text.match(/オシッコ|おしっこ/)) {
          replyMessage = "おしっこが出たんですね!\n記録しました!!";
          saveType = "排泄";
          saveMessage = "おしっこ";
        }
        if(userMessage.text.match(/ミルク|みるく/)){
          const milk = userMessage.text.replace(/[^0-9]/g, '');
          replyMessage = "ミルクを"+milk+"ml飲んだんですね!\n記録しました!!";
          saveType = "ミルク";
          saveMessage = milk;
        }
      } else if(userMessage.type === 'sticker'){
        // ステッカーの送信
        // https://static.worksmobile.net/static/wm/media/message-bot-api/line_works_sticker_list_new.pdf
        if(userMessage.stickerId === "284"){
          replyMessage = "うんちが出たんですね!\n記録しました!!";
          saveType = "排泄";
          saveMessage = "うんち";
        }    
      }
      //スプレッドに記録
      log(reqDate,saveType,saveMessage);
      if(!replyMessage){
        // その他
        replyMessage = "わからないンゴ";
      }
    
      // 応答メッセージ用のAPI URL
      var url = 'https://api.line.me/v2/bot/message/reply';
    
      UrlFetchApp.fetch(url, {
        'headers': {
          'Content-Type': 'application/json; charset=UTF-8',
          'Authorization': 'Bearer ' + ACCESS_TOKEN,
        },
        'method': 'post',
        'payload': JSON.stringify({
          'replyToken': replyToken,
          'messages': [{
            'type': 'text',
            'text': replyMessage,
          }],
        }),
        });
      return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
    }
    
    function log(reqDate,saveType,saveMessage){
      var target = "<スプレッドシートのIDを貼ります>";
      var spreadsheet = SpreadsheetApp.openById(target);
      var sheet = spreadsheet.getSheetByName(saveType);
      var lastRow = sheet.getLastRow();
      sheet.getRange(lastRow + 1, 1).setValue(reqDate);
      sheet.getRange(lastRow + 1, 2).setValue(saveMessage);
    }
    

    메모


  • 우유의 경우는 송신된 문자 메세지로부터 숫자만을 추출해 기록합니다.
  • 스티커로 운치만 대응시키고 있습니다.
  • 다른 스티커는 이쪽




  • 나머지 작업



    완성되면 GAS를 웹 서비스로 공개하고 발행된 요청용 URL을 복사하여 LINE Developers 측 WebHooks 대상 URL로 지정하면 완료됩니다.

    좋은 웹페이지 즐겨찾기