tomitaku.net

Googleカレンダの今日の予定を新垣結衣に毎朝届けてもらうSlackのBot

2016-06-17 edit 2016-08-12 気になったこと、もの blog

昨年Googleとの連携が強化され様々な機能が追加されたslack。私個人もGoogleカレンダーを連携させ、スケジュールを把握していたのですが、機械的すぎてちょっと味気ないな…と思い、せっかくなので新垣結衣ちゃんにスケジュールを届けてもらう秘書っぽいBotは出来ないかとググったらすでに実践されてる方が!ということで「ほぼコピペ」で出来るslackBotの作成手順を備忘録としてエントリ。興味のある方は参考にしてください。

1.Webhookを取得

  • App Directory(https://slack.com/apps)にアクセス
  • Incoming WebHooks で検索
  • Incoming WebHooks を追加
  • スケジュールを投稿するチャンネルを選択
  • 画面内にある Webhook URL をメモ

2. GoogleカレンダーのIDを取得

  • Googleカレンダー(https://www.google.com/calendar)にアクセス
  • 左カラムの「マイカレンダー」の中の自分の名前の左にある▼をクリック
  • カレンダー設定をクリック
  • 「カレンダーのアドレス」のカレンダーIDをメモ

3. GAS(Google Apps Script)を作成

  • Google Docsのスプレッドシートを起動
  • 右下の「+」をクリック(新規スプレッドシートを作成)
  • 「ツール」→「スクリプトエディタ」を選択
  • 下記コードをコピペ(一部好きなように編集)
function morningCall() {
  var list = "";
  var s;
  // ↓↓↓↓↓ カレンダーIDを入力 ↓↓↓↓↓
  s = listupEvent("xxxx@gmail.com");
  if (s != "")  list += "\n■本日の予定\n" + s;

  Logger.log(list);

  if (list != "") {
    var payload = {
      // ↓↓↓↓↓ 任意のコメントを入力 ↓↓↓↓↓
      "text" : "おはようございます、新垣です。\n本日の予定をお知らせします。\n" + list + "\n今日も一日、がんばりましょう!",
      // ↓↓↓↓↓ 通知したいチャンネル名を入力 ↓↓↓↓↓
      "channel" : "#xxxxxxxx",
      "username" : "新垣結衣",
      // ↓↓↓↓↓ アイコン画像のリンクURLを入力 ↓↓↓↓↓
      "icon_url" : "http://xxxx.com/xxxx.jpg"
    }

    postSlack(payload);
  }

}

function listupEvent(cal_id)
{
  var list = "";
  var cal = CalendarApp.getCalendarById(cal_id);
  var events = cal.getEventsForDay(new Date());
  for(var i=0; i < events.length; i++){
    s = "";
    if (events[i].isAllDayEvent()) {
      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 += events[i].getTitle();
    Logger.log(s);

    list += s + "\n";
  }

  return list;
}

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

  // ↓↓↓↓↓ Webhook URLを入力 ↓↓↓↓↓
  var url = "https://hooks.slack.com/services/xxxx/xxxx/xxxxxxxx";
  var response = UrlFetchApp.fetch(url, options);
  var content = response.getContentText("UTF-8");

}
  • 「リソース」→「全てのトリガー」を選択
  • 「実行:morningCall イベント:時間主導型/日タイマー/任意の時間)」に設定後、保存
  • 「実行」から「morningCall」を選び検証
  • 任意のチャンネルに届いたら完了

これで味気ない一日のスケジュール通知に潤いを与えました。数日使ってみた印象としては悪くない感じです。というより結構いい感じ。
個人的にslackはチャットツールというよりも、外部連携で収集した情報を集約・閲覧・確認するハブ的なサービスだと思っています。Iot連携なども今後強化されていくと思いますので、ますます目の話せないサービスとなりそうですね。

参照