はじめに
前回の投稿(前回記事はこちら)で、複数のユーザーのGoogleカレンダーの予定をスプレッドシートに表示できたので、今回はそれを朝イチにLINEで知りたいと思ったので、(興味本位で)実際にやってみました。
簡単な流れ
実際にやっていく
GASでデプロイ
LINE APIの下準備
-
こちらのURL(LINE Developres)からLINE Developersに新規作成/ログインする
-
LINEログイン or SMS認証をする
-
- アカウント名:分かりやすいものがいいと思います
- メールアドレス:使いたいメールアドレス
- 会社・事業者の所在国・地域:お住まいの地域
- 業種:個人でOKです
- 運用目的:その他
- 主な使い方:今回はメッセージ発信用にします
-
「確認」を押下
-
「完了」を押下
-
登録が完了したので、「LINE Official Account Managerへ」を押下
-
情報利用について同意を促されるので、「同意」を押下
MessageAPIを利用する
-
LINE Developerのチャンネル基本設定タブの基本情報からLINE Official Account Managerに移動する
-
LINE Developersに移動する
コードを書いていく
-
GASに移動
-
実際にコードを書いていきます
参考先ページのコードを参考に書いていきますが、今回はLINEからのメッセージ受け取りはないので、総当たりを取捨選択&自分なりに変更して書いていきます。
※GASでJSONを使うのは初めてなので、拙い記載かと思いますがご了承ください。// Message APIのチャンネルアクセストークン const access_token = ''; // スプレッドシートのID スプレッドシートのURLのhttps://docs.google.com/spreadsheets/d/と/edit?gid=0#gid=0の間の値 const id = ''; // 送信用LINE APIのURL const url = 'https://api.line.me/v2/bot/message/broadcast'; // シート名 const sheet_name = 'シート1'; const ss = SpreadsheetApp.openById(id).getSheetByName(sheet_name); // 最終行を取得 var last_low = ss.getLastRow(); function sendLine() { var post_message = ''; post_message = outputSheet(); UrlFetchApp.fetch(url, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + access_token, }, 'method': 'post', 'payload': JSON.stringify({ 'messages': [{ 'type': 'text', 'text': post_message, }], }), }); return ContentService.createTextOutput( JSON.stringify({ 'content': 'post ok' }) ).setMimeType( ContentService.MimeType.JSON ); } function outputSheet(){ var message = ''; if (last_low >= 2) { message += '本日の予定はこちらです。\n'; message += '\n'; for(let i = 1; i < last_low; i++){ var schedule=ss.getRange('A'+(i+1)).getValue(); var user=ss.getRange('B'+(i+1)).getValue(); var start_time=ss.getRange('C'+(i+1)).getValue(); var end_time=ss.getRange('D'+(i+1)).getValue(); // メッセージに代入 message += 'ユーザー:' + user + '\n'; message += '開始時間:' + changeDate(start_time) + '\n'; message += '終了時間:' + changeDate(end_time) + '\n'; message += '予定:' + schedule + '\n'; message += '\n'; } message += '以上になります。'; } else { message += '本日の予定はありません。'; } return message; }
公式LINEと友達になる
- LINE Developreに移動する
- 作成したチャンネルに移動して、Messaging APIタブを押下
- QRコードがあるので、それを読み取ると友達登録できます
今回は公式LINEを利用してその日の予定を送信してるので、QRコードやIDを第3者に教えると予定が丸見えになっちゃいます。その辺りのセキュリティももし本運用とかしていくなら今後考えていきたい。
テスト
- 今回は前回の投稿でインポート処理をつけたので、一旦送信ボタンをスプレッドシートに表示しようと思います
前回の処理と合体(トリガー処理設定)
- 前回作成した関数と合体させて、ついにその日の予定を決まった時刻にLINEで送信するようにしていきます
- GASのトリガーを使う
- App Scriptの左のバーの「トリガー」を押下
- 右下の「トリガーを追加」ボタンを押下
- 設定を以下のようにします
- 実行する関数:(前回記事のカレンダーの予定を取得する関数)
- 実行するデプロイを選択:Head
- イベントのソースを選択:時間主導型
- 事件ベースのトリガーのタイプを選択:日時ベースのタイマー
- 時刻を選択:午前7時〜8時(この後続けてLINEに通知するトリガーを設定するため、その時刻より前ならいつでも)
- エラー設定通知:今すぐ通知を受け取る
- 「保存」ボタンを押下
- 続けてLINEに通知するトリガーを設定する
- 実行する関数:今回追加したメソッド(sendLine)
- 実行するデプロイを選択:Head
- イベントのソースを選択:時間主導型
- 時刻ベースのトリガーのタイプを選択:日時ベースのタイマー
- 時刻を選択:午前8時〜9時
- エラー設定通知:今すぐ通知を受け取る
トリガーのテスト実行したい場合は以下のようにするといいと思います
- 時刻ベースのトリガーのタイプを選択:分ベースのタイマー
- 時間の間隔を選択(分):1分おき
最後に
今回は少し長丁場でした。疲れた。。(小声)
公式LINEの友達設定とかできないものかと調べましたが、公式側ができないとおっしゃってますね。。(以下参考)
なので、友達登録後に特定のメッセージを送信したユーザーにのみ予定を送信とか、色々工夫が必要ですね。。
参考文献
以下のサイトを参考にしました。ありがとうございます。