Slack アプリ で作業自動化を実現 ~ SlackAppと api の活用方法 ~

Slack バックアップイメージ画像

本記事は、 Slack のAPIやアプリ機能を使って、
バックアップや業務自動化を「自分で実装したい方」向けの内容です。

手動でのバックアップ方法を知りたい方は、
別記事「Slackに保存されているメッセージやファイルをバックアップする方法」をご参照ください。
Slackに保存されているメッセージやファイルをバックアップする方法

Slack アプリ の作成に挑戦してみよう

作業の流れは下記のとおりです。

①アプリ( SlackApp )を作成
②権限設定
③インストール
④ Slack apiを使ってアプリを作成

①アプリ( SlackApp )を作成

https://api.slack.com/apps 」にアクセスし、[Create an App]を選択して新しいアプリケーションを作成します。[Create New App]のアイコンが表示される場合はそちらにアクセスします。
※ワークスペースに複数所属していて、アプリを作成したいワークスペースと異なる情報が見える場合は、[Sign in to another workspace.]をクリックして別のワークスペースに移動します。

画像クリックで拡大表示

[Form scratch]を選択します。

画像クリックで拡大表示

AppNameの入力(下記では”BackUpForSlack”としています)と作成するWorkspaceを選択後、[Create App]をクリックするとアプリケーションが作成されます。

画像クリックで拡大表示

Workspaceに複数所属していて、バックアップしたいWorkspaceが「Pick a workspece to develop your app in:」で選択できない場合は、「Sign Into a different workspace」で別のWorkspaceにサインインした上で、①から再度実施してください。

②権限設定

アプリ( SlackApp )にBotユーザ権限を設定します。
作成したばかりのアプリケーションには何も権限がありません。
権限がなければ何も出来ないので、まずは処理の実行に必要な権限を与えます。
今回の機能で必要な権限は、
・チャンネルのメッセージを取得するAPI「 conversations.history 」の実行権限

行う処理によって必要となるAPIの権限は、 SlackAPI 「 https://api.slack.com/methods 」のドキュメントから確認が出来ます。

conversations.history を実行するためには権限が必要になります。

[OAuth & Permissions]に移動します

Bot Token Scopesで必要な権限を追加します。

バックアップツール for Slack の設定で手順を行っている場合は、次の権限を追加します
channels:history
files:read
groups:history
users:read

※誤って付与した権限は、ごみ箱から削除しましょう

③アプリ名の確認

[App Home]に移動し、App Display Nameの「Display Name (Bot Name)」と「Default Name」の値が入っているかを確認します。値が入力されていない場合は、[Edit]をクリックします。

「Display Name (Bot Name)」と「Default Name」に任意の名称(ご自分でバックアップ用のアプリと認識できる値にしましょう)を入力して、[Add]をクリックします。

④インストール

[Install App]に移動し、[Install to Workspace]をクリックします。
その後の承認画面で、[許可をする]をクリックすればインストールされます。

画像クリックで拡大表示

インストールが完了すると、Bot User OAuth Tokenが表示されます。Botユーザから自動で処理を行う際、このBot User OAuth Tokenが必要になりますので、控えておいてください。

※Bot User OAuth Tokenを忘れてしまった場合は、「 https://api.slack.com/apps 」の「OAuth & Permissions」メニューで確認することができます。

本ページでの バックアップツール for Slackの設定手順はここまでです。(以降の手順⑤は、ご自身でアプリを作成する場合の作成例となります)

バックアップツール for Slack の設定は「Slack ワークスペースに登録」へ戻り、続きの手順を実施します。

⑤ Slack api を使ってアプリを作成(作成例)

アプリ( SlackApp )を作成した後は、アプリ( SlackApp )をコントロールするためのアプリを作成してみます。
今回の例では、Python プログラムから、 SlackAPI 「 https://slack.com/api/conversations.history 」を実行することでアプリ( SlackApp )をコントロールしてみます。

下記がサンプルコードとなり、SlackAPIでメッセージやファイルを取得してみます。SlackAPI で取得したデータには投稿時刻やメッセージ情報が含まれています。

# HTTPリクエストを送るためのライブラリ(API連携など)
import requests

# JSONデータの読み書き(dict⇄JSON変換)
import json

# 日付・時刻を扱う標準ライブラリ
import datetime


SLACK_ACCESS_TOKEN = "xoxb-xxxxxxxxx"  # Bot User OAuth Token を指定します
CHANNEL_ID = 'Cxxxxxxxx' # channel Id を指定します

headers = {
    'Authorization': 'Bearer %s' % SLACK_ACCESS_TOKEN
}

# 出力するデータのリスト
writeTextList = []

# メッセージを取得するAPIを実行します
conversationsHistoryUrl = "https://slack.com/api/conversations.history?channel=" + CHANNEL_ID
content = requests.get(conversationsHistoryUrl, headers=headers).content
data = json.loads(content)

# データをデコードし、リストへ格納する
messagesList = data["messages"]
for messages in messagesList:
    messagesText = messages["text"]

    messagesTs = messages["ts"]
    dt = datetime.datetime.fromtimestamp(float(messages["ts"]))
    
    writeText = "{}\t{}".format(dt, messagesText)
    writeTextList.append(writeText)

# リストのデータ(取得したメッセージ)をファイルへ出力する
if 0 != len(writeTextList):

    obj = map(lambda x: x + "\n", writeTextList)
    with open("message.txt", "a", encoding="utf-8", newline="\n") as f:
        f.writelines(obj)

上記のプログラムに、
・収集するデータの期間
・エラーハンドリング (エラー応答時の処理)
・取得対象のデータが大量にあった場合の考慮 (※)
といった処理を追加すると、アプリケーションの完成です。

※一度に取得できるデータの量は API で決まっていますので、「取得対象のデータが大量にある場合」複数回にわけてAPIを起動する等の処理も必要です。

作成したプログラムを Windows タスクスケジューラ へ登録すると、定期的に必要なデータをファイルへ出力(保存)する作業を、自動で行うことができます。

上記処理を手動で行う場合の手順を紹介していますので、イメージがわきづらい場合は下記も参照してみてください。

 
関連記事

上記処理を手動で行う場合の手順は「Slack に保存されているメッセージやファイルを バックアップ する方法」で紹介しています。

アプリ作成まとめ

 今回紹介させて頂いた Slack アプリケーション 機能は、フリープラン でも標準で使用することができます。今回ご紹介した API 以外にも、さまざまな機能のAPIが用意されていますので、自分でアプリケーションを作成してみたいという方は、ぜひ一度、挑戦してみてくださいね。

自分で作るか、任せるか

ここまでの手順で、SlackAppとAPIを使った自動化は実装可能です。
ただし、実際の運用ではいくつか検討すべき点があります。

  • エラーハンドリング(API失敗時の処理)
  • 大量データへの対応(ページネーション)
  • 運用・保守(権限期限、Tokenローテーション)
  • 継続的なメンテナンス

「学習・検証目的」であればご自身での実装がおすすめです。

一方、「業務で継続的に使う」場合は、
既製ツールや外部支援を検討する選択肢もあります。

迷う場合は、目的に応じて整理することも可能です。

※目的に応じた相談は無料です。

Slack アプリ【 バックアップツール for Slack 】

「自分で実装するのは時間が取れない」
「運用・保守まで含めて任せたい」
という方向けに、弊社では既製ツールも提供しています。

特定チャンネルのメッセージとファイルを、
PC上に一括収集(バックアップ)するツールです。
Windowsタスクスケジューラと組み合わせて、自動運用も可能です。

バックアップツール for Slack の詳細はこちら

※実装・運用についての相談は無料です。