前言
Hello Slack Webhook! 一起 Slack 最大化 一文詳細說明如何使用 Slack 的 Incoming Webhook 來做到將訊息傳送到頻道或對話中。儘管 Slack Webhook 如此好用,還是有美中不足的地方,也就是它無法傳送檔案,必須使用其他方法來達到傳送檔案的功能。這篇文章詳細記載如何在 Slack 中開通傳送檔案權限,最後再以 Python 寫一個傳送檔案的範例,讓讀者更有感。
開通 Slack 寫檔案權限
需先按照 Hello Slack Webhook! 一起 Slack 最大化 創建一個 Slack 應用程式,再於 OAuth & Permissions
設定中新增 files.write
權限,並且重新安裝應用程式 (reinstall your app
)
並且允許應用程式可以取得這項權限
記下 Bot User OAuth Token
,其為 xoxb-
開頭 (若為 User OAuth Token
則為 xoxp-
開頭,參考 Access tokens)
OAuth Token 為機密性的資訊,若有外流或其他情況可以選擇到 OAuth & Permissions
最下方撤銷 Token。如此一來,重新安裝該 Slack 應用程式到工作空間時,便可得到新的 OAuth Token
將應用程式整合至頻道中
與 Webhook 不同的是,使用 files.upload API 上傳檔案之前,需要將應用程式加入到 (整合) 對應的頻道中
若頻道中出現對應訊息,表示應用程式已經整合進頻道中囉!
測試檔案上傳
傳至特定頻道中
files.upload 是透過頻道識別碼來判斷要上傳到哪一個頻道中的,因此需要先記錄下頻道識別碼,該資訊可以在頻道的 關於
或網址列中得到
準備一個內容如下的測試檔案 D:\test.json
1 | { |
在執行 Python 程式之前,需要先安裝 slack_sdk 套件
1 | pip install slack_sdk |
等待套件安裝完畢,便可執行下方 Python 程式,主要有三個地方要注意
your_bot_user_auth_token
:取代為你的Bot User OAuth Token
(xoxb-
為開頭)。target_channel_id
:取代為你的頻道識別碼。若想一次傳給多個頻道,可以用半形逗號 (,) 來分隔,例如:傳給C111
與C222
頻道,則將target_channel_id
替換為C111,C222
。當然地,對應的頻道需要將該 Slack 應用程式整合進頻道中才能接收到檔案。D:/test.json
:檔案路徑的部分需要依讀者的環境來做變化。
1 | from slack_sdk import WebClient |
最後,在頻道中就能看到 Slack 應用程式傳來的檔案囉
私訊傳至特定使用者
與頻道識別碼相同,需要先找出使用者識別碼。首先於工作空間的左側選單中找到 人員與使用者群組
,再尋找想要用 Slack API 私訊的成員,點擊 更多
即可查看成員識別碼
使用與傳輸至頻道一樣的程式碼,只是 target_channel_id
就需要用使用者識別碼來取代。同樣地,可以使用半形逗號 (,) 來分隔多個頻道識別碼、使用者識別碼,一次將檔案傳輸給多個頻道或者私訊給多個使用者!
結語
Slack API 與 Webhook 是互補的關係,舉例來說:我們可以透過 files.upload
上傳檔案後,再用 Webhook
傳輸訊息來對檔案做註解,讓頻道中的同仁可以更清楚該檔案的作用是甚麼。因此,並不是只能在 Slack API 與 Webhook 兩者中擇一使用,這樣的特性讓 Slack 應用程式使用方式更多元!