シンプルウェイ制作班|WEB制作スタッフブログ

Slackでブログの担当者管理:BOTを作って担当者にブログの更新を促そう!

2015年08月04日

こんにちは。デザイナーの@です。
社内のチャットツールをSlackに変更して4か月経ちましたが、初期から違和感なく使えていたのでオススメしたい。
Slackは色々なサービスと連携して、より便利にできるのも魅力的ですキラキラ

この「シンプルウェイ制作班|WEB制作スタッフブログ」は株式会社シンプルウェイの制作班に所属するスタッフが持ち回りで記事を更新しています。
更新担当になったら、業務管理ツールでやり取りしていたのですが、なかなか更新できずに更新を忘れがちになること多々。
そこで思ってしまったのです…SlackでBOTを作って担当者管理したり、ブログの更新を促したりできないかと…!

本格的なプログラミングは私はまだできないので、いつも使用しているZapierとGoogleスプレッドシートを使って作りました。
機能的には、以下をおこなっています。
  • ブログのRSSを取得して更新日をGoogleスプレッドシートに記録するようZapierで設定
  • Slackの該当チャンネルに該当メッセージが投稿されたら、誰が投稿したかGoogleスプレッドシートに記録するようZapierで設定
  • Googleスプレッドシートのスクリプトで、次の担当者を判別し、Slackにメッセージを投稿
  • 更新日から7日以上、間があいていたらブログ更新を促すためSlackにメッセージを投稿
Googleスプレッドシートは「updage」「charge」「post」のシートを作成。
「charge」シートに担当者を羅列しておきます。
updateシート
update
ブログの更新日時を記録
chargeシート
現在の担当者=1、そのほか=0SlackのUsernameわかりやすい名前
postシート
postusername
Slackのメッセージ投稿日時Slackのメッセージ投稿者のUsername
Zapierは上記に記録するように設定します。
※行末の<br>は削除してください。

function sendToSlack(body) {
var url = "SlackのIntegrations、Incoming WebHooksで登録したWebhook URL";
var data = { "channel" : "#チャンネル名", "text" : body};
var payload = JSON.stringify(data);
var options = {
"method" : "POST",
"contentType" : "application/json",
"payload" : payload
};
var response = UrlFetchApp.fetch(url, options);
}

function blogUpdatePromotion() {
// 1つ目のシートの取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

// データの取得
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var lastCell = sheet.getRange(lastRow, lastColumn);

// 経過日数取得
var lastUpdate = new Date(lastCell.getValue());
var today = new Date();
var dt = Math.abs(lastUpdate.getTime() - today.getTime());
var d = Math.round(dt / (1000 * 60 * 60 * 24));

// 2つ目のシートの取得
sheet = ss.getSheets()[1];

// データの取得
for(var i = 1; i <= sheet.getLastRow(); i++) {
if(sheet.getRange("A" + i).getValue() == 1) {
var charge = sheet.getRange("B" + i).getValue();
var chargeJa = sheet.getRange("C" + i).getValue();
}
}

// 7日以上経過していたらブログ更新を促す
if(d >= 7) {
var body = "@" + charge + ": " + chargeJa + "さーん L(・∀・ L) 最終更新から" + d + "日経過したよ!ブログ更新してねー";
sendToSlack(body);
}
}

function chargeChange() {
// 3つ目のシートの取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[2];

// データの取得
var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var lastCell = sheet.getRange(lastRow, lastColumn);
var chargePostName = lastCell.getValue();

// 2つ目のシートの取得
sheet = ss.getSheets()[1];

// データの取得
for(var i = 1; i <= sheet.getLastRow(); i++) {
if(sheet.getRange("A" + i).getValue() == 1) {
var chargeCellNum = i;
var charge = sheet.getRange("B" + i).getValue();
}
}

// 比較
if(chargePostName == charge) {
sheet.getRange("A" + chargeCellNum).setValue(0);
if(chargeCellNum < sheet.getLastRow()) {
chargeCellNum = chargeCellNum + 1;
sheet.getRange("A" + chargeCellNum).setValue(1);
} else {
sheet.getRange("A1").setValue(1);
}
for(var i = 1; i <= sheet.getLastRow(); i++) {
if(sheet.getRange("A" + i).getValue() == 1) {
charge = sheet.getRange("B" + i).getValue();
var chargeJa = sheet.getRange("C" + i).getValue();
}
}
// 次の投稿日の目安
var afterDay = 7;
var today = new Date();
today.setTime(today.getTime() + (afterDay * 1000 * 60 * 60 * 24));
var m = today.getMonth() + 1;
var d = today.getDate();
var body = "@" + charge + ": 次は" + chargeJa + "さんが担当だよ(∩´∀`)∩ " + m + "/" + d + "頃に更新してねー";
sendToSlack(body);
}
}
スクリプトを登録したら、トリガーを設定します。


こうして、ブログを更新した後、該当チャンネルで「つくちゃん、更新したよ!」と投稿すると


次の担当者にブログ更新担当になったことと、目安日の連絡を



ブログ更新が7日以上ない時、ブログ更新を促すようになります。

もっとスマートにも作れそうなので精進します!

writer : @


※このブログではブログの持ち主が承認した後、コメントが反映される設定です。

コメントフォーム

名前:
メール:
URL:
コメント:
上の画像に書かれている文字を入力して下さい

<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

過去記事
最近のコメント
QRコード
QRCODE
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人
新規投稿

新規投稿するにはログインする必要があります。会員IDをお持ちでない方はIDを取得された後に投稿できるようになります。

このページの先頭へ