LoginSignup
4
6

More than 5 years have passed since last update.

【WebHooks編】スプレッドシートで管理しているKPIをSlackに自動投稿するGoogle Apps Scriptを作ってみた

Posted at

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を作ってみたにて、記載しておりますので、本記事では省略します。

コード.gs
// スプレッドシートの値を取得する
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埋め込んで、トリガーを設定すればばっちしです!

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6