はじめに
定期的に同郷のメンバーと勉強会を開いているのですが、その際に予定をGoogleカレンダーで管理していました。勉強会を通知する機能をLINEでできないかとういう要望があったため、LINE Botを作成してみました。
Messaging APIとGoogle App Scriptを使用すると簡単にBotが作れるので、ぜひカスタマイズしていろいろ試してみてください。
今回作成するのはグループなどではなく、個人に対して決まった時間に予定を通知してくれるLINE Botを作成していきたいと思います。
使用したツール
- Googleカレンダー
- Google App Script(GAS)
- LINE Bot
Googleカレンダーの作成
新しいカレンダーを作成し、カレンダーの設定からカレンダーIDを取得します。下記の2つで取得できます。
(GoogleカレンダーをGASで読み込む際に必要になってきます。)
- カレンダーの設定と共有 > カレンダー統合 > カレンダーID(***@group.calender.google.com)
-
カレンダーの公開URL
https://calendar.google.com/calendar/embed?src={カレンダーID}&ctz=Asia%2FTokyo
-
カレンダーを作成したら、予定を作成してみましょう!
GASでGoogleカレンダーを読み込む
マイドライブなどにGoogle スプレッドシートを作成
- 上部タブより拡張機能 > Apps Scriptを開きます。
Apps Scriptにコードを書き込む
- コード.gsに下記コードを書き込みましょう。
- 先ほど取得したカレンダーIDを記入する箇所があります。
const CALENDER_ID = 'カレンダーIDを記入';
function main() {
// 予定表の取得
const event = readCalendar();
let eventData = [];
for (let i=0; i<event.length; i++) {
const title = event[i].getTitle();
const startTimeHour = event[i].getStartTime().getHours().toString();
const startTimeMinute = event[i].getStartTime().getMinutes().toString().padStart(2, '0');
const endTimeHour = event[i].getEndTime().getHours().toString();
const endTimeMinute = event[i].getEndTime().getMinutes().toString().padStart(2, '0');
const startTimeString = `${startTimeHour}:${startTimeMinute}`;
const endTimeString = `${endTimeHour}:${endTimeMinute}`;
const data = {'title': title, 'startTime': startTimeString, 'endTime': endTimeString };
eventData.push(data);
}
// メッセージを作成する
const message = createSentence(eventData);
}
// Googleカレンダーを読み込む
function readCalendar() {
// Googleカレンダーを取得する
const calender = CalendarApp.getCalendarById(CALENDER_ID);
// カレンダーの情報を取得する期間を設定する。(下記コードは今日から明日までの予定を取得しています。)
const today = new Date();
let tomorrow = new Date(today);
tomorrow.setDate(today.getDate() + 1);
return calender.getEvents(today,tomorrow);
}
// LINEに通知するメッセージの作成
function createSentence(data) {
if (data.length == 0) {
return '今日の予定はありません。\n自由な1日をお楽しみください!';
}
let message = '今日の予定\n\n';
for (let i=0; i<data.length; i++) {
message += `・${data[i]['startTime']}〜${data[i]['endTime']} 「${data[i]['title']}」\n`;
}
message += '\n今日も一日頑張っていきましょう!';
return message;
}
実行の際の注意点
- 初回実行時、信頼がないと表示されると思います。
- こちらを参考に承認してください。
LINE Botの作成
LINE Developersにログインする
- Messaging APIのドキュメントに従って、チャネルを作成していきます。
チャネルの設定
- Messaging API設定のアカウント機能を設定していきます。
- グループトーク・複数人トークへの参加、応答・あいさつメッセージは今回は使用しないので、無効にしておきます。
- 応答メッセージにある応答設定を下記のように変更します。
- Webhookを使用できるように設定を変更しましょう。(ユーザーIDを入手するために必要になってきます。)
- Messaging API設定の下部にあるチャンネルアクセストークンを発行します。
- メッセージを送信する際に認証情報として必要になってくるので、保存しておきましょう。
LINE Botを追加
- Messaging API設定のQRコードより、LINE Botを追加してみましょう!
LINE BotにWebhookを使用して、GASのアプリを登録
コードを追加
- ユーザーに対して、メッセージを送る際にユーザーを識別するために、ユーザーIDを取得します。
- コード.gsにユーザーIDを取得するために下記コードを追加します。
// LINE Botのメッセージを受け取る
function doPost(e) {
const event = JSON.parse(e.postData.contents).events[0];
const message = event.message.text;
const userId = event.source.userId;
let sheet = SpreadsheetApp.getActive().getActiveSheet();
sheet.appendRow([message, userId]);
}
ウェブアプリとしてデプロイ
- 実行する関数をdoPostと指定します。
- 右上にあるデプロイ > 新しいデプロイを選択します。
- ウェブアプリとして、デプロイします。
- アクセスできるユーザーを全員に変更します。
実行の際の注意点
* 初回実行時はアクセスを承認する必要があります。
* こちらを参考に承認してください。
- デプロイをしたURLを取得します。(コピーしておきましょう)
LINE BotにWebhookの登録
- LINE BotのMessaging API設定 > Webhook設定をします。
- 先ほど取得したURLを登録します。
- 作成したLINE Botからメッセージを送信してみましょう!
ユーザーIDを取得
- 先ほど追加したコードにより、スプレッドシートに送ったメッセージとユーザーIDが記入されています。
- ユーザーIDを保存しておきましょう。
- 先ほど追加した下記コードはもう使用しないので、削除しておきましょう。
- // LINE Botのメッセージを受け取る
- function doPost(e) {
- 省略
- }
LINE Botからメッセージを送信
- LINE Botから予定表を送信できるように下記コードを追加します。
- アクセストークン・ユーザーIDを記入する箇所があります。
const LINE_PUSH_URL = 'https://api.line.me/v2/bot/message/push';
const LINE_ACCESS_TOKEN = 'アクセストークン';
const USER_ID = 'ユーザーID';
// メッセージを送信する
function pushMessage(message) {
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${LINE_ACCESS_TOKEN}`
};
const payload = {
'to': USER_ID,
'messages': [
{
'type': 'text',
'text': message
}
]
};
const options = {
'method': 'post',
'headers': headers,
'payload': JSON.stringify(payload)
};
UrlFetchApp.fetch(LINE_PUSH_URL, options);
}
- mainにコードを追加します。
function main() {
// 省略
// メッセージを作成する
const message = createSentence(eventData);
+ // メッセージを送信する
+ pushMessage(message);
}
- 実行する関数をmainに変更して、コードを実行してみましょう!
- 作成したLINE Botから通知が来れば、成功です!
毎朝6時にトリガーを設定
GASでトリガーを設定
- 左側のタブより、トリガーを選択します。
- 右下でトリガーを追加をします。
- 下記のようにトリガーを設定します。
- トリガーを保存して、完了です。
- 明日の朝、通知が来るか楽しみにしておきましょう!
最後に
今回、Googleカレンダーに登録した予定を通知するLINE Botを作成してみました。
プログラミング初心者の方でも作成しやすいように、手順を詳しく解説してみました。
GASを使って、ウェブアプリとして、簡単に公開できることに驚きました。
いろいろと活用できそうなので、試していきたいと思います。
私自身、LINEを開かない日がないので、LINE通知で予定を確認できるのはとても便利だと感じています。
参考資料