Edited at

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

More than 3 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