พื้นฐาน Slack Bolt SDK
การเริ่มต้นแอป โทเค็นบอต โหมดซ็อกเก็ตเทียบกับ HTTP และการสมัครรับเหตุการณ์
พื้นฐาน Slack Bolt SDK เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้ Slack Bolt สำหรับการพัฒนาเอเจนต์
Slack Bolt คือ Python SDK อย่างเป็นทางการสำหรับสร้างแอป Slack โดยจัดการการตรวจสอบสิทธิ์ OAuth การกำหนดเส้นทางเหตุการณ์ มิดเดิลแวร์ และวงจรชีวิตของคำขอ/การตอบกลับให้ คุณจึงมุ่งเน้นที่ตรรกะทางธุรกิจของเอเจนต์ได้ โดยไม่ต้องจัดการรายละเอียดการเชื่อมต่อ HTTP Bolt รองรับทั้งโหมด Socket (WebSocket) และโหมด HTTP
# Install Slack Bolt
# pip install slack-bolt
# Slack Bolt handles:
# - Event subscriptions (messages, mentions, reactions)
# - Slash commands (/summarize, /ask)
# - Interactive components (buttons, modals, select menus)
# - Shortcuts (global and message shortcuts)
# - OAuth 2.0 for multi-workspace apps
# - Request signature verification (security)
print('Slack Bolt is the official Python SDK for Slack apps')โทเค็นบอตและรหัสลับสำหรับลงนาม
แอป Slack ต้องใช้ข้อมูลรับรองสองรายการ ได้แก่ โทเค็นบอต (ขึ้นต้นด้วย xoxb-) สำหรับเรียก API และโพสต์ข้อความ และรหัสลับสำหรับลงนามเพื่อตรวจสอบว่าเหตุการณ์ขาเข้ามาจาก Slack จริง ข้อมูลทั้งสองรายการอยู่ในแดชบอร์ดการตั้งค่าแอป Slack
import os
from slack_bolt import App
# Load credentials from environment variables
# Never hardcode tokens!
BOT_TOKEN = os.environ['SLACK_BOT_TOKEN'] # xoxb-...
SIGNING_SECRET = os.environ['SLACK_SIGNING_SECRET'] # hex string
# Initialize the Bolt app
app = App(
token=BOT_TOKEN,
signing_secret=SIGNING_SECRET
)
print('Slack Bolt app initialized')
print(f'Bot token prefix: {BOT_TOKEN[:10]}...')ขอบเขตสิทธิ์ที่จำเป็นของโทเค็นบอต
แอป Slack ใช้ขอบเขตสิทธิ์ OAuth เพื่อกำหนดว่าบอตทำอะไรได้บ้าง เพิ่มขอบเขตสิทธิ์ในแดชบอร์ดแอป Slack ที่ OAuth และสิทธิ์ → ขอบเขตสิทธิ์ → ขอบเขตสิทธิ์ของโทเค็นบอต ขอบเขตสิทธิ์ทั่วไปสำหรับบอตเอเจนต์ AI มีดังนี้:
chat:write— โพสต์ข้อความapp_mentions:read— รับ @mentionschannels:history— อ่านข้อความในช่องcommands— รับคำสั่งแบบ slashim:write— ส่งข้อความส่วนตัว
# Required scopes for a typical AI agent bot:
# - chat:write → post messages to channels
# - app_mentions:read → receive @bot mentions
# - channels:history → read message history
# - channels:read → list channels
# - commands → handle slash commands
# - im:write → send DMs
# - im:read → receive DMs
# - users:read → get user info (name, email)
# Add these in Slack App settings:
# https://api.slack.com/apps -> Your App -> OAuth & Permissions
print('Configure scopes in Slack App dashboard before installing')โหมด Socket เทียบกับโหมด HTTP
โหมด Socket เชื่อมต่อกับ Slack ผ่าน WebSocket แบบคงอยู่ตลอดเวลา จึงไม่ต้องใช้ URL สาธารณะและเหมาะอย่างยิ่งสำหรับการพัฒนาและเครื่องมือภายใน ส่วนโหมด HTTPต้องใช้ปลายทาง HTTPS สาธารณะที่ Slack จะส่งเหตุการณ์แบบ POST ไปให้ ซึ่งจำเป็นสำหรับแอปที่ใช้งานจริงและการติดตั้งในหลายพื้นที่ทำงาน
# SOCKET MODE (development / internal tools):
# - No public URL needed
# - Uses an App-Level Token (xapp-...)
# - Great for local development
from slack_bolt.adapter.socket_mode import SocketModeHandler
APP_TOKEN = os.environ['SLACK_APP_TOKEN'] # xapp-...
handler = SocketModeHandler(app, APP_TOKEN)
# handler.start() # blocks and handles events
# HTTP MODE (production):
# - Requires public HTTPS URL configured in Slack app settings
# - Works with Flask, FastAPI, etc.
from slack_bolt.adapter.flask import SlackRequestHandler
from flask import Flask, request
flask_app = Flask(__name__)
slack_handler = SlackRequestHandler(app)
print('Socket Mode: dev/internal; HTTP Mode: production')การเริ่มต้นแอปและเปิดใช้โหมด Socket
แอป Slack Bolt ขั้นต่ำในโหมด Socket มีขั้นตอนดังนี้: สร้าง App ลงทะเบียนตัวจัดการอย่างน้อยหนึ่งรายการ แล้วเริ่ม SocketModeHandler ตัวจัดการจะเชื่อมต่อกับโครงสร้างพื้นฐานเหตุการณ์ของ Slack และคงการเชื่อมต่อไว้จนกว่าคุณจะหยุดกระบวนการ
import os
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
app = App(
token=os.environ['SLACK_BOT_TOKEN'],
signing_secret=os.environ['SLACK_SIGNING_SECRET']
)
@app.event('app_mention')
def handle_mention(event, say):
user = event['user']
text = event['text']
say(f'Hi <@{user}>! You said: {text}')
# Start the app
if __name__ == '__main__':
handler = SocketModeHandler(
app,
os.environ['SLACK_APP_TOKEN']
)
handler.start() # blocks until process is killedการทดสอบด้วย ngrok (โหมด HTTP)
ระหว่างการพัฒนาด้วยโหมด HTTP ให้ใช้ ngrok เพื่อเปิดเผยเซิร์ฟเวอร์ภายในเครื่องสู่อินเทอร์เน็ต เรียกใช้ ngrok http 3000 เพื่อรับ URL HTTPS สาธารณะ จากนั้นอัปเดต URL การสมัครรับเหตุการณ์และคำสั่งแบบ slash ของแอป Slack ให้ชี้ไปยัง URL ดังกล่าว
# HTTP mode setup with Flask:
from flask import Flask, request
from slack_bolt import App
from slack_bolt.adapter.flask import SlackRequestHandler
import os
app = App(
token=os.environ['SLACK_BOT_TOKEN'],
signing_secret=os.environ['SLACK_SIGNING_SECRET']
)
@app.event('app_mention')
def handle_mention(event, say):
say('Hello from HTTP mode!')
flask_app = Flask(__name__)
handler = SlackRequestHandler(app)
@flask_app.route('/slack/events', methods=['POST'])
def slack_events():
return handler.handle(request)
# Run: python app.py
# In another terminal: ngrok http 3000
# Set https://abc123.ngrok.io/slack/events as your Request URL in Slackโทเค็นระดับแอปสำหรับโหมด Socket
โหมด Socket ต้องใช้โทเค็นระดับแอปเพิ่มเติม (ขึ้นต้นด้วย xapp-) พร้อมขอบเขตสิทธิ์ connections:write โทเค็นนี้แยกต่างหากจากโทเค็นบอต สร้างโทเค็นได้ในการตั้งค่าแอป Slack ที่ ข้อมูลพื้นฐาน → โทเค็นระดับแอป
# App-Level Token setup:
# 1. Go to https://api.slack.com/apps -> Your App
# 2. Click 'Basic Information'
# 3. Scroll to 'App-Level Tokens'
# 4. Click 'Generate Token and Scopes'
# 5. Name it 'socket-mode-token'
# 6. Add scope: connections:write
# 7. Click 'Generate'
# 8. Copy the xapp-... token
# In your .env file:
# SLACK_BOT_TOKEN=xoxb-...
# SLACK_SIGNING_SECRET=abc123...
# SLACK_APP_TOKEN=xapp-...
from slack_bolt.adapter.socket_mode import SocketModeHandler
import os
handler = SocketModeHandler(
app=app,
app_token=os.environ['SLACK_APP_TOKEN'] # xapp-...
)
print('App-Level Token required for Socket Mode')มิดเดิลแวร์ของ Bolt
Bolt รองรับมิดเดิลแวร์ ซึ่งเป็นฟังก์ชันที่ทำงานก่อนตัวจัดการเหตุการณ์ทุกตัว ใช้มิดเดิลแวร์สำหรับการบันทึก การตรวจสอบสิทธิ์ การจำกัดอัตรา หรือการเพิ่มข้อมูลผู้ใช้ให้เหตุการณ์ เรียกใช้ next() เพื่อส่งต่อการควบคุมไปยังมิดเดิลแวร์หรือตัวจัดการถัดไป
from slack_bolt import App
import time
import logging
app = App(
token=os.environ['SLACK_BOT_TOKEN'],
signing_secret=os.environ['SLACK_SIGNING_SECRET']
)
logger = logging.getLogger(__name__)
# Request logging middleware
@app.middleware
def log_request(logger, body, next):
event_type = body.get('event', {}).get('type', 'unknown')
start = time.time()
logger.info(f'Incoming event: {event_type}')
next() # must call next() to continue
elapsed = time.time() - start
logger.info(f'Handled {event_type} in {elapsed:.2f}s')
print('Middleware runs before every event handler')การจัดการข้อผิดพลาดใน Bolt
ลงทะเบียนตัวจัดการข้อผิดพลาดส่วนกลางด้วย @app.error เพื่อดักจับข้อยกเว้นที่ไม่ได้จัดการจากตัวจัดการเหตุการณ์ วิธีนี้ป้องกันไม่ให้แอปหยุดทำงาน และช่วยให้คุณบันทึกข้อผิดพลาด แจ้งช่องตรวจสอบระบบ หรือส่งข้อความข้อผิดพลาดกลับไปยังผู้ใช้ได้
from slack_bolt import App
import traceback
app = App(
token=os.environ['SLACK_BOT_TOKEN'],
signing_secret=os.environ['SLACK_SIGNING_SECRET']
)
@app.error
def custom_error_handler(error, body, logger):
logger.error(f'Error handling event: {error}')
logger.error(traceback.format_exc())
# Try to notify the user who triggered the error
event = body.get('event', {})
channel = event.get('channel')
if channel:
app.client.chat_postMessage(
channel=channel,
text='Sorry, I encountered an error. The team has been notified.'
)
print('Global error handler prevents unhandled crashes')การใช้ไคลเอ็นต์ Slack Web API
พร็อพเพอร์ตี app.client ให้สิทธิ์เข้าถึง Slack Web API โดยตรงสำหรับการดำเนินการที่ตัวจัดการเหตุการณ์ไม่ครอบคลุม ใช้เพื่อโพสต์ข้อความ อัปโหลดไฟล์ เชิญผู้ใช้เข้าช่อง หรือดึงประวัติช่องด้วยโปรแกรม
from slack_bolt import App
app = App(
token=os.environ['SLACK_BOT_TOKEN'],
signing_secret=os.environ['SLACK_SIGNING_SECRET']
)
# Use app.client for direct API calls
def post_to_channel(channel_id, text):
result = app.client.chat_postMessage(
channel=channel_id,
text=text
)
print(f'Message posted: ts={result["ts"]}')
return result
# Get channel list
def list_channels():
result = app.client.conversations_list(
types='public_channel',
limit=100
)
channels = result['channels']
print(f'Found {len(channels)} public channels')
return channels
# Look up user info
def get_user(user_id):
result = app.client.users_info(user=user_id)
return result['user']รายการตรวจสอบการตั้งค่าสภาพแวดล้อม
ก่อนเปิดใช้งานบอต Slack ให้ดำเนินการตามรายการตรวจสอบการตั้งค่านี้เพื่อให้แน่ใจว่ากำหนดค่าอย่างถูกต้อง:
- ตั้งค่าโทเค็นบอตและรหัสลับสำหรับลงนามในตัวแปรสภาพแวดล้อม
- เพิ่มขอบเขตสิทธิ์ที่จำเป็นในแดชบอร์ดแอป Slack
- เปิดใช้การสมัครรับเหตุการณ์ (app_mention, message.im และอื่น ๆ)
- เปิดใช้โหมด Socket (หรือตั้งค่า URL สาธารณะสำหรับโหมด HTTP)
- ติดตั้งแอปในพื้นที่ทำงานของคุณแล้ว (ดำเนินขั้นตอน OAuth เสร็จสมบูรณ์)
import os
from slack_bolt import App
def verify_slack_setup():
required_env = [
'SLACK_BOT_TOKEN',
'SLACK_SIGNING_SECRET',
'SLACK_APP_TOKEN'
]
missing = [var for var in required_env if not os.environ.get(var)]
if missing:
raise EnvironmentError(f'Missing env vars: {missing}')
token = os.environ['SLACK_BOT_TOKEN']
if not token.startswith('xoxb-'):
raise ValueError('SLACK_BOT_TOKEN must start with xoxb-')
app_token = os.environ['SLACK_APP_TOKEN']
if not app_token.startswith('xapp-'):
raise ValueError('SLACK_APP_TOKEN must start with xapp-')
print('Slack environment setup looks correct!')
verify_slack_setup()ตรวจสอบความเข้าใจอย่างรวดเร็ว: โหมด Socket เทียบกับโหมด HTTP
ทดสอบความเข้าใจเกี่ยวกับโหมดการปรับใช้ของ Slack Bolt
สรุปพื้นฐาน Slack Bolt
คุณมีพื้นฐานสำหรับการสร้างบอต Slack ด้วย Bolt แล้ว:
- App(token, signing_secret) — เริ่มต้นแอป Bolt ด้วยข้อมูลรับรองจากตัวแปรสภาพแวดล้อม
- โทเค็นบอต (
xoxb-) สำหรับเรียก API และโทเค็นระดับแอป (xapp-) สำหรับโหมด Socket - โหมด Socket — ใช้ WebSocket ไม่ต้องมี URL สาธารณะ เหมาะสำหรับการพัฒนาและเครื่องมือภายใน
- โหมด HTTP — ใช้ปลายทาง HTTPS สาธารณะ จำเป็นสำหรับแอปที่ใช้งานจริงหรือแอปที่รองรับหลายพื้นที่ทำงาน
- ขอบเขตสิทธิ์ — กำหนดค่าในแดชบอร์ดแอป Slack และเพิ่มเฉพาะสิ่งที่จำเป็น
- มิดเดิลแวร์ และ @app.error — ใช้สำหรับการบันทึก การตรวจสอบความถูกต้อง และการจัดการข้อผิดพลาด
คำถามที่พบบ่อย
บทเรียน “พื้นฐาน Slack Bolt SDK” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐาน Slack Bolt SDK” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐาน Slack Bolt SDK”
การเริ่มต้นแอป โทเค็นบอต โหมดซ็อกเก็ตเทียบกับ HTTP และการสมัครรับเหตุการณ์ คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐาน Slack Bolt SDK” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน Slack Bolt SDK
- การรับฟังเหตุการณ์และคำสั่งแบบเฉือน
- การส่งข้อความและบล็อกแบบ Rich
- การสร้างบอตแจ้งเตือนทีม