LoginSignup
14
9

More than 1 year has passed since last update.

無料版Slackの90日前の履歴が見れなくなる問題をGoogleスプレッドシートに移動することで解決

Last updated at Posted at 2022-08-05

背景

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」を検索して追加します。
image.png

2. Googleスプレッドシート側の設定

「拡張機能」から「Apps Script」を開いて、下記コードをコピペします。

コード.js
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列をトークンにして、それぞれ割り振られているチャンネル名とトークンをご記入してください。
スクリーンショット 2022-10-23 18.59.40.png

そうしましたら、下記のプログラムに変更します。

コード.js
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にもメッセージ通知を送信する関数を、おまけとして。

line.js
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日前投稿が見れなくなるので、メッセージ保存ツールを個人開発してみた

14
9
5

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
14
9