Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

概要

本日の予定を秘書が教えてくれたらうれしいですよね!
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

seya128
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away