Slackの運用が長くなってきて、Appsの数がそろそろ限界になってきたぞ;;という方向けのお話です。
僕も運営中のPlayer!のKPI管理として、スプレッドシートで管理しているKPIをSlackに自動投稿するGoogle Apps Scriptを作ってみたにて、快適なSlackでのKPI生活を楽しんでいたのですが、ある日突如KPIが自動投稿されなくなりました。
理由は、(おそらく)導入していたライブラリと連携していたAppsを解除していたためです。
予算の都合上、__対象のAppsを受け入れることはできないとのお達し__を頂いたので、他の方法がないかなと色々やってたら、できてしまったのでまとめます。
やろうとしていることの全体の流れ
ざっくり言うと、
1. SlackのIncoming Webhooksで新しいConfigurationを作り、Webhook URLを発行する
2. そのWebhook URLにJSONをPOSTする
3. Slackに自動投稿されて、嬉しい
という流れなのです。
これらすべてを記述するほど、僕は粘り強くないので、__「2. そのWebhook URLにJSONをPOSTする」のみ__書きます。
その他の箇所に関して、一言だけ述べるなら、
「1. SlackのIncoming Webhooksで新しいConfigurationを発行し、Webhook URLを確認する」は、チャネルを指定して、作ればオッケー
「3. Slackに自動投稿されて、嬉しい」は、該当チャネルに投稿されるのを確認して、トリガー設定して、自動投稿されることを喜べばオッケー
さて、本題に入ります。
まずは、コードを全てお見せする
「2. そのWebhook URLにJSONをPOSTする」を実現するためのGoogle Apps Scriptを書いたので、そちらをお見せします。
スプレッドシートにてKPI管理をしていますので、下記のGoogle Apps Scriptは「スプレッドシートの値を取得する」「値を含めたJSONメッセージをWebhook URLにPOSTする」という構成になっております。
また、「スプレッドシートの値を取得する」に関しては、スプレッドシートで管理しているKPIをSlackに自動投稿するGoogle Apps Scriptを作ってみたにて、記載しておりますので、本記事では省略します。
// スプレッドシートの値を取得する
function post_all_kpi_data() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var kpisheet = ss.getSheetByName('Slack');
var totalusers = kpisheet.getSheetValues(2,2,1,1);
var newusers = kpisheet.getSheetValues(2,16,1,1);
var rounding_mau = Math.round(kpisheet.getSheetValues(6,6,1,1)*10000);
var percent_mau = rounding_mau/100;
var real_mau = kpisheet.getSheetValues(2,6,1,1);
var rounding_wau = Math.round(kpisheet.getSheetValues(6,8,1,1)*10000);
var percent_wau = rounding_wau/100;
var real_wau = kpisheet.getSheetValues(2,8,1,1);
var rounding_dau = Math.round(kpisheet.getSheetValues(6,10,1,1)*10000);
var percent_dau = rounding_dau/100;
var real_dau = kpisheet.getSheetValues(2,10,1,1);
var weblp_mau = kpisheet.getSheetValues(2,5,1,1);
var all_mau = kpisheet.getSheetValues(2,4,1,1);
// 値を含めたJSONメッセージをWebhook URLにPOSTする
var app_data = ("総ユーザーは" + totalusers + "人で、前日比 +" + newusers + "人ですわ。\nTotal_MAUは" + all_mau + "人です。\nApp_MAUは" + percent_mau + "%(" + real_mau + "人)。\nWeblpのMAUは"+ weblp_mau + "人。\nWAUは" + percent_wau + "%(" + real_wau + "人)。\nDAUは" + percent_dau + "%(" + real_dau + "人)"); // 送信したいメッセージ
var post_data = {"text":app_data};
var url = "https://hooks.slack.com/services/から始まるURL"; // 作成したWebhook URLを埋め込む
var payload = JSON.stringify(post_data);
var headers = { "Accept":"application/json",
"Authorization":"Basic _authcode_"
};
var options = { "method":"POST",
"headers": headers,
"payload" : payload
};
var response = UrlFetchApp.fetch(url, options);
Logger.log(response);
}
こんな感じで、メッセージを作って、対象のWebhook URL埋め込んで、トリガーを設定すればばっちしです!