Slack Botをたくさん作る必要があったのでAPIから作ろうとしてみました。 ここにマニフェストを使ってAPIからBotを作れると書いてあります。 api.slack.com
まとまった情報があまりなかったのでまとめてみます。 pythonのslack_boltを使っています
App configuration token を取得
API からSlackAppを作るにはApp configuration tokenが必要になります。 以下のサイトに行き「Generate Token」を実行すると取得できます。
Slack Appの作成
app.client.apps_manifest_create を呼び出すとSlackAppを作成できます。
引数は2つ:
token:先ほど取得した App configuration token を使うmanifest:今はスコープの設定などができないので、必須のものだけ設定しておく
マニフェストはこんな感じでやってみました:
{ "display_information": { "name": "Sample App", } }
Pythonで書くとこんな感じ:
import os from dotenv import load_dotenv from slack_bolt import App load_dotenv(".env") TOKEN = os.getenv('TOKEN') app = App(token=TOKEN) app_name = "SampleApp" # まずアプリを作成 init_manifest = { "display_information": { "name": app_name, } } resp = app.client.apps_manifest_create(token=TOKEN, manifest=init_manifest) if not resp["ok"]: raise Exception(resp) app_id = resp["app_id"] oauth_url = resp["oauth_authorize_url"]
App configuration tokenは.envファイルから読み出しています。
レスポンスにapp_idとoauth_authorize_urlがあるので取り出しておきます。
詳細はapps.manifest.create についてのドキュメントを見てください。
api.slack.com
アプリの設定をする
app.client.apps_manifest_update でマニフェストの更新ができるので、ここで色々設定をします。
マニフェストについては以下のドキュメントが参考になります。
api.slack.com
必要な引数は3つ。
token: 同じくApp configuration tokenを使うapp_id: App作成時のレスポンスに含まれるapp_idを使うmanifest: ドキュメントを参考にJSONなどの形で書く
pythonで書くとこんな感じ:
manifest = {
"display_information": {
"name": str(app_name),
},
"features": {
"bot_user": {
"display_name":"hoge"
},
},
"settings": {
"socket_mode_enabled": True,
"event_subscriptions": {
"bot_events": [
]
},
},
"oauth_config": {
"scopes": {
"bot": [
"chat:write",
"chat:write.public",
]
},
"redirect_urls": [
str(oauth_url)
]
}
}
resp = app.client.apps_manifest_update(
token=TOKEN,
app_id=app_id,
manifest=manifest,
)
if not resp["ok"]:
raise Exception(resp)
print("------------------")
print(app_name + " を作成しました")
APIの詳細については apps.manifest.update についてのドキュメントを見てください。
api.slack.com
トークンの取得など
App-Level Tokens や Bot User OAuth Token などはAPIからは取得できないので、webから管理画面にアクセスして取得するしかないようです。
管理画面のURLは https://api.slack.com/apps/<app_id> となります。
さいごに
SlackAppをたくさん作る必要があるときに使えば多少手間は省けそうな感じでした。 本当はトークンの取得まで自動でしたかったのですが、流石にできないようです。ここは画面ポチポチするしかなさそうですね〜
僕が書いたコードがあるリポジトリのリンクを一応貼っておきます。使い捨てで書いたコードなのであまりきれいではないですが... github.com
参考資料
マニフェストについてのドキュメント api.slack.com
apps.manifest.createについてのドキュメント api.slack.comapps.manifest.updateについてのドキュメント api.slack.com