New Features
Socket Mode
This version includes support for Socket Mode, which enables developers to receive interactivy payalods and events through WebSocket connections.
https://api.slack.com/socket-mode
For WebSocket connection handling, there are four implementations including major 3rd party open-source libraries.
Here is a minimal working example with the built-in WebSocket client. You can switch to other implementation by changing the imports and adding the extra dependencies (websocket_client, aiohttp, websockets).
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
# Install the Slack app and get xoxb- token in advance
app = App(token=os.environ["SLACK_BOT_TOKEN"])
if __name__ == "__main__":
# export SLACK_APP_TOKEN=xapp-***
# export SLACK_BOT_TOKEN=xoxb-***
SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
If you want to use asyncio for everything, you can use aiohttp
or websockets
(along with aiohttp for AsyncWebClient
). AsyncSocketModeHandler
requires all of your middleware/listeners to be compatible with the async/await programming style.
from slack_bolt.app.async_app import AsyncApp
# The default is the aiohttp based implementation
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())
Changes
- #108 #160 #176 #159 #200 Socket Mode support - Thanks @seratch @stevegill
- #174 #192 #202 Enable using class/instance methods for middleware/listners - Thanks @liuyangc3 @seratch
- #197 #198 Fix a bug where bot messages from class apps won't be passed to app.message listeners - Thanks @uc-dang-tiki @seratch
- #186 #183 Add an easier way to configure the direct install URL on App Directory