Python Slack Events API adapter for Flask that provides event-driven Slack app development
—
Core functionality for creating and managing Slack event adapters. The SlackEventAdapter class provides the main interface for receiving Slack events and integrating with Flask web servers.
Creates a new Slack event adapter instance with signature verification and optional server binding.
class SlackEventAdapter(BaseEventEmitter):
def __init__(self, signing_secret, endpoint="/slack/events", server=None, **kwargs):
"""
Initialize the Slack event adapter.
Parameters:
- signing_secret: str, required - Slack app's signing secret for request verification
- endpoint: str, optional - URL endpoint for receiving events (default: "/slack/events")
- server: Flask/Blueprint/LocalProxy, optional - Existing server instance to bind to
- **kwargs: Additional arguments passed to the SlackServer constructor (unused when server is provided)
Raises:
- ValueError: If signing_secret is None
- TypeError: If server is not a Flask, Blueprint, or LocalProxy instance
"""Starts and manages the built-in Flask server for standalone usage.
def start(self, host='127.0.0.1', port=None, debug=False, **kwargs):
"""
Start the built-in webserver.
Parameters:
- host: str, optional - Host to bind the webserver to (default: '127.0.0.1')
- port: int, optional - Port number for the webserver (default: None, which uses Flask's default of 5000)
- debug: bool, optional - Enable debug level logging (default: False)
- **kwargs: Additional arguments passed to Flask.run()
Returns:
None
"""The SlackEventAdapter provides access to key configuration and state through public attributes.
signing_secret: str
"""The signing secret used for HMAC signature verification of incoming requests."""
server: SlackServer
"""The internal SlackServer instance handling HTTP requests and routing."""import os
from slackeventsapi import SlackEventAdapter
# Create adapter with standalone server
slack_events_adapter = SlackEventAdapter(
signing_secret=os.environ["SLACK_SIGNING_SECRET"],
endpoint="/slack/events"
)
# Register event listeners
@slack_events_adapter.on("message")
def handle_message(event_data):
print(f"Message received: {event_data}")
# Start the server
slack_events_adapter.start(host="0.0.0.0", port=3000, debug=True)import os
from flask import Flask
from slackeventsapi import SlackEventAdapter
# Your existing Flask app
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
# Bind adapter to existing app
slack_events_adapter = SlackEventAdapter(
signing_secret=os.environ["SLACK_SIGNING_SECRET"],
endpoint="/slack/events",
server=app
)
@slack_events_adapter.on("reaction_added")
def reaction_added(event_data):
print(f"Reaction: {event_data['event']['reaction']}")
if __name__ == "__main__":
app.run(port=3000)import os
from slackeventsapi import SlackEventAdapter
# Use custom endpoint path
slack_events_adapter = SlackEventAdapter(
signing_secret=os.environ["SLACK_SIGNING_SECRET"],
endpoint="/api/slack/webhook"
)
@slack_events_adapter.on("app_mention")
def handle_mention(event_data):
event = event_data["event"]
print(f"Mentioned in channel: {event['channel']}")
slack_events_adapter.start(port=8080)import os
from slackeventsapi import SlackEventAdapter
# Create adapter
slack_events_adapter = SlackEventAdapter(
signing_secret=os.environ["SLACK_SIGNING_SECRET"],
endpoint="/api/slack/events"
)
# Access public attributes
print(f"Signing secret: {slack_events_adapter.signing_secret}")
print(f"Server endpoint: {slack_events_adapter.server.endpoint}")
print(f"Package info: {slack_events_adapter.server.package_info}")Install with Tessl CLI
npx tessl i tessl/pypi-slackeventsapi