Yuki's bnb blog

こんにちは!Yukiといいます。本業のかたわら大阪で2016年夏から民泊運営のお手伝いをしています。民泊業務に関する様々なことを自動化・効率化したいと思い日々活動しています。 お気軽にコメント・お問い合わせください :) TOEICスコア 985

【コピペOK!GAS】LINEで日直を毎日自動通知する方法

f:id:yukibnb:20190904154545p:plain

こんにちは!
Yuki (@yukibnb) です。

以前LINE NotifyとGASを使用して定期的に自動通知を送るための方法を紹介しました。
www.yukibnb.com

www.yukibnb.com


紹介した方法は定型文を定期的に送る方法でした。

ですが動的に文章を編集してLINE通知を送りたいことも多いはずです。

例えばスプレッドシートに記載されている日直の情報を読み取って、毎朝「本日の担当者は○○さんです」という通知を送りたい場合です。

今回はLINEで日直を毎日自動通知する方法をサンプルコードと共に紹介します。
 

 

準備事項

使用するサービス

今回は以下3つのサービスを使用します。

  • GAS (Google Apps Script)
  • Google スプレッドシート
  • LINE Notify


LINE Notifyのトークンを取得していない方は以下記事を参考に取得してください。
LINE Notifyを使うためのアクセストークンを取得

またGASのサンプルコードではMoment.jsというライブラリーを使用しています。以下を参考にMoment.jsを追加してください。
【超便利!】GASのややこしい日付&時刻処理はMoment.jsで解決!

 

予備知識

サンプルコードは丸々コピペしたり、皆さん自身で少し編集することで簡単に使用できます。

ただし、スプレッドシートのセル範囲の指定方法や二次元配列の一定の理解があるともっと応用がききます。もしご興味があれば以下記事もご覧ください。

www.yukibnb.com

www.yukibnb.com

 

LINE自動通知の設定方法

スプレッドシートを準備しよう

まずはLINE通知の情報元となるスプレッドシートを準備します。

今回はシンプルに以下のようなものを用意しました。A列に日付、B列に担当者を入力しました。
f:id:yukibnb:20190904162632p:plain

 

コピペでOK!スクリプトを準備しよう

スプレッドシートのメニューから「ツール」⇒「スクリプトエディタ」を選択し、スクリプトの入力画面(スクリプトエディタ)を開きましょう。

f:id:yukibnb:20190904163320p:plain

 
次に以下のスクリプトをスクリプトエディタに丸々コピペしてください。

※スプレッドシートID、シート名、LINE Notifyのトークンはみなさんのものを入力してください。

※Moment.jsライブラリーを追加していないとこのスクリプトは動きません。

function lineAssigned(date) {
  //スプレッドシートIDとシート名をそれぞれ入力してください
  var ss = SpreadsheetApp.openById('スプレッドシートIDをここに入力');
  var sh = ss.getSheetByName('シート名をここに入力');
  
  //本日の日付を取得する
  var date = Moment.moment();
  
  //本日の日付を月と日だけでフォーマット
  var today_dateOnly = date.format('MM/DD');
  
  //曜日を取得するための準備
  var today_day = date.format('d');
  var dayArray = ['日','月','火','水','木','金','土'];
  
  //最終行の番号を取得する
  var lastRow = sh.getLastRow();
  
  //担当者名を格納する空の変数を作成
  var assignedStaff = "";
  
  //日付と担当者の一覧表を二次元配列で取得する
  var table = sh.getRange(1,1,lastRow,2).getValues();
  
  //二次元配列table内の日付を一つ一つループで調べる
  for(var i = 0; i < table.length; i++) {
    
    //二次元配列内の日付をフォーマットする
    var tableDate = Moment.moment(table[i][0]);
    var tableDate_dateOnly = tableDate.format('MM/DD');
    
    //本日の日付と同じ場合、担当者名を変数assignedStaffに格納する
    if(tableDate_dateOnly === today_dateOnly){
      assignedStaff = table[i][1];
    }
  }

 //LINEで送信したい文章
  var content = '\n' + today_dateOnly + ' (' + dayArray[today_day] + ')'
              + '\n\n本日の担当者は' + assignedStaff + 'さんです。';
  
 
  sendHttpPost_lineAssigned(content);

}
  
function cron_lineAssigned() {
  var now = new Date();
  
  lineAssigned(now);
}


// LINE Notifyへの通知
function sendHttpPost_lineAssigned(content){
  //LINE Notifyのトークンを入力してください
  var token = ['トークンをここに入力'];
  var options =
   {
     "method"  : "post",
     "payload" : "message=" + content,
     "headers" : {"Authorization" : "Bearer "+ token}
   };
 
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

 
これでスクリプトの準備は完了です!

 

自動通知のためのトリガーを準備

次に毎日自動通知されるためのトリガーを設定しましょう。

スクリプト入力画面の上部にある時計マークをクリックしてください。すると画面が切り替わります。
f:id:yukibnb:20190904164458p:plain

 
画面右下の「トリガーを追加」ボタンをクリックしてください。ポップアップが表示されます。
f:id:yukibnb:20190904164826p:plain

 
以下画像のように設定してください。
f:id:yukibnb:20190904165207p:plain

  1. 「cron_lineAssigned」を選択
  2. 「時間手動型」を選択
  3. 「日付ベースのタイマー」を選択
  4. LINEで自動通知したい時間帯を選択
  5. 「保存」をクリック

 
無事トリガーを設定できると以下のように一覧に表示されます。
f:id:yukibnb:20190904165507p:plain

 
これですべての準備が完了です!

 

LINEが毎日届くようになりました

今回の例では「午前8時~9時」に設定したので、毎日午前8時~9時に以下のようなLINEが届きます。
f:id:yukibnb:20190904165813j:plain
※スクリーンショットを撮るために手動でスクリプトを実行したので画像内では「16:40」に届いています。実際の自動通知ではトリガーに設定した時間帯(例: 午前8時~9時)に届きます。

 
使用したスプレッドシートをもう一度見てみましょう。
f:id:yukibnb:20190904162632p:plain

9/4の担当者は田中さんです。正しくLINEで担当者を通知できていますね。

明日9/5には「本日の担当者は竹井さんです。」とLINE通知が自動送信されます。

 

まとめ

今回はGAS、スプレッドシート、LINE Notifyを使用し、動的に送信する文章を編集してLINE通知する方法を紹介しました。

使用したスプレッドシートはA列に日付、B列に担当者というシンプルなものでした。

列数が増えたり同一日に複数の担当者がいたりする場合など、より複雑に文章を編集することも可能です。また別の機会に紹介したいと思います!