りんごのある生活

MacやiPhone, iPadのアプリのオススメや、私がチェックしたネタなどを紹介しています。

Googleカレンダーの予定を毎朝Slackに送ってくれるBotを作ったけど設置しなかった話

Slack
こんにちは、こんばんは。えがくです。
夏季休暇中です。つまり、脊髄反射で思いついたことを即行動できる夏休み中です。
行動したあと、思うような結果にならなくても後悔しないですむっていいですね。ビバ夏休み。

ってことで、「あ、これいらね」となった派生Botができたので、誰かのために(未来の自分含む)備忘録的な更新です。

■目的

Slackで知りたい&知らせたい。毎朝Googleカレンダーの予定を、会議室情報付きで。

■手段

SlackBotをGASで作る。

■変更したところ

  • listupEventの引数を増やし、当日・翌日情報持てるようにする
  • getLocationで、場所情報の有無をチェックする
  • getMyStatusで、招待された予定のYESのみを表示する

■ソース

※元ソースのコメントコピペ改変なので、コメントは信用しないでください。

function myFunction() {
  
  var list = "";
  var s;
  var t;

  s = listupEvent("hoge@gmail.com", 0); // a.GoogleカレンダーのID
  if (s != "")  list += "\n■本日の予定\n" + s; // b.メッセージの見出し
  t = listupEvent("hoge@gmail.com", 1); // a.GoogleカレンダーのID
  if (t != "")  list += "\n■明日の予定\n" + t; // b.メッセージの見出し

  Logger.log(list);

  if (list != "") {
    var payload = {
      "text" : "おはようございます、秘書ねこです。\nご予定をお知らせしますにゃ。\n" + list, // c.メッセージの本文
      "channel" : "#general", // d.チャネルの指定
      //"icon_url" : ":cat:", // e.アイコン画像
      "username" : "秘書ねこ", // f.Botの名前
    }

    postSlack(payload);
  }
}

function listupEvent(cal_id, request_day)
{
  var list = "";
  var cal = CalendarApp.getCalendarById(cal_id);
  var date = new Date();
  var events = cal.getEventsForDay(new Date(date.getFullYear(),date.getMonth(),date.getDate()+request_day,0,0,0));
  for(var i=0; i < events.length; i++){
    s = "";
    if(events[i].getMyStatus()){
      if (events[i].isAllDayEvent()) {
        s+= "終日予定" + (i +1);
        //s += Utilities.formatDate(events[i].getStartTime(),"GMT+0900","MM/dd  ");
      } else {
        s += Utilities.formatDate(events[i].getStartTime(),"GMT+0900","MM/dd HH:mm");
        s += Utilities.formatDate(events[i].getEndTime(), "GMT+0900","-HH:mm  ");
      }
      s += "\n  " + events[i].getTitle();
      if(events[i].getLocation()){
        s += " at " + events[i].getLocation();
      }else {
        s += " (場所未定)";
      }
      Logger.log(s);
      
      list += s + "\n";
    }
  }

  return list;
}

function postSlack(payload)
{
  var options = {
    "method" : "POST",
    "payload" : JSON.stringify(payload)
  }

  var url = "https://hooks.slack.com/services/hogehoge"; // g. Webhook URL
  var response = UrlFetchApp.fetch(url, options);
  var content = response.getContentText("UTF-8");

}

■気になったこと

  • たぶん秘密の予定もこれだと見られる気がする
  • 終日予定のもたせ方が雑すぎるだろって思った
  • Weekdayのみ反応するようにしないとトリガー管理メンド
  • 月曜祝日的な予定どうすんのよ話
  • つか、botコールしたときだけレスポンスでよくない?的な

■いらね、って判断したこと

  • 携帯の待機画面に常時予定通知設置でとりあえず会議室不明は回避できそう
  • 秘密の予定をOPEN Slack chで秘密にする理由がめんどい(OPEN chの理由もあるのでprivateにもしたくない)