運営中の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時に自動投稿しています。
この時間の設定は、スクリプトエディターのリリース
のトリガー
で管理しています!