✏️ 編集
Slack の Slash Commands を作成した際に色々つまづいたのでメモに残す。
今回のゴール
/echo
で echo
と返すスラッシュコマンドを作成する/hoge
で hoge
と返すスラッシュコマンドを作成する
ngrok のセットアップ
ダウンロードページの URL :
https://ngrok.com/download
アカウントを作成せずに利用していたが、次のエラーが出たのでアカウントを作成した:
1
2
3
4
| ERR_NGROK_6022
Before you can serve HTML content, you must sign up for an ngrok account and install your authtoken.
https://ngrok.com/docs/errors/err_ngrok_6022/
|
次のコマンドで ngrok を起動させる(今回は 3000 番ポートを使うことにする):
各種ファイルの作成
.env.sample
:
1
2
3
4
| WORKING_DIR=/usr/src/app
OPENAI_API_KEY=# Your OpenAI API key
SLACK_BOT_TOKEN=# OAuth & Permissions > OAuth Tokens for Your Workspace > Bot User OAuth Access Token
SLACK_SIGNING_SECRET=# Basic Information > App Credentials > Signing Secret
|
Dockerfile
:
1
2
3
4
5
6
7
8
| FROM python:3.10
COPY requirements.txt ${WORKING_DIR}/
RUN apt-get update && apt-get upgrade -y
RUN pip install --upgrade pip && \
pip install -r requirements.txt
|
docker-compose.yml
:
1
2
3
4
5
6
7
8
9
10
11
12
13
| version: "3.7"
services:
app:
build: .
env_file:
- .env
volumes:
- .:$WORKING_DIR
working_dir: $WORKING_DIR
tty: true
ports:
- 3000:3000
|
requirements.txt
:
main.py
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| import os
from slack_bolt import App
app = App(
signing_secret=os.environ["SLACK_SIGNING_SECRET"],
token=os.environ["SLACK_BOT_TOKEN"]
)
@app.command("/echo")
def echo(ack, respond):
ack()
respond("echo")
@app.command("/hoge")
def hoge(ack, respond):
ack()
respond("hoge")
if __name__ == "__main__":
app.start(port=3000)
|
実行コマンドは次のとおり:
1
2
3
4
| $ docker-compose build
$ docker-compose up -d
$ docker exec -it <CONTAINER_ID> bash
[IN CONTAINER]# python main.py
|
Slack App 設定
App 作成
まずは普通に Slack App を作成。 App Display Name 、 Default username がデフォルトだと空欄になっており、これらを設定しないとワークスペースへインストールできないので、忘れず設定すること。
参考:
Slash Commands
1
2
3
4
5
6
7
8
9
| slash_commands:
- command: /echo
url: https://xxxxxxxxxx.ngrok-free.app/slack/events
description: echo
should_escape: false
- command: /hoge
url: https://xxxxxxxxxx.ngrok-free.app/slack/events
description: hoge
should_escape: false
|
⚠️ url
のエンドポイントは /echo
や /hoge
ではなく一律 /slack/events
(ここで無駄に時間を溶かしてしまった…)
参考: コマンドのリスニングと応答 - Slack | Bolt for Python
OAuth & Permissions
実際に動かしてみる