運営中のPlayer!のKPI管理として、SlackへのKPI自動投稿を行うようにしました!
Slackへの自動投稿
DAUの前日比がプラスなら:thumbsup:、前日比がマイナスなら:thumbsdown:というふうにメッセージを出しわけてます。
この記事の構成
僕が書いたコードを全て記載した上で、2部構成に分けて説明します。
1.Google Apps ScriptでSlackのチャネルに投稿するのに必要な作業
2.スプレッドシートから値を取得し、投稿メッセージを作成するのに必要な作業
まずは、コードを全てお見せする
// 共通部分
var slack = {
postUrl: 'https://slack.com/api/chat.postMessage',
token: '①', // Slackのtoken
channelId: "②", // SlakckのチャネルのID
userName: "お好きな名前で!!", // botの名前
}
var postMessage = function(text) {
UrlFetchApp.fetch(slack["postUrl"], {
"method" : "post",
"payload" : {
token: slack["token"],
channel: slack["channelId"],
username: slack["userName"],
text: text
}
});
}
// 数値元によって変更する箇所
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[③];
var dauvalues = sheet.getSheetValues(④)*100;
var daybeforevalues = sheet.getSheetValues(④)*100;
var dau = dauvalues.toFixed(⑤)
var daybefore = daybeforevalues.toFixed(⑤)
if ( daybefore > 0 ){
postMessage("本日のDAUは" + dau + "%で、前日比" + daybefore + "%なんですわ(:thumbsup: ՞ਊ ՞):thumbsup:");
}else{
postMessage("本日のDAUは" + dau + "%で、前日比" + daybefore + "%なんですわ(:thumbsdown: ՞ਊ ՞):thumbsdown:");
}
}
細かく確認していきます!
1.Google Apps ScriptでSlackのチャネルに投稿するのに必要な作業
Slackへの投稿に必要な用意:
まず、Google Apps Scriptのエディターを開いたら、このライブラリをダウンロードしてください!
非常に便利ですので、このSlackkAppを作ってくださった方は、僕にとって神様です。
- Google Apps ScriptのライブラリSlackApp(Library Key:M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO)
参考:Slack BotをGASでいい感じで書くためのライブラリを作った
さて、ダウンロードがすんだところで、共通部分のポイントをお伝えします!
// 共通部分
var slack = {
postUrl: 'https://slack.com/api/chat.postMessage',
token: '①', // Slackのtoken
channelId: "②", // SlakckのチャネルのID
userName: "お好きな名前で!!", // botの名前
}
var postMessage = function(text) {
UrlFetchApp.fetch(slack["postUrl"], {
"method" : "post",
"payload" : {
token: slack["token"],
channel: slack["channelId"],
username: slack["userName"],
text: text
}
});
}
ポイントは2つです!!
まず、1つ目は、こちら
token: '①', // Slackのtoken
Slackのtokenは、Slack Web APIのAuthenticationでTeam,Userを確認して、ボタンを押すと発行されます。
僕のtokenはxoxp-○○○○○○○○○-○○○○○-○○○こんな感じでした!
このxoxp-○○○○○○○○○-○○○○○-○○○をコピペすればオッケーです。
次に、2つ目は、こちら
channelId: "②", // SlakckのチャネルのID
SlackのチャネルIDの取得方法は、
まずchannels.listの上部にあるTesterをクリックし、tokenを確認して、Test Methodを押します。
次に、Test Methodの下部にばぁ〜とでてきた文章の中から、自分が投稿したいチャネルの名前(name)を見つけ、その1つ上にあるidをコピーすればオッケーです!
僕が投稿したチャネルIDは英数字を含む文字列でした。
※注意点としては、チャネル名(#generalなど)ではないということです!
これで、共通部分の説明は完了しました!
2.スプレッドシートから値(DAUと前日比)を取得し、投稿メッセージを作成するのに必要な作業
次に、数値元によって適宜変更していただく必要がある箇所です。
※今回の注意点としては、スクリプトエディターは、KPI管理を行っているスプレッドシートから開いています。
数字管理の状況説明
Player!のDAUと前日比は、Googleスプレッドシートの1つのシートの、ある特定のセルに%表示されています。
dailyスプレッドシートのDAUシートの、3行目の2列目がDAU、3行目の3列目が前日比という感じです。
イメージ図
| day | DAU | 前日比 |
|---|---|---|
| 2015/6/26 | ○○.○○% | +○○.○○% |
そこで、(2.1)特定のスプレッドシートの特定のセルから値を取得して、(2.2)その値を使って投稿メッセージを作成をします。
2.1 特定のスプレッドシートの特定のセルから値を取得
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[③];
この部分で、スクリプトエディターを開いたスプレッドシートを指定して、DAUを管理しているシートを指定しています。
そして、DAUを管理しているスプレッドシートが一番左から何番目にあるかを数えます。
1番左なら、ss.getSheets()[0];
左から4番目なら、ss.getSheets()[3];
と対象の数字を③に記入すれば、引っ張りたいシートを指定できます。
var dauvalues = sheet.getSheetValues(④)*100;
var daybeforevalues = sheet.getSheetValues(④)*100;
特定のセルを指定して、その値(DAUと前日比)を取得をした後、ちょっとこざいくしてます。
Player!の場合、DAUは特定のセルに表示されますので、
getSheetValues(3,2,1,1)といったように指定してます。
④の箇所の書き方は、このドキュメントを参考にしてください:https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getSheetValues(Integer,Integer,Integer,Integer)
また、なぜ*100があるかというと、sheet.getSheetValues(④)の取得したDAU及び前日比の値が0.○○○○○○○○○○○○○○となっており、Slackへの投稿メッセージを○○.○○%とするのに必要という理由です。
var dau = dauvalues.toFixed(⑤)
var daybefore = daybeforevalues.toFixed(⑤)
先ほど取得し、こざいくをした値は○○.○○○○○○○○○○○○○○となっているので、小数桁を制限するためにtoFixed(⑤)をしています。
小数2桁:toFixed(2)
小数5桁:toFixed(5)
となりますので、目的の小数桁を⑤に記載してください。
これらの作業により、DAUと前日比の取得、加工が完了しました。
2.2 取得した値を使って投稿メッセージを作成
if ( daybefore > 0 ){
postMessage("本日のDAUは" + dau + "%で、前日比" + daybefore + "%なんですわ(:thumbsup: ՞ਊ ՞):thumbsup:");
}else{
postMessage("本日のDAUは" + dau + "%で、前日比" + daybefore + "%なんですわ(:thumbsdown: ՞ਊ ՞):thumbsdown:");
}
}
ここでは、前日比がプラスの場合、マイナスの場合とでメッセージの出し訳を行なっております。
自動投稿のための時間設定
Player!の場合、これを毎日10時に自動投稿しています。
この時間の設定は、スクリプトエディターのリリースのトリガーで管理しています!
