Line Notifyが終了しちゃう
今まではGoogleClaendarに予定追加されたらIFTTT使ってLineNotifyで通知してたんだけど、2025年3月いっぱいで終了しちゃうとのことで、乗り換えなきゃ!ってことで色々調べてGAS使って通知するようにしてみた。
参考にさせてもらったサイト
【GAS】Googleカレンダーの変更をLINEに通知する #JavaScript - Qiita 上記サイトでGAS使ってLineNotifyで通知するやり方が書いてあるので、ほぼそのまま使わせていただいている。
変更したところ
LineNotifyで通知するところを、以下のメソッドを追加して、LineMessageAPIでメッセージをPush送信する処理に置き換え。
// LINEへ通知メッセージを送るAPI const LINE_PUSHPOINT_API = 'https://api.line.me/v2/bot/message/push'; // 通知したいLineのグループID const ABENOTIFY_ID='グループID'; // // メッセージ送信 // to : 送信先ID // message : 送信メッセージ内容 // function pushLineMessage(to, message) { console.log("pushLineMessage start"); UrlFetchApp.fetch(LINE_PUSHPOINT_API, { 'headers': { 'Content-Type': 'application/json; charset=UTF-8', 'Authorization': 'Bearer ' + ACCESS_TOKEN, }, 'method': 'post', 'muteHttpExceptions': true, 'payload': JSON.stringify({ 'to': to, 'messages': [{ 'type': 'text', 'text': message, }], }), }); console.log("pushLineMessage end"); }
あと、GoogleCalendarのAPI使ってるので、そのAPIを有効にする必要があった。 Googleカレンダー:予定が登録されたらLINEへ通知
終日だと日時が表示されない問題
参考サイトの処理だと、終日の予定を入れると開始日時/終了日時に「Invalid Date」が表示されちゃう。どうも終日だとevents.startのプロパティがdateにしか入らないらしいので以下で判定するようにしてみた。
if (e.start.dateTime == undefined) { // dateTimeが定義されていなければ終日なのでdateを取得(yyyy-MM-dd) startDateTime = Utilities.formatDate(new Date(e.start.date), 'Asia/Tokyo', 'yyyy-MM-dd'); endDateTime = Utilities.formatDate(new Date(e.end.date), 'Asia/Tokyo', 'yyyy-MM-dd'); } else { // dateTimeが定義されていれば終日じゃないのでdateTimeを取得(yyyy-MM-dd hh:mm) startDateTime = Utilities.formatDate(new Date(e.start.dateTime), 'Asia/Tokyo', 'yyyy-MM-dd HH:mm') endDateTime = Utilities.formatDate(new Date(e.end.dateTime), 'Asia/Tokyo', 'yyyy-MM-dd HH:mm') }
終日問題もう一個(解決)
終日の予定の終了日付が翌日になっちゃう。これをどう解決すればいいのかはわからん……。終日の予定から-1日できればいいんだろうけどなー。
解決
やはり終日から-1日すればよかった。
// 作業用領域に終了日をDateで格納 tempEndDate = new Date(e.end.date); // 1日引いた日付を設定 tempEndDate.setDate(new Date(e.end.date).getDate()-1); // フォーマットを成型して表示 endDateTime = Utilities.formatDate(tempEndDate, 'Asia/Tokyo', 'yyyy-MM-dd');