Cloud Functions + Slack Event API を利用したBotの作成(Appの権限と認証周り)
2022-04-04 / GCP, Slack, Cloud Functions
Slack の Event API を利用した簡単な Echo Bot を作成してみようと思います。前回は Slack Event API の Verification まで 行いました。今回は App の権限と認証周りの設定を行います。
App の権限の設定
前回 Verification した時に細かい設定を忘れていました。
Event Subscriptions → Subscribe to bot events
Event API の中で Bot で対応するイベントを設定します。Subscribe to bot events
で以下を追加しました。
message.channels
→ パブリックチャンネルに投稿されたときmessage.groups
→ プライベートチャンネルに投稿されたとき
それぞれチャンネルの公開、非公開に応じて必要になります。groups
というのは複数人の DM かと思っていましたがそうではないようですね。
OAuth & Permissions → Scopes
利用するイベントによって必要な権限が異なります。Scopes
で以下の権限を追加し直しました。
channels:history
groups:history
chat:write
権限を付与し直すとアプリの再インストールが必要でした。
トークンなどの認証情報の管理
Bot 実装に当たって公式の SDK である BOLT を利用します。slackapi/bolt-python: A framework to build Slack apps using Python
こちらを利用する場合、実装したアプリの起動時に以下の環境変数を参照するか、コンストラクタで指定する必要があります。
SLACK_SIGNING_SECRET
SLACK_BOT_TOKEN
今回は公式のサンプルを真似て環境変数を利用することにしました。bolt-python/examples/google_cloud_functions at main · slackapi/bolt-python
SLACK_SIGNING_SECRET
は Basic Information
のページで、SLACK_BOT_TOKEN
はOAuth & Permissions
のページで確認できます。
以下のような内容の .env.yaml
を用意しておきます。
SLACK_SIGNING_SECRET: *****
SLACK_BOT_TOKEN: xoxb-*****
.gcloudignore
の設定
Cloud Functions へのデプロイの際に不要なファイルの設定を行うのが .gcloudignore
です。このファイルにデプロイしたくないファイルを記述していきますが、.gitignore
をインクルードできるので組み合わせて設定します。
gcloud topic gcloudignore | Google Cloud CLI Documentation
.gitignore
を以下のように設定します。
/.venv/
/.vscode/
.env.yaml
.gcloudignore
は以下のように設定しました。
.gcloudignore
.git
.gitignore
#!include:.gitignore
/script/
デプロイされるファイルを確認するためのコマンドがあるので確認します。
$ gcloud meta list-files-for-upload
requirements.txt
main.py
うまく行っているようです。これで認証情報をコミットせずに、またデプロイされないようになりました。
ひとまず今回はここまでです。