概要

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

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

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

手順

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

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

Configure_Apps___ZYYX_Slack.png
Incoming_WebHooks2___Slack_App_Directory.png
Incoming_WebHooks___ZYYX_Slack.png
Incoming_WebHooks___Slack_App_Directory.png
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》にリマインドするロジックを登録

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

サンプルコード

// リマインドのメイン処理
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);
}
Wantedly_feedネタリスト4_-_Google_スプレッドシート.png

《GAS》の登録完了!

STEP3 動作確認

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

Wantedly_feedネタリスト5_-_Google_スプレッドシート.png
Wantedly_feedネタリスト6_-_Google_スプレッドシート.png
Slack_-_ZYYX2.png
Slack_-_ZYYX.png

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

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

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

トリガーの登録も完了!


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