WEBLOG

わたくし的備忘録。

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

昨年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」を選び検証
  • 任意のチャンネルに届いたら完了
  •  

    ▼参考にさせていただいたサイト
    Googleカレンダーの内容をSlackに投稿する
    【祝】麻生久美子が秘書になりました【ただしSlackのBot】

     

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