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