0Pricing
AI Agents · درس

أساسيات Slack Bolt SDK

تهيئة التطبيق، ورموز bot، ووضع socket مقابل HTTP، والاشتراك في الأحداث

أساسيات Slack Bolt SDK درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.

لماذا تستخدم Slack Bolt لتطوير الوكلاء؟

يُعد Slack Bolt حزمة SDK الرسمية بلغة Python لبناء تطبيقات Slack. فهي تتولى OAuth وتوجيه الأحداث والبرمجيات الوسيطة ودورة حياة الطلب والاستجابة، بحيث يركّز وكيلك على منطق العمل بدلًا من تفاصيل HTTP. وتدعم Bolt كلًا من Socket Mode (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')

رمز Bot وسر التوقيع

يحتاج تطبيق Slack إلى بيانات اعتماد اثنتين: Bot Token (يبدأ بـ xoxb-) لإجراء استدعاءات API ونشر الرسائل، وSigning Secret للتحقق من أن الأحداث الواردة مصدرها 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]}...')

نطاقات Bot Token المطلوبة

تستخدم تطبيقات Slack نطاقات OAuth لتحديد ما يمكن للروبوت فعله. أضف النطاقات في لوحة Slack App ضمن OAuth & Permissions → Scopes → Bot Token Scopes. ومن النطاقات الشائعة لروبوت وكيل الذكاء الاصطناعي:

  • chat:write — نشر الرسائل
  • app_mentions:read — استقبال الإشارات @mentions
  • channels:history — قراءة رسائل القنوات
  • commands — استقبال أوامر الشرطة المائلة
  • im: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 Mode ووضع HTTP

يتصل Socket Mode بـ Slack عبر WebSocket دائم الاتصال، ولا يحتاج إلى عنوان URL عامًا، ما يجعله مناسبًا تمامًا للتطوير والأدوات الداخلية. أما HTTP Mode فيتطلب نقطة نهاية 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 Mode

يتطلب تطبيق Slack Bolt الأدنى في Socket Mode إنشاء 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 الخاصة باشتراكات الأحداث وأوامر الشرطة المائلة في تطبيق Slack لتشير إليه.

# 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

رمز App-Level المميز لـ Socket Mode

يتطلب Socket Mode رمز App-Level Token إضافيًا (يبدأ بـ xapp-) مع نطاق connections:write. وهذا الرمز منفصل عن Bot Token. أنشئه في إعدادات Slack App ضمن Basic Information → App-Level Tokens.

# 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، نفّذ قائمة التحقق هذه للتأكد من تكوينه بشكل صحيح:

  • وجود Bot Token وSigning Secret في متغيرات البيئة
  • إضافة النطاقات المطلوبة في لوحة Slack App
  • تمكين اشتراكات الأحداث (app_mention وmessage.im وغيرهما)
  • تمكين Socket Mode (أو ضبط عنوان 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 Mode مقابل وضع HTTP

اختبر مدى فهمك لأوضاع نشر Slack Bolt.

مراجعة أساسيات Slack Bolt

لديك الآن الأساس اللازم لبناء روبوتات Slack باستخدام Bolt:

  • App(token, signing_secret) — يهيّئ تطبيق Bolt باستخدام بيانات الاعتماد من متغيرات البيئة
  • Bot Token (xoxb-) لاستدعاءات API، وApp-Level Token (xapp-) لـ Socket Mode
  • Socket Mode — يستخدم WebSocket ولا يحتاج إلى عنوان URL عام، وهو مناسب للتطوير والأدوات الداخلية
  • HTTP Mode — نقطة نهاية HTTPS عامة، ومطلوبة لتطبيقات الإنتاج أو التطبيقات متعددة مساحات العمل
  • النطاقات — تُكوَّن في لوحة Slack App؛ أضف ما تحتاج إليه فقط
  • البرمجيات الوسيطة و@app.error — للتسجيل والتحقق ومعالجة الأخطاء

الأسئلة الشائعة

هل درس «أساسيات Slack Bolt SDK» مجاني؟

نعم — نص درس «أساسيات Slack Bolt SDK» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «أساسيات Slack Bolt SDK»؟

تهيئة التطبيق، ورموز bot، ووضع socket مقابل HTTP، والاشتراك في الأحداث تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «أساسيات Slack Bolt SDK»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات Slack Bolt SDK
  2. الاستماع إلى الأحداث وأوامر الشرطة المائلة
  3. إرسال الرسائل والكتل المنسقة
  4. بناء bot لإشعارات الفريق
← العودة إلى AI Agents