إطار عمل Python لإنشاء تطبيقات Slack في لمح البصر باستخدام أحدث ميزات النظام الأساسي. اقرأ دليل البدء وانظر إلى أمثلة التعليمات البرمجية الخاصة بنا لتتعلم كيفية إنشاء التطبيقات باستخدام Bolt. وثائق وحدة بايثون متاحة هنا.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install slack_bolt
قم بإنشاء تطبيق Bolt for Python عن طريق استدعاء مُنشئ، وهو تصدير عالي المستوى. إذا كنت تفضل ذلك، يمكنك إنشاء تطبيق غير متزامن.
import logging
logging . basicConfig ( level = logging . DEBUG )
from slack_bolt import App
# export SLACK_SIGNING_SECRET=***
# export SLACK_BOT_TOKEN=xoxb-***
app = App ()
# Add functionality here
if __name__ == "__main__" :
app . start ( 3000 ) # POST http://localhost:3000/slack/events
export SLACK_SIGNING_SECRET= ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# in another terminal
ngrok http 3000
إذا كنت تستخدم وضع المقبس لتشغيل تطبيقك، فإن SocketModeHandler
متاح له.
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" ])
# Add functionality here
if __name__ == "__main__" :
# Create an app-level token with connections:write scope
handler = SocketModeHandler ( app , os . environ [ "SLACK_APP_TOKEN" ])
handler . start ()
قم بتشغيل التطبيق بهذه الطريقة:
export SLACK_APP_TOKEN=xapp- ***
export SLACK_BOT_TOKEN=xoxb- ***
python app.py
# SLACK_SIGNING_SECRET is not required
# Running ngrok is not required
تتفاعل التطبيقات عادةً مع مجموعة من الأحداث الواردة، والتي يمكن أن تتوافق مع أحداث Events API أو الإجراءات أو الاختصارات أو أوامر الشرطة المائلة أو طلبات الخيارات. لكل نوع من الطلبات، هناك طريقة لبناء وظيفة المستمع.
# Listen for an action from a Block Kit element (buttons, select menus, date pickers, etc)
app . action ( action_id )( fn )
# Listen for dialog submissions
app . action ({ "callback_id" : callbackId })( fn )
# Listen for slash commands
app . command ( command_name )( fn )
# Listen for an event from the Events API
app . event ( event_type )( fn )
# Listen for a custom step execution from a workflow
app . function ( callback_id )( fn )
# Convenience method to listen to only `message` events using a string or re.Pattern
app . message ([ pattern ,])( fn )
# Listen for options requests (from select menus with an external data source)
app . options ( action_id )( fn )
# Listen for a global or message shortcuts
app . shortcut ( callback_id )( fn )
# Listen for view_submission modal events
app . view ( callback_id )( fn )
الطريقة الموصى بها لاستخدام هذه الأساليب هي الديكورات:
@ app . event ( event_type )
def handle_event ( event ):
pass
ستكون معظم وظائف التطبيق داخل وظائف المستمع (معلمات fn
أعلاه). يتم استدعاء هذه الوظائف مع مجموعة من الوسائط، يمكن استخدام كل منها بأي ترتيب. إذا كنت ترغب في الوصول إلى الوسائط من كائن واحد، فيمكنك استخدام args
، وهو مثيل slack_bolt.kwargs_injection.Args
الذي يحتوي على جميع الوسائط المتاحة لهذا الحدث.
دعوى | وصف |
---|---|
body | القاموس الذي يحتوي على نص الطلب بالكامل (مجموعة شاملة من payload ). بعض البيانات الملحقة متاحة فقط خارج الحمولة (مثل trigger_id authorizations ). |
payload | محتويات الحدث القادم. يعتمد هيكل الحمولة على المستمع. على سبيل المثال، بالنسبة لحدث Events API، ستكون payload هي بنية نوع الحدث. بالنسبة لإجراء الكتلة، سيكون الإجراء من داخل قائمة actions . يمكن أيضًا الوصول إلى قاموس payload عبر الاسم المستعار المتوافق مع المستمع ( message ، event ، action ، shortcut ، أو view ، أو command ، أو options ). على سبيل المثال، إذا كنت تقوم بإنشاء مستمع message() ، فيمكنك استخدام وسيطات payload message بالتبادل. إحدى الطرق السهلة لفهم محتويات الحمولة هي تسجيلها . |
context | سياق الحدث. يحتوي هذا القاموس على بيانات حول الحدث والتطبيق، مثل botId . يمكن للبرمجيات الوسيطة إضافة سياق إضافي قبل تمرير الحدث إلى المستمعين. |
ack | الوظيفة التي يجب استدعاؤها للإقرار بأن تطبيقك قد تلقى الحدث الوارد. يوجد ack لجميع الإجراءات والاختصارات وعرض التقديمات وأوامر الشرطة المائلة وطلبات الخيارات. ack يُرجع وعدًا يتم حله عند اكتماله. اقرأ المزيد في الاعتراف بالأحداث. |
respond | وظيفة مساعدة تستجيب للأحداث الواردة إذا كانت تحتوي على response_url (الاختصارات والإجراءات وأوامر الشرطة المائلة). |
say | وظيفة الأداة المساعدة لإرسال رسالة إلى القناة المرتبطة بالحدث الوارد. هذه الوسيطة متاحة فقط عندما يتم تشغيل المستمع للأحداث التي تحتوي على channel_id (الأكثر شيوعًا هو أحداث message ). say يقبل سلاسل بسيطة (للرسائل النصية العادية) والقواميس (للرسائل التي تحتوي على كتل). |
client | عميل Web API الذي يستخدم الرمز المميز المرتبط بالحدث. بالنسبة لعمليات تثبيت مساحة العمل الفردية، يتم توفير الرمز المميز إلى المُنشئ. بالنسبة لعمليات التثبيت متعددة مساحات العمل، يتم إرجاع الرمز المميز باستخدام مكتبة OAuth، أو يدويًا باستخدام وظيفة authorize . |
logger | مثيل logging.Logger المدمج الذي يمكنك استخدامه في البرامج الوسيطة/المستمعين. |
complete | وظيفة الأداة المساعدة المستخدمة للإشارة إلى الإكمال الناجح لتنفيذ خطوة مخصصة. هذا يخبر Slack بمتابعة الخطوات التالية في سير العمل. تتوفر هذه الوسيطة فقط مع مستمع .function و .action عند معالجة عمليات تنفيذ خطوات سير العمل المخصصة. |
fail | وظيفة الأداة المساعدة المستخدمة للإشارة إلى فشل إكمال الخطوة المخصصة. هذا يخبر Slack بإيقاف تنفيذ سير العمل. تتوفر هذه الوسيطة فقط مع مستمع .function و .action عند معالجة عمليات تنفيذ خطوات سير العمل المخصصة. |
إذا كنت تفضل إنشاء تطبيقك باستخدام asyncio، فيمكنك استيراد مكتبة AIOHTTP واستدعاء مُنشئ AsyncApp
. ضمن التطبيقات غير المتزامنة، يمكنك استخدام نمط المزامنة/الانتظار.
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
# aiohttp is required
pip install slack_bolt aiohttp
في التطبيقات غير المتزامنة، يجب أن تكون جميع البرامج الوسيطة/المستمعين وظائف غير متزامنة. عند استدعاء الأساليب المساعدة (مثل ack
و say
) ضمن هذه الوظائف، يلزم استخدام الكلمة الأساسية await
.
# Import the async app instead of the regular one
from slack_bolt . async_app import AsyncApp
app = AsyncApp ()
@ app . event ( "app_mention" )
async def event_test ( body , say , logger ):
logger . info ( body )
await say ( "What's up?" )
@ app . command ( "/hello-bolt-python" )
async def command ( ack , body , respond ):
await ack ()
await respond ( f"Hi <@ { body [ 'user_id' ] } >!" )
if __name__ == "__main__" :
app . start ( 3000 )
إذا كنت تريد استخدام إطار عمل ويب غير متزامن آخر (مثل Sanic وFastAPI وStarlette)، فقم بإلقاء نظرة على المحولات المضمنة وأمثلة عليها.
تحتوي الوثائق على مزيد من المعلومات حول المفاهيم الأساسية والمتقدمة لـ Bolt for Python. كما أن جميع مستندات وحدة Python الخاصة بهذه المكتبة متاحة هنا.
إذا واجهتك مشكلة، فنحن هنا لمساعدتك. فيما يلي أفضل الطرق للحصول على المساعدة لحل مشكلتك:
[email protected]