LoginSignup
37
38

More than 5 years have passed since last update.

Slackに@todayと打つとGoogleCalenderの今日の予定を通知させる方法はコレだ!123

Last updated at Posted at 2015-11-09

はじめに

  • 当番制で仕事をしていてGoogleCalenderに当番が登録してある
  • コミュニケーションツールはSlackを使っているが、会話の途中で「今日の担当者よろ!」というシーンが
  • そこで、「えっと、誰だっけ?」とならないように@todayと入力すると今日の担当者をつぶやくBOTが作ることにした
  • 尚、定刻に通知するだけならGoogleカレンダーの内容をSlackに投稿するをやればできます
    • 本記事では、キーワードをトリガとした 通知方法をご紹介します

1.Slack側の設定 ~Incoming WebHooksでメッセージを流す設定~

  • incoming-webhookの設定画面にアクセスして以下のように通知したいチャンネル名を選択して「Add Incoming WebHocks Integration」をクリックする
    • 無題.png
  • URLが発行される
    • 無題2.png

2.GASスクリプトを作成してWebアプリケーションとして公開する

2-1 カレンダーのIDを確認する(日本の祝日を例にしています)

  • qiita2.png
  • qiita3.png

2-2 Googleスプレッドシートを新規作成する

  • 「ツール」⇒「スクリプトエディタ」を選択する
  • qiita1.png

2-3 GASスクリプトを作成する

  • 以下のようにスクリプトを作ります
    • 参考にした記事にはdoGet()と書かれていたのを見ていたので、「あれ?キーワードに反応してくれないorz」とはまりました
    • よーくみると「ここPostやろ!」と修正してみるとサクット通知されるようになりました
今日の担当者.gas
function doPost() {
  var list = "";
  var s;

  // 例として日本の祝日を指定しています
  s = listupEvent(" ja.japanese#holiday@group.v.calendar.google.com"); 
  if (s != "")  list += "\n本日の担当者\n" + s;

  Logger.log(list);
  if (list != "") {
    var payload = {
      "text" : list,
      "username" : "holiday_bot"
    }
    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 = "[Incoming WebHooksで発行したURL]";

  var response = UrlFetchApp.fetch(url, options);
  var content = response.getContentText("UTF-8");
}

2-4 ウェブアプリケーションとして公開する

  • 「公開」⇒「ウェブアプリケーションとして導入...」を選択する
  • このとき、アプリケーションにアクセスできるユーザーが 全員(匿名ユーザーを含む) となっていることを確認する
    • qiia4.png

3.Slack側の設定 ~Outgoing WebHooksでキーワードを監視する~

  • Slackのoutgoing-webhookの設定画面にアクセスし、「Add Outgoing WebHooks Integration」をクリックする
  • Channelに監視するチャンネルを選択する
    • ここでは#generalを選択しているが、Anyを選ぶとpublicな全チャンネルを対象にもできる
  • Trigger Wordに反応させたいキーワードを指定する
  • URLに 1.Slack側の設定 ~Incoming WebHooksでメッセージを流す設定~ で発行したURLを指定する
  • 無題3.png

参考にした記事


~ただの宣伝~

  • 全国のSeleniumer必読1000ストックを突破しました!これからもよろしくお願いします
  • Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
37
38
0

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
37
38