【5分でできる】GoogleAppScript + LINE Notifyで簡易LINE botを作ってみた
最近LINEのデータが吹っ飛んだ、まろです。
LINEって使ってる人が多いので取り敢えず自分も使ってますけど、社内でSlack使うことが多いからか、不便だなぁって思うことが結構あったりします。
そこでLINEで使えるbotを作りました。
こちらの記事 を参考にさせていただきました。
自分もこの記事とよく似た状況で、飲み会の出欠をお願いしても返信がない人がいて、その度に手動でリマインドしてました。
今回はそこを自動でできるようにします。
LINE Notifyのトークン取得
LINE Notify にアクセス
自分のLINEのアカウントでログイン
マイページでトークンを発行します。
トークン名を入力し、グループを選びます。
するとトークンが表示されるので控えておきましょう。
グループにLINE Notifyのアカウントを招待するのも忘れないように
GASで実装
Googleのスプレッドシートを開いて、
ツール→スクリプトエディタをクリック。
するとこんな画面が出てきます。ここにコードを書きます。
今回は、Googleカレンダーを参照して、次の日の予定のタイトルと時刻をリマインドするという仕様で進めます。
また、カレンダーには通知するグループに関係のないプライベートな予定もあるので、特定の文字列で始まるイベントのみ通知し、それらのイベントは日を跨ぐことはないものとします。
ざっと実装すると以下のような感じ。
var AuthorizationCode ='Bearer 取得したトークン'; var strBody = '明日の予定をお知らせします。'; // こいつを実行します function main() { var msg = getCalendarEvent(); Logger.log(msg); if(msg !== null) { sendHttpPost(msg); } } // 翌日の日付をYYYY/MM/ddの形式で返す function nextDate() { var MILLIS_PER_DAY = 1000 * 60 * 60 * 24; var now = new Date(); // 今日の日付に24時間足す var tomorrow = new Date(now.getTime() + MILLIS_PER_DAY); return Utilities.formatDate(tomorrow, 'JST', 'YYYY/MM/dd'); } // Calendarから予定翌日の予定のTitleと時間を取得し、メッセージとして返却する function getCalendarEvent() { var message; var targetDate = nextDate(); // googleCalendarからeventを取得 var myCals = CalendarApp.getCalendarById('XXXXXXXXXX@gmail.com'); var myEvents = myCals.getEventsForDay(new Date(targetDate)); // 特定の文字列で始まるeventのみに絞り込む var groupEvents = myEvents.filter(function(e) { return e.getTitle().indexOf('[グループA]') == 0; } ); // eventがあればメッセージに格納 if(groupEvents.length > 0) { for(var i = 0; i < groupEvents.length; i++) { var strTitle = groupEvents[i].getTitle(); var dispTime = getDispTime(groupEvents[i]); strBody = strBody + '\n' + strTitle + '\n' + dispTime + '\n'; } message = '\n' + strBody; } else { message = null; } return message; } // 表示時間取得 function getDispTime(event) { var start = Utilities.formatDate(event.getStartTime(), 'JST', 'HH:mm'); var end = Utilities.formatDate(event.getEndTime(), 'JST', 'HH:mm'); if(start == end) { return '終日'; } return start + '-' + end; } // LINE NotifyにHTTP POSTでメッセージを送信する function sendHttpPost(postMassage) { var payload = { "message": postMassage }; var options = { "method" : "post", "headers": { Authorization: AuthorizationCode, }, "payload" : payload }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); }
Demo
カレンダーにこんな感じで予定を入れておきます。
スクリプトエディタの方でのアイコンを押すとトリガーが設定できます。
今回は時間主導型で午前8~9時にmain関数を実行するように設定。
こんな感じで通知が来ました。
これからの展望
今までは
- LINEスケジュールで日程調整&出欠確認
- 〆切直前に通知
- 調整した日程で店予約
- 詳細通知
- 直前での変更対応 (全て手動)
としていたのですが、
LINEスケジュールとやりとりするAPI的なものが無さそうなので、
- Googleフォームなどで日程調整&出欠確認
- 〆切直前に通知(ここまで自動)
- 調整した日程で店予約
- 詳細通知(ここまで手動)
- 未回答、未定の人に再通知(自動)
- 直前での変更対応(手動)
みたいな感じにしたい。
GAS使うとGoogleのサービスと簡単にやりとりできて楽ちんですね。