今日の予定をまとめて教えてくれるslackの秘書BOT

  • 154
    いいね
  • 3
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

本日の予定を秘書が教えてくれたらうれしいですよね!
slackボットで作ってしまいましょう。
秘書の「秘書美」が、毎朝予定を教えてくれます。

slack 秘書美さんからの予定のお知らせ.png

GASでGoogleカレンダーの予定から今日の予定をピックアップし、Incoming WebHookで、slackへポストします。

GASを使うのでサーバーも特別に用意する必要がなく簡単です。

秘書美の作り方

slackのWebhook URLを取得

Integrations - Incoming WebHooks で取得。
「Post to Channel」は、適当なチャンネルでOK。スクリプトでポストするチャンネルは指定できます。
「Webhook URL」:これをメモっておきます。

カレンダーIDの取得

Googleカレンダーの設定画面の「カレンダーのアドレス:」ってところに、カレンダーIDがひょうじされています。(xxxxxx@xxxxxxx.google.com みたいなの)
これを必要なカレンダー分メモしておきます。

GASスクリプト作成

自分は適当なスプレッドシートを作成し、
「ツール」-「スクリプトエディタ」
で作成しました。

スクリプトコードの入力


//秘書美が今日の予定をslackに投稿してくれる

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

  s = listupEvent("xxxxxxxxxx@group.calendar.google.com"); //休み
  if (s != "")  list += "\n■お休み\n" + s;

  s = listupEvent("xxxxxxxxxx@group.calendar.google.com"); //名古屋
  if (s != "")  list += "\n■名古屋のご予定\n" + s;

  s = listupEvent("xxxxxxxxxx@group.calendar.google.com"); //東京
  if (s != "")  list += "\n■東京のご予定\n" + s;

  s = listupEvent("xxxxxxxxxx@group.calendar.google.com"); //SC課
  if (s != "")  list += "\n■SC課のご予定\n" + s;

  Logger.log(list);

  if (list != "") {
    var payload = {
      "text" : "本日の予定をお知らせします。\n" + list,
      "channel" : "#random",
      "username" : "秘書美",
      "icon_emoji" : ":information_desk_person:"
    }

    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;
}

//slackへポスト
function postSlack(payload)
{
  // POSTオプション
  var options = {
    "method" : "POST",
    "payload" : JSON.stringify(payload)
  }

  // アクセス先
  var url = "https://hooks.slack.com/services/XXXXXX/XXXXXX/XXXXXXXXXXXXXXX";
  // POSTリクエスト
  var response = UrlFetchApp.fetch(url, options);
  // HTML結果を取得(引数のcharsetは設定したほうが良い)
  var content = response.getContentText("UTF-8");

}

このスクリプトを、時間指定のトリガーで毎日実行させています。

今回は、4つのカレンダーから予定をピックアップしています。

  "channel" : "#random",
  "username" : "秘書美",
  "icon_emoji" : ":information_desk_person:"

このあたりを変更することで、
・ポストするチャンネル
・ボットの名前
・ボットのアイコン
を変更できます。

参考

Google Apps Scriptを使ってみよう! - サテライト原口社長のスクリプト指南 (6) 今日の予定をカレンダーからメールで自動送信 | マイナビニュース
http://news.mynavi.jp/series/apps_script/006/

GoogleスプレッドシートでGET/POST通信を行いコンテンツを取得する - Webサービスで起業を目指すプログラマーblog
http://shinsuke789.hatenablog.jp/entry/2015/01/03/164203

感謝

秘書美さん、とってもいい感じで予定を教えてくれてありがとう!!

秘書美さんボットも、ちゃんとつくりたいな。
今は、SlackBotの簡単カスタマイズなので、アイコンとか残念な感じ。

slack秘書美ボット1.png

slack秘書美ボット2.png

slack秘書美ボット3.png