メインコンテンツまでスキップ

ソケットモードの利用

ソケットモードは、アプリに WebSocket での接続と、そのコネクション経由でのデータ受信を可能とします。Bolt for Python は、バージョン 1.2.0 からこれに対応しています。

ソケットモードでは、Slack からのペイロード送信を受け付けるエンドポイントをホストする HTTP サーバーを起動する代わりに WebSocket で Slack に接続し、そのコネクション経由でデータを受信します。ソケットモードを使う前に、アプリの管理画面でソケットモードの機能が有効になっていることを確認しておいてください。

ソケットモードを使用するには、環境変数に SLACK_APP_TOKEN を追加します。アプリのトークン(App-Level Token)は、アプリの設定の「Basic Information」セクションで確認できます。

組み込みのソケットモードアダプターを使用するのがおすすめですが、サードパーティ製ライブラリを使ったアダプターの実装もいくつか存在しています。利用可能なアダプターの一覧です。

内部的に利用する PyPI プロジェクト名Bolt アダプター
slack_sdkslack_bolt.adapter.socket_mode
websocket_clientslack_bolt.adapter.socket_mode.websocket_client
aiohttp (asyncio-based)slack_bolt.adapter.socket_mode.aiohttp
websockets (asyncio-based)slack_bolt.adapter.socket_mode.websockets
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

# 事前に Slack アプリをインストールし 'xoxb-' で始まるトークンを入手
app = App(token=os.environ["SLACK_BOT_TOKEN"])

# ここでミドルウェアとリスナーの追加を行います

if __name__ == "__main__":
# export SLACK_APP_TOKEN=xapp-***
# export SLACK_BOT_TOKEN=xoxb-***
handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])
handler.start()

Async (asyncio) の利用

aiohttp のような asyncio をベースとしたアダプターを使う場合、アプリケーション全体が asyncio の async/await プログラミングモデルで実装されている必要があります。AsyncApp を動作させるためには AsyncSocketModeHandler とその async なミドルウェアやリスナーを利用します。

AsyncApp の使い方についての詳細は、Async (asyncio) の利用や、関連するサンプルコード例を参考にしてください。

from slack_bolt.app.async_app import AsyncApp
# デフォルトは aiohttp を使った実装
from slack_bolt.adapter.socket_mode.async_handler import AsyncSocketModeHandler

app = AsyncApp(token=os.environ["SLACK_BOT_TOKEN"])

# ここでミドルウェアとリスナーの追加を行います

async def main():
handler = AsyncSocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])
await handler.start_async()

if __name__ == "__main__":
import asyncio
asyncio.run(main())