【ChatWork】Googleカレンダーの予定を通知する方法

できるだけGoogleカレンダーにスケジュールを入力しているのですが、作業に集中していると、次の予定を過ぎてしまうことがあります。

あまりカレンダーの通知に気が付かないので、チャットワークで通知するようにしてみました。

引用

こちらの記事のやり方とコードを使用しています。

Googleカレンダーの予定が始まる直前にChatWorkに通知する | Developers.IO

カスタマイズ

使いやすいようにいくつかコードを変更しました。

コード

通知用のグループに投稿

マイチャットに投稿したくないので

事前にGキーを押して、新しい通知用のグループを作成し、ルームIDをメモしておきます。

//client.sendMessageToMyChat(createMessage(event));var message = createMessage(event);
var room_id ='ルームID';
client.sendMessage({room_id: room_id, body: message});

自分にToをつける

通知に気がつくように

msg = msg + "が始まります";
msg = "[To:1234567]" + msg + "が始まります";

通知を未読に

チャットワークAPI経由で投稿した投稿に未読がつかなくなった
仕様変更で残念なことになったので、下記のコードを追加しました。

参考

チャットワークAPIの自動投稿に未読を付ける

// 「未読をつける」メソッドを追加 var res = client.sendMessage({room_id: room_id, body: message});
client.makeMessageUnread =function(room_id, message_id){returnthis.put("/rooms/" + room_id +"/messages/unread",{"message_id": message_id});
}
//通知済みであることをスプレッドシートに記録
writeEventIdAndStartTime(sheet,event);
// 投稿直後ではAPIが失敗することがあるので、6秒ごとに2回トライする
var err;
for (var i = 0; i < 2; i++){
try{
client.makeMessageUnread(room_id, res['message_id']);
return;
}catch(e){
if (e["errors"] ==="The messages is already marked as unread.")return;
err = e;
Utilities.sleep(6000);
continue;
}
}
throw err;

追記

このままだと毎回、2回通知されてしまうので下記のコードはコメントアウトすることをおすすめします。

//client.sendMessage({room_id: room_id, body: message});

感想

Chatworkをよく開いているので、Googleカレンダーの直前通知はいいアイディアだと思って作成してみましたが、

APIからの投稿がTOがつかないことで、残念な結果になってしまいました。

ただTOの通知が付くように戻れば、有用なので仕様が戻ることを祈ります。