背景
2022年9月より、Slack初の有料版(プロプラン)の値上げと、フリープランはメッセージ履歴が90日間に制限されます。
月額料金はこれまでの1ユーザーあたり960円から1,050円に値上げされるみたいです。
問題は、後者のフリープランの制限。これまでフリープランでは、メッセージ数10,000件、ストレージ容量5GBという制限でしたが、今後は過去90日間のメッセージ履歴とファイルストレージを無制限に変更するみたいです。
対策
90日が経過しても、有料プランへアップグレードすれば、全履歴にアクセス可能となるそうですが、Googleスプレッドシートにメッセージの履歴を移せば解決できそうなので、やってみました。(友人がやっていたので、挑戦してみました。)
ツール
- Googleスプレッドシート
- Slack(一般ユーザーでOK)
YouTubeで解説
前編:https://youtu.be/jsJe1djPzw8
後編:https://youtu.be/pPz0yafO8UE
前編では、Webhookを使って動かすGoogleスプレッドシートに移動するところまで。
後編では、よくある質問と、発展系として今後はノーコードで(スプレッドシートだけで)管理する方法まで解説しています。
手順
1. slack側の設定
「設定と管理」の「アプリを管理する」から「Outgoing Webhook」を検索して追加します。
2. Googleスプレッドシート側の設定
「拡張機能」から「Apps Script」を開いて、下記コードをコピペします。
function doPost(e) {
const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('**シート名**')
const TOKEN = '**Outgoing Webhook のトークン**'
if (TOKEN == e.parameter.token){
const DATE = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm')
const USER = e.parameter.user_name
const TEXT = e.parameter.text
const DATA = [DATE, USER, TEXT]
SHEET.appendRow(DATA)
}
return
}
3. デプロイ
エディタの中の「デプロイ」から「新しいデプロイ」で、ウェブアプリのURL発行します。
発行されたURLは、Outgoing Webhookの設定に追加してください。
4. ノーコードで(スプレッドシートだけで)管理
新しく、「スラックのトークン」というシートをGoogleスプレッドシートに追加してください。
それから、A列をチャンネル名、B列をトークンにして、それぞれ割り振られているチャンネル名とトークンをご記入してください。
そうしましたら、下記のプログラムに変更します。
function doPost(e) {
const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1')
const SHEET_TOKEN = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('スラックのトークン')
const SHEET_TOKEN_VALUES = SHEET_TOKEN.getDataRange().getValues()
console.log(SHEET_TOKEN_VALUES)
for (i in SHEET_TOKEN_VALUES) {
if (i == 0) {
continue;
}
if (SHEET_TOKEN_VALUES[i][1] == e.parameter.token){
const DATE = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm')
const USER = e.parameter.user_name
const TEXT = e.parameter.text
const CHANNEL = SHEET_TOKEN_VALUES[i][0]
const DATA = [DATE, USER, TEXT, CHANNEL]
SHEET.appendRow(DATA)
}
}
}
プログラムを書き換えたら、もう一度スクリプトエディタからデプロイし直します。
「デプロイ」から「デプロイを管理」を選択して、鉛筆マークをクリックして「新バージョン」としてデプロイしてください。
わからなければ、YouTube動画の後編で解説もしていますので、ご参考にしてください。
https://youtu.be/pPz0yafO8UE
これで、今後Webhookを発行した後は、スプレッドシートの「スラックのトークン」というシートのA列にチャンネル名、B列にトークンを追加するだけです。
いかがでしたでしょうか?
Webhookを発行したら、保存するのをお忘れずに!
おまけ(LINEに送信)
LINEにもメッセージ通知を送信する関数を、おまけとして。
function sendToLine(message){
const LINE_NORTIFY_TOKEN = "**発行したトークン**"
const OPTIONS =
{
"method" : "post",
"headers" : {"Authorization" : "Bearer "+ LINE_NORTIFY_TOKEN},
"payload" : "message=" + message
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", OPTIONS);
}
参考文献
Slack初の値上げ。月960円→1050円に
Slackに投稿したメッセージを自動でスプレッドシートに書き込む方法をまとめました
無料版Slackが9/1より90日前投稿が見れなくなるので、メッセージ保存ツールを個人開発してみた