179
191

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-04-20

#概要

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

179
191
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
179
191

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?