解決したい課題
Googleカレンダにイベントを入力したタイミングでLINEへ自動通知させたいです。
試したこと
↓以下のサイトを基にコードコピペ????(絵文字の一部とBitlyは削除)
https://qiita.com/ara1yu81/items/04e7b730f9af1def2ea9
function myFunction(event) { // カレンダーIDのの取得 var calendarId = event.calendarId; // 前回実行時に取得したカレンダーTokenの取得 var token = getSyncToken(calendarId) // カレンダーは更新される毎にTokenを発行している // 引数に渡したToken以降に更新された予定を取得 // イベント毎に実行されるScriptなので最新の1件のイベントが取得される想定 var events = Calendar.Events.list(calendarId, {'syncToken': token}); // ステータスを見て登録、もしくは更新の予定のみにフィルタリング var filteredItems = events.items.filter(function(e){return e.status == "confirmed"}) // 予定をLINEに通知する filteredItems.forEach(function(e){postMessage(e)}); // 今回のTokenを保存する(次回のScript実行時に利用) saveSyncToken(events.nextSyncToken); } /** * 受け取ったイベントからメッセージを出力する * メッセージ内容によって、出力する日付などの加工が必要 * **/ function postMessage(event){ // 表示用の置き時計の絵文字 const emoticonClock = "\uDBC0\uDC71" // 通知用のメッセージを生成 // 時間指定の予定と終日予定の情報差を無くしている // カレンダーのURLが長いので短縮している var message = "\n" + "" + event.summary + "\n" + emoticonClock + calcStartDate(event) + " 〜 " + calcEndDate(event) + "\n" + "カレンダーで見る(" + getShortUrl(event.htmlLink) + ")" // LINE Notifyを利用するにあたって、発行したTokenをHeaderにセットして指定のエンドポイントにPOSTする const url = "https://notify-api.line.me/api/notify"; var headers = { 'Authorization': "Bearer " + PropertiesService.getScriptProperties().getProperty('LINE_BOT_TOKEN') }; var payload = {"message" : message}; var params = { "headers" : headers, "method" : "post", "payload" : payload }; UrlFetchApp.fetch(url, params); } // 前回保存したカレンダーのSyncTokenを取り出す、前回保存分が無い場合は今回のSyncTokenを利用する function getSyncToken(calendarId){ var token = PropertiesService.getScriptProperties().getProperty('SYNC_TOKEN'); if(token){ return token; } var events = Calendar.Events.list(calendarId, {'timeMin': (new Date()).toISOString()}); return events.nextSyncToken; } // SyncTokenをプロパティに保存する function saveSyncToken(token){ PropertiesService.getScriptProperties().setProperty('SYNC_TOKEN', token); } // 開始日時を取得 (予定が終日の場合は開始日時を0時0分とする) function calcStartDate(e){ var str if('dateTime' in e.start){ str = e.start.dateTime } if('date' in e.start){ str = e.start.date + 'T00:00:00+09:00' } return Utilities.formatDate(new Date(str), 'Asia/Tokyo', 'MM/dd HH:mm') } // 終了日を取得 (予定が終日の場合は終了日時を当日の23時59分とする) function calcEndDate(e){ var str if('dateTime' in e.end){ str = e.end.dateTime } if('date' in e.end){ str = e.end.date + 'T00:00:00+09:00' } var datetime = new Date(str) datetime.setMinutes(-1) return Utilities.formatDate(datetime, 'Asia/Tokyo', 'MM/dd HH:mm') }
現状
◇設定項目(参考サイトの手順)
・準備
①LINEで対象のグループチャット用Token発行
→完了
※ただし「連携中のサービス一覧にトークルーム名が並ぶはずです」の記載は?よくわかりませんでした。
②通知用のユーザをグループに招待します。
→完了
③Googleカレンダーのトリガーを設定
→完了
・実装
①カレンダー用のAPI利用設定
→完了
②環境変数の設定
→1のLINENotifyは完了。2のBitlyは任意。3のカレンダーTokenは不要とのことで何もしてない。
③Script
→完了
④デモです。
→Googleカレンダに予定を入れましたが、LINEメッセージが届きません。
※コードは保存できていますので、エラーはない認識です。
不明点
サイトに書かれている通りに実装したつもりです。
なぜ通知されないのか原因がわかりません。
どうしても実装したい!と思ていろいろとトライしておりますが、結果、LINEには届かず。。。
ご存知の方、アドバイスをいただけないでしょうか。
よろしくお願いいたします!
回答2件
あなたの回答
tips
プレビュー