JavaScript
GoogleAppsScript
spreadsheet
chatwork

【Google Apps Script】その20 今日の予定をChatworkに一括通知する

この記事はGoogle Apps Scriptを実例交えて基礎からざっくり学ぶ Advent Calendar 2017 20日目の記事です。

本アドベントカレンダーは@rt_pの個人プロジェクトですが、筆者はAteam Brides Inc. Advent Calendar 2017にも参加しています。そちらでも出張版記事を書いているので、覗いていただけると嬉しいです。

はじめに

あれ?今日の予定って何があったっけ?という時に、いちいちカレンダー開くの手間ですよね。
ということで、自分のカレンダーに登録されている今日の予定を朝一でChatworkに通知してみます。

cw.png

ダミーの予定登録

もしGoogleカレンダーに予定が何も登録されていない場合、適当に予定を登録しておきましょう。

calendar.png

GASファイルの作成

今回はスプレッドシートを使う必要がないのでGoogle Apps Scriptファイルを直接作成しましょう。
Googleドライブの新規作成→その他から作成できます。
見つからなければ+アプリを追加から探してください。

以下コードを入力しましょう。
承認が必要ですメッセージが出た際の対処法が分からない場合は
アドベントカレンダー1日目のHello, world!記事をご参照ください。

today_events.gs
function myFunction() {
  var events = CalendarApp.getDefaultCalendar().getEventsForDay(new Date());
  var body = '';
  for (var i in events) {
    var event = events[i];
    body += '【' + event.getStartTime() + '~' + event.getEndTime() + '】' + event.getTitle() + "\r\n";
  }
  if (body) {
    var subject = '本日の予定';
    postToChatworkMessage(subject, body);
  }
}

// chatworkにメッセージ投稿
function postToChatworkMessage(subject, body) {
  var roomId = 'YOUR_ROOM_ID'; // ここに投稿したい部屋のIDを入力
  var token = 'YOUR_TOKEN'; // ここにトークンを入力
  var body  = '[info][title]' + subject + '[/title]' + body + '[/info]';
  var payload = {
    'body': body
  }
  var headers = {
    'X-ChatWorkToken': token
  }
  var options = {
    'method' : 'POST',
    'payload' : payload,
    'headers' : headers
  }
  var url = 'https://api.chatwork.com/v2/rooms/' + roomId + '/messages';
  UrlFetchApp.fetch(url, options);
}

getDefaultCalendar()

https://developers.google.com/apps-script/reference/calendar/calendar-app#getDefaultCalendar()

自身のデフォルトカレンダーを取得します。

getEventsForDay(date)

https://developers.google.com/apps-script/reference/calendar/calendar#getEventsForDay(Date)

指定した日付の予定を全て取得します。
今回は今日の日付を渡したので、今日の全ての予定が返ってきたわけですね。

  var roomId = 'YOUR_ROOM_ID'; // ここに投稿したい部屋のIDを入力
  var token = 'YOUR_TOKEN'; // ここにトークンを入力

roomIdは部屋のIDです。URLの#!ridXXXXXとなっている、rid以降の数値です。
Chatworkトークンの取得方法は16日目の記事を参照してください。

myFunction()実行時にChatworkに通知が来たら成功です。

cw.png

定期実行の設定

スクリプトエディタのストップウォッチマークをクリック。
日タイマーで、朝8時台に通知するようにしましょうか。

trigger.png

これで毎朝8時台に自動通知されるようになったはずです。

おわりに

結構簡単な手順で予定通知システムを作ることができました。
組織内で他のユーザーの予定を通知するには以下関数を使えばいけるようです。ご活用ください。

subscribeToCalendar(id)

https://developers.google.com/apps-script/reference/calendar/calendar-app#subscribeToCalendar(String)

明日

【Google Apps Script】その21 指定時刻にメッセージを自動投稿するChatwork botを作る
となります。
毎日10時に特定メッセージをChatworkに通知したい、とかありますよね。そちらをGASで実現します。

前の記事
【Google Apps Script】その19 Chatwork Webhookを使い、スプレッドシートに発言を溜める
次の記事
【Google Apps Script】その21 指定時刻にメッセージを自動投稿するChatwork botを作る