🤖

FastAPI で作る Slack Bot アプリの開発手順

2024/04/23に公開

🎯目的

FastAPI で作った Slack Bot アプリを公開できるようにする

🏃手順

1.🤵管理者・・・Slack Bot を新規作成する

Slack API: Applications | Slackへアクセスして、「Create New App」をクリックしてください。

「From Scratch」を選択してください。

上から「Slackのボット名」を入力し、「ボットを導入するワークスペース」を選択してください。

2.🤵管理者・・・Slack Bot に権限を付与する

左のサイドバーから「OAuth & Permissions」を選択してください。

「OAuth & Permissions」を選択したら、下にスクロールして「Scopes」という項目があるので、そちらで適切な権限を追加します。「Add an OAuth Scope」をクリックして、以下の権限を付与してください。

  • app_mentions
  • channels:history
  • chat:write
  • groups:history
  • im:history
  • mpim:history
  • users:read

付与する権限の詳細はPermission scopes | Slackを参照してください。

3.🤵管理者・・・チャットボットとのダイレクトメッセージを許可する

左のサイドバーから「Features > App home」を選択し、Allow users to send Slash commands and messages from the messages tabにチェックを入れてください。botへのDMができるようになります。

4.🤵管理者・・・Slack Bot をインストールする

左のサイドバーから「Install App」を選択し、「Install to Workspace」ボタンをクリックして、作成した Slack Bot をインストールしてください。

インストールしたら、トークンが発行されるのでこちらの文字列をコピーして、開発者に共有してください。

5.🤵管理者・・・Slack Botのクレデンシャル情報を開発者に共有する

左のサイドバーから「Basic Information」を選択し、「App Credentials」項目から以下の値をコピーして、開発者に共有してください。

  • Signing Secret

6.👨‍💻開発者・・・Botを作成し、デプロイする

FastAPIで Slack からのリクエストを受信する処理を実装します。

import os

from fastapi import APIRouter, Request, Response
from slack_bolt import App
from slack_bolt.adapter.fastapi import SlackRequestHandler

app = App(token=os.getenv('SLACK_BOT_TOKEN'), signing_secret=os.getenv('SLACK_SIGNING_SECRET'))
app_handler = SlackRequestHandler(app)


@app.event("app_mention")
def handle_app_mentions(body, say):
    print(body)
    say("What's up?")


@app.event("message")
def handle_message():
    pass


router = APIRouter(prefix='/slack')


@router.post("/events", name='slack events')
async def events(request: Request) -> Response:
    return await app_handler.handle(request)

実装が終わったら公開し、URLhttps://hoge.com/slack/eventsを管理者に共有します。

もしローカルで検証したい場合は、ngrokをお使いください。

ngrok http 8000

7.🤵管理者・・・チャットボットのEvent Subscriptionsを設定する

Slack App画面の左サイドバーにある「Features」>「Event Subscriptions」を選択し、Request URLに6.で発行したURLを貼り付けてください。

また、「Subscribe to bot events」に以下の値を登録してください。

  • app_mention
  • message.channels
  • message.groups
  • message.im
  • message.mpim

最後に画面右下にある「Save Changes」ボタンを押下してください。

🔗APPENDIX

https://github.com/slackapi/bolt-python/blob/main/examples/fastapi/app.py

https://slack.dev/bolt-python/ja-jp/tutorial/getting-started

https://zenn.dev/lclco/articles/712d482d07e18c

Discussion