🐍
Bolt for Pythonの落とし穴
環境情報
Docker Composeで作成しています。
Docker Composeで登録していた環境変数
以下のように設定していました。
.env
SLACK_CLIENT_ID=xxxxxxxxxxxxx.xxxxxxxxxxxxx
SLACK_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SLACK_SIGNING_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SLACK_BOT_TOKEN=xoxb-xxxxxxxxxxxxx-xxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx
アプリケーション構成
- Python: 3.12.8
- fastapi: 0.110.0
- slack_bolt: 1.21.3
- slack_sdk: 3.33.5
- uvicorn: 0.27.1
ソースコード
app.py
from os import environ
from fastapi import FastAPI, Request
from slack_bolt import App
from slack_bolt.adapter.fastapi import SlackRequestHandler
bolt_app = App(
token=environ.get("SLACK_BOT_TOKEN"),
signing_secret=environ.get("SLACK_SIGNING_SECRET"),
installation_store=None,
authorize=None
)
# for debug.
print("Bolt App Token:", bolt_app._token)
print("Bolt App Signing Secret:", bolt_app._signing_secret)
app_handler = SlackRequestHandler(bolt_app)
fast_api = FastAPI()
@fast_api.post("/slack/commands")
async def slack_events_endpoint(request: Request):
return await app_handler.handle(request)
@bolt_app.command("/test")
def handle_test_command(ack, body, say):
ack()
say(f"Hello, <@{body['user_id']}>! Your command works!")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app="app:fast_api", host="0.0.0.0", port=3040, reload=True)
発生した問題
アプリ起動後、Slack上でコマンドを実行すると以下のようなレスポンスがあった。
DeepL翻訳曰く、「申し訳ございませんが、原因不明の理由により、このアプリをインストールすることができなくなりました。 このアプリをワークスペースに再インストールしてください。」とのこと。
エラーログ確認
ログを確認したところ下記の状態になっていた。
root@xxxxxxxxxxxx:/app# /usr/local/bin/python /app/app.py
As installation_store or authorize has been used, token (or SLACK_BOT_TOKEN env variable) will be ignored.
INFO: Will watch for changes in these directories: ['/app']
INFO: Uvicorn running on http://0.0.0.0:3040 (Press CTRL+C to quit)
INFO: Started reloader process [7487] using WatchFiles
As installation_store or authorize has been used, token (or SLACK_BOT_TOKEN env variable) will be ignored.
As installation_store or authorize has been used, token (or SLACK_BOT_TOKEN env variable) will be ignored.
INFO: Started server process [7494]
INFO: Waiting for application startup.
INFO: Application startup complete.
原因分析
上記のエラーメッセージ「As installation_store or authorize has been used, token (or SLACK_BOT_TOKEN env variable) will be ignored.」が原因である可能性が高いため、
これに関連する情報を調査すると、Stack Over Flowに以下の記事が見つかった。
解決策
SLACK_CLIENT_ID
とSLACK_CLIENT_SECRET
を削除したところ正常に動作しました。
まとめ
boltのAppは初期化時に環境変数のSLACK_CLIENT_ID
とSLACK_CLIENT_SECRET
を読み込み起動するため、SLACK_BOT_TOKEN
が使用されなかった。
-
環境変数名に以下を使用せず独自の変数名で登録し、os.environ等で呼び出す。
- SLACK_CLIENT_ID
- SLACK_CLIENT_SECRET
- SLACK_SIGNING_SECRET
-
SLACK_BOT_TOKEN
-
環境変数に
SLACK_BOT_TOKEN
とSLACK_SIGNING_SECRET
のみを登録する。
Discussion