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

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

More than 5 years have passed since last update.

はじめに

  • 当番制で仕事をしていて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に関するノウハウ書いているのでよかったら参考にしてみてください
oh_rusty_nail
技術メモちょこちょこ書いてます。 参考にしていただけたら幸いです! 興味のある単語: [Selenium] [Jenkins] [自動化] [フロントエンド]
jrits
信頼と魅力のある先進のITをもとに、お客様のワークスタイル・イノベーションの実現を目指します。
http://www.jrits.co.jp/
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