เฟรมเวิร์ก Python เพื่อสร้างแอป Slack ได้ในพริบตาด้วยฟีเจอร์แพลตฟอร์มล่าสุด อ่านคู่มือเริ่มต้นใช้งานและดูตัวอย่างโค้ดของเราเพื่อเรียนรู้วิธีสร้างแอปโดยใช้ Bolt เอกสารโมดูล Python มีอยู่ที่นี่
# Python 3.6+ required
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install slack_bolt
สร้างแอป Bolt สำหรับ Python โดยการเรียก Constructor ซึ่งเป็นการส่งออกระดับบนสุด หากต้องการ คุณสามารถสร้างแอปอะซิงก์ได้
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
โดยทั่วไปแอพจะตอบสนองต่อคอลเลกชันของเหตุการณ์ที่เข้ามา ซึ่งสามารถสอดคล้องกับเหตุการณ์เหตุการณ์ API การดำเนินการ ปุ่มลัด คำสั่งเครื่องหมายทับ หรือคำขอตัวเลือกได้ สำหรับคำขอแต่ละประเภท มีวิธีสร้างฟังก์ชัน Listener
# 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
ฟังก์ชันการทำงานของแอปส่วนใหญ่จะอยู่ภายในฟังก์ชัน Listener (พารามิเตอร์ fn
ด้านบน) ฟังก์ชันเหล่านี้ถูกเรียกพร้อมกับชุดอาร์กิวเมนต์ ซึ่งแต่ละอาร์กิวเมนต์สามารถใช้ในลำดับใดก็ได้ หากคุณต้องการเข้าถึงอาร์กิวเมนต์จากออบเจ็กต์เดียว คุณสามารถใช้ args
ซึ่งเป็นอินสแตนซ์ slack_bolt.kwargs_injection.Args
ที่มีอาร์กิวเมนต์ที่มีอยู่ทั้งหมดสำหรับเหตุการณ์นั้น
การโต้แย้ง | คำอธิบาย |
---|---|
body | พจนานุกรมที่มีเนื้อหาทั้งหมดของคำขอ (superset of payload ) ข้อมูลเสริมบางอย่างใช้ได้เฉพาะนอกเพย์โหลดเท่านั้น (เช่น trigger_id และ authorizations ) |
payload | เนื้อหาของเหตุการณ์ที่จะเกิดขึ้น โครงสร้างเพย์โหลดขึ้นอยู่กับผู้ฟัง ตัวอย่างเช่น สำหรับเหตุการณ์ Events API payload จะเป็นโครงสร้างประเภทเหตุการณ์ สำหรับการดำเนินการบล็อก จะเป็นการดำเนินการจากภายในรายการ actions พจนานุกรม payload ยังสามารถเข้าถึงได้ผ่านนามแฝงที่สอดคล้องกับผู้ฟัง ( message event action shortcut view command หรือ options ) ตัวอย่างเช่น หากคุณกำลังสร้าง message() Listener คุณสามารถใช้ 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 Listener เมื่อจัดการการดำเนินการขั้นตอนเวิร์กโฟลว์แบบกำหนดเอง |
fail | ฟังก์ชันยูทิลิตี้ใช้เพื่อส่งสัญญาณว่าขั้นตอนแบบกำหนดเองไม่สำเร็จ สิ่งนี้จะบอก Slack ให้หยุดการดำเนินการเวิร์กโฟลว์ อาร์กิวเมนต์นี้ใช้ได้เฉพาะกับ .function และ .action Listener เมื่อจัดการการดำเนินการขั้นตอนเวิร์กโฟลว์แบบกำหนดเอง |
หากคุณต้องการสร้างแอปของคุณด้วย Asyncio คุณสามารถนำเข้าไลบรารี AIOHTTP และเรียกใช้ตัวสร้าง AsyncApp
ได้ ภายในแอป async คุณสามารถใช้รูปแบบ async/await ได้
# 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 สำหรับ Python นอกจากนี้ เอกสารโมดูล Python ทั้งหมดของไลบรารีนี้มีอยู่ที่นี่
หากคุณติดขัด เราพร้อมให้ความช่วยเหลือ ต่อไปนี้เป็นวิธีที่ดีที่สุดในการขอความช่วยเหลือในการแก้ไขปัญหาของคุณ:
[email protected]