Slack アプリ で作業自動化を実現 ~ SlackAppと 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
reactions:read
reactions:write
※誤って付与した権限は、ごみ箱から削除しましょう
③アプリ名の確認
[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 の設定で手順がここまで進んだ場合は事前設定の最初の手順が完了したため、次の手順「Slack ワークスペースに登録」へ戻り続きを実施します。
⑤ Slack api を使ってアプリを作成
アプリ( SlackApp )を作成した後は、アプリ( SlackApp )をコントロールするためのアプリを作成してみます。
今回の例では、Python プログラムから、 SlackAPI 「 https://slack.com/api/conversations.history 」を実行することでアプリ( SlackApp )をコントロールしてみます。
下記がサンプルコードとなり、SlackAPIでメッセージやファイルを取得してみます。SlackAPI で取得したデータには投稿時刻やメッセージ情報が含まれています。
import requests
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が用意されていますので、自分でアプリケーションを作成してみたいという方は、ぜひ一度、挑戦してみてくださいね。
Slack アプリ【 バックアップツール for Slack 】
指定した収集日の特定チャンネルのメッセージとファイルを、PC上に 一括収集 ( バックアップ )するツールです。
Windowsタスクスケジューラ に本ツールを登録しておくことで、毎日決まった時間に自動でデータのバックアップを行うこともできます。
弊社 社内業務 の 自動化 用に作成したツールで、シンプルで使用しやすいと好評です!
バックアップ先やバックアップするチャンネルを指定することができます