1
3

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.

初心者でも簡単にGoogle Apps ScriptでSlackにリマインダーを送る

Last updated at Posted at 2019-06-28

参考にした記事一覧

Google Spread Sheetを読み込む方法:
https://kujirahand.com/blog/index.php?GAS%E3%81%A7%E4%BB%BB%E6%84%8F%E3%81%AE%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%88%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AE%E5%80%A4%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80

Slackに通知を飛ばす方法:
https://qiita.com/chihiro/items/c7b11abc78f5d806c3a8

概要

毎朝行う朝会で日毎にファシリを決めているのだが、「今日のファシリ誰だっけ?」と思い出している時間が勿体無いので、あらかじめ作成してあったSpread Sheetを活用し、Slackにその日のファシリは誰かを通知してくれるbotが欲しかったので実装してみました。ちなみに今回が初めてGAS(Google Apps Script)なるものを触りました。

実装したスクリプト


// スプレッドシートの読み込みに必要な変数群
var sheet = SpreadsheetApp.openByUrl('<あらかじめ作成してあったSpread SheetのURL>');
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();

// 曜日の取得に必要な変数群
var date = new Date();
var dayOfWeek = date.getDay();
var dayOfWeekStr = ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"][dayOfWeek];

// Slack通知に必要な変数群
var postUrl = '< Slack通知の際に必要なIncoming WebHooksのWebhook URL >';
var username = 'reminder';
var icon = ':ghost:';

function myFunction() {
  for (var i = 1; i <= numRows - 1; i++) {
    var weekdays = values[i][1];
    if (dayOfWeekStr === weekdays) {
      var message = '今日のファシリテーターは '+ values[i][2] + ' だす!';
      var jsonData = {
          "username": username,
          "icon_emoji": icon,
          "text" : message
      };
      var payload = JSON.stringify(jsonData);
      
      var options = {
          "method": 'post',
          "contentType" : "application/json",
          "payload" : payload
      }
      
      UrlFetchApp.fetch(postUrl, options);
    }
  }
}

処理の流れ

ファシリ担当Spread Sheet

番号 曜日 担当
1 月曜日 社員A
2 火曜日 社員B
3 水曜日 社員C
4 木曜日 社員D
5 金曜日 社員E

アウトプットイメージ

Slackに曜日に応じて「今日のファシリテーターは 社員Hoge だす!」と通知される

実装の説明

関数内の処理について主に説明します。

  • Spread Sheetを一行ずつ読み込む
  • Spread Sheetに記載してある曜日と本日の曜日を比べる
  • 曜日に応じてメッセージに曜日に適した社員名を追加
  • JSON.stringifyでJavaScriptの値をJSON文字列に変換
  • Slack通知の前にSlack通知に必要なoptionsを作成
  • Slack(外部サービス)を使用する場合、Web APIを利用し、「HTTPリクエストを送る」必要があるため、以下のメソッドを使用する必要があったので実装

UrlFetchApp.fetch(URL,[options]);

完成形(アウトプット)

無事Slackに通知を送ることができました!(金曜日に実行した場合)
スクリーンショット 2019-06-28 14.59.47.png

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?