Edited at

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

More than 1 year has passed since last update.


概要

https://www.wantedly.com/companies/zyyx/post_articles/119174

↑の記事で紹介した内容の詳細です。

:confounded: これ(公開スケジュールA列と担当B列)をもとに

:smile: こうする(Slackにリマインド)


手順


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

https://{対象ドメイン}.slack.com/apps/manage/custom-integrations

にアクセスします。

1

2

3

4

5

《Incoming WebHooks》の登録完了!


補足

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

- 《API》

- 《Incoming WebHooks》

- 《Outgoing WebHooks》

- 《Bot》

内、Slackにメッセージ投稿する方法は《API》,《Incoming Webhooks》,《Bot》の3つです。

今回は安全面も考慮して、特定のチャンネルにしか投稿できない《Incoming Webhooks》を選択しました。


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

1

2

サンプルコード


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

《GAS》の登録完了!


STEP3 動作確認

※サンプルコードの場合、スプレッドシートのA列の日付を確認して、

1週間前/3日前/当日の3パターンのどれかに一致するとリマインドする仕組みです。

動作確認用に適宜A列の日付を変更して下さい。

1

2

3



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


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

1

2

3

トリガーの登録も完了!


:blush: :two_hearts: :robot:

これでスプレッドの日付をもとに、自動でリマインドしてくれるようになります!

Botで無駄な仕事無くしたい(切実)