9
10

More than 5 years have passed since last update.

スプレッドシートで管理しているタスクをSlackにリマインドする方法

Last updated at Posted at 2018-06-08

概要

Wantedly(ウォンテッドリー)はたらくを面白くするビジネスSNS.png

https://www.wantedly.com/companies/zyyx/post_articles/119174
↑の記事で紹介した内容の詳細です。

:confounded: これ(公開スケジュールA列と担当B列)をもとに
Wantedly_feedネタリスト_-_Google_スプレッドシート.png

:smile: こうする(Slackにリマインド)
Slack_-_ZYYX2.png

手順

STEP1 Slack管理画面より《Incoming WebHooks》を登録

https://{対象ドメイン}.slack.com/apps/manage/custom-integrations
にアクセスします。

1
Configure_Apps___ZYYX_Slack.png

2
Incoming_WebHooks2___Slack_App_Directory.png

3
Incoming_WebHooks___ZYYX_Slack.png

4
Incoming_WebHooks___Slack_App_Directory.png

5
Incoming_WebHooks3___Slack_App_Directory.png

《Incoming WebHooks》の登録完了!

補足

2018/06/08時点で外部サービスからSlackを連携する方法は以下の4つ存在します。
- 《API》
- 《Incoming WebHooks》
- 《Outgoing WebHooks》
- 《Bot》

内、Slackにメッセージ投稿する方法は《API》,《Incoming Webhooks》,《Bot》の3つです。
今回は安全面も考慮して、特定のチャンネルにしか投稿できない《Incoming Webhooks》を選択しました。

STEP2 《GAS》にリマインドするロジックを登録

1
Wantedly_feedネタリスト2_-_Google_スプレッドシート.png

2
Wantedly_feedネタリスト3_-_Google_スプレッドシート.png

サンプルコード

remind.gs
// リマインドのメイン処理
function remind() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('記事一覧');
  var data = sheet.getDataRange().getValues(); // 処理効率上「記事一覧」シートの値を一括取得

  // 公開日の列番号
  var publishedAtColumunIndex = 0;
  // 担当者の列番号
  var assigneeColumunIndex = 1;

  // 現在日
  var currentDate = new Date();

  for (var i = 1; i < data.length; i++) {
    // 公開日
    var publishedAt = new Date(data[i][publishedAtColumunIndex]);
    // 担当者
    var assignee = data[i][assigneeColumunIndex];

    // 下書き開始リマインド日 = 公開1週間前
    var writingRemindDay = new Date(publishedAt.getYear(), publishedAt.getMonth(), publishedAt.getDate() - 7);
    // 下書きチェックリマインド日 = 公開3日前
    var checkingRemindDay = new Date(publishedAt.getYear(), publishedAt.getMonth(), publishedAt.getDate() - 3);

    // リマインド日の判定
    if (isSameDate(currentDate, writingRemindDay)) {
      post2Slack(assignee + ' Wantedly記事公開まで1週間です。下書きを初めていますか?');
    } else if (isSameDate(currentDate, checkingRemindDay)) {
      post2Slack(assignee + ' Wantedly記事公開まであと3日です。下書きは順調ですか?');
    } else if (isSameDate(currentDate, publishedAt)) {
      post2Slack(assignee + ' Wantedly記事公開日です。時間になったら公開をお願いします!');
    }
  }
}

// 同じ日付かどうか
function isSameDate(date1, date2) {
  return date1.getYear() === date2.getYear()
      && date1.getMonth() === date2.getMonth()
      && date1.getDate() === date2.getDate();
}

// Slackにメッセージ投稿
function post2Slack(message) {
  // "#対象チャンネル" -> 《Incoimg WebHooks》で指定したチャンネルに変更
  var jsonData =
  {
    "channel" : "#対象チャンネル",
    "text" : message,
    "link_names": true
  };
  var payload = JSON.stringify(jsonData);
  var options =
  {
    "method" : "post",
    "contentType" : "application/json",
    "payload" : payload
  };

  // 'https://hooks.slack.com/...' -> 《Incoimg WebHooks》を登録した際の Webhook URL
  UrlFetchApp.fetch('https://hooks.slack.com/...', options);
}

3
Wantedly_feedネタリスト4_-_Google_スプレッドシート.png

《GAS》の登録完了!

STEP3 動作確認

※サンプルコードの場合、スプレッドシートのA列の日付を確認して、
1週間前/3日前/当日の3パターンのどれかに一致するとリマインドする仕組みです。
動作確認用に適宜A列の日付を変更して下さい。

1
Wantedly_feedネタリスト5_-_Google_スプレッドシート.png

2
Wantedly_feedネタリスト6_-_Google_スプレッドシート.png

3
Slack_-_ZYYX2.png
Slack_-_ZYYX.png

Slackにメッセージ投稿できていれば、動作確認完了!

STEP4 《GAS》にトリガーを登録する

1
Wantedly_feedネタリスト7_-_Google_スプレッドシート.png

2
Wantedly_feedネタリスト8_-_Google_スプレッドシート.png

3
Wantedly_feedネタリスト9_-_Google_スプレッドシート.png

トリガーの登録も完了!


:blush: :two_hearts: :robot:
これでスプレッドの日付をもとに、自動でリマインドしてくれるようになります!
Botで無駄な仕事無くしたい(切実)

9
10
1

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
9
10