概要
https://www.wantedly.com/companies/zyyx/post_articles/119174
↑の記事で紹介した内容の詳細です。
手順
STEP1 Slack管理画面より《Incoming WebHooks》を登録
https://{対象ドメイン}.slack.com/apps/manage/custom-integrations
にアクセスします。
《Incoming WebHooks》の登録完了!
補足
2018/06/08時点で外部サービスからSlackを連携する方法は以下の4つ存在します。
- 《API》
- 《Incoming WebHooks》
- 《Outgoing WebHooks》
- 《Bot》
内、Slackにメッセージ投稿する方法は《API》,《Incoming Webhooks》,《Bot》の3つです。
今回は安全面も考慮して、特定のチャンネルにしか投稿できない《Incoming Webhooks》を選択しました。
STEP2 《GAS》にリマインドするロジックを登録
サンプルコード
// リマインドのメイン処理
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);
}
《GAS》の登録完了!
STEP3 動作確認
※サンプルコードの場合、スプレッドシートのA列の日付を確認して、
1週間前/3日前/当日の3パターンのどれかに一致するとリマインドする仕組みです。
動作確認用に適宜A列の日付を変更して下さい。
Slackにメッセージ投稿できていれば、動作確認完了!
STEP4 《GAS》にトリガーを登録する
トリガーの登録も完了!
これでスプレッドの日付をもとに、自動でリマインドしてくれるようになります!
Botで無駄な仕事無くしたい(切実)