Cloud Functions + Slack Event API を利用したBotの作成(Appの権限と認証周り)

2022-04-04  /  GCPSlackCloud 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で以下を追加しました。

それぞれチャンネルの公開、非公開に応じて必要になります。groups というのは複数人の DM かと思っていましたがそうではないようですね。

OAuth & Permissions → Scopes

利用するイベントによって必要な権限が異なります。Scopes で以下の権限を追加し直しました。

権限を付与し直すとアプリの再インストールが必要でした。

トークンなどの認証情報の管理

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_SECRETBasic Information のページで、SLACK_BOT_TOKENOAuth & 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

うまく行っているようです。これで認証情報をコミットせずに、またデプロイされないようになりました。

ひとまず今回はここまでです。