0%

[Slack API] files.upload 將檔案傳到頻道中

前言

Hello Slack Webhook! 一起 Slack 最大化 一文詳細說明如何使用 Slack 的 Incoming Webhook 來做到將訊息傳送到頻道或對話中。儘管 Slack Webhook 如此好用,還是有美中不足的地方,也就是它無法傳送檔案,必須使用其他方法來達到傳送檔案的功能。這篇文章詳細記載如何在 Slack 中開通傳送檔案權限,最後再以 Python 寫一個傳送檔案的範例,讓讀者更有感。

開通 Slack 寫檔案權限

需先按照 Hello Slack Webhook! 一起 Slack 最大化 創建一個 Slack 應用程式,再於 OAuth & Permissions 設定中新增 files.write 權限,並且重新安裝應用程式 (reinstall your app)

設定 files:write 權限設定 files:write 權限

並且允許應用程式可以取得這項權限

允許允許

記下 Bot User OAuth Token,其為 xoxb- 開頭 (若為 User OAuth Token 則為 xoxp- 開頭,參考 Access tokens)

Bot User OAuth TokenBot User OAuth Token

OAuth Token 為機密性的資訊,若有外流或其他情況可以選擇到 OAuth & Permissions 最下方撤銷 Token。如此一來,重新安裝該 Slack 應用程式到工作空間時,便可得到新的 OAuth Token

撤銷 OAuth Token撤銷 OAuth Token

將應用程式整合至頻道中

與 Webhook 不同的是,使用 files.upload API 上傳檔案之前,需要將應用程式加入到 (整合) 對應的頻道中

頻道整合頻道整合

選擇應用程式選擇應用程式

若頻道中出現對應訊息,表示應用程式已經整合進頻道中囉!

測試檔案上傳

傳至特定頻道中

files.upload 是透過頻道識別碼來判斷要上傳到哪一個頻道中的,因此需要先記錄下頻道識別碼,該資訊可以在頻道的 關於 或網址列中得到

頻道識別碼位置頻道識別碼位置

準備一個內容如下的測試檔案 D:\test.json

1
2
3
4
{
"text": "Hello Slack files.upload!",
"author": "Wei-Ren Xue"
}

在執行 Python 程式之前,需要先安裝 slack_sdk 套件

1
pip install slack_sdk

等待套件安裝完畢,便可執行下方 Python 程式,主要有三個地方要注意

  1. your_bot_user_auth_token:取代為你的 Bot User OAuth Token (xoxb- 為開頭)。
  2. target_channel_id:取代為你的頻道識別碼。若想一次傳給多個頻道,可以用半形逗號 (,) 來分隔,例如:傳給 C111C222 頻道,則將 target_channel_id 替換為 C111,C222。當然地,對應的頻道需要將該 Slack 應用程式整合進頻道中才能接收到檔案。
  3. D:/test.json:檔案路徑的部分需要依讀者的環境來做變化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

oauth_token = 'your_bot_user_auth_token'
client = WebClient(token=oauth_token)
channel_id = 'target_channel_id'

file_name = 'D:/test.json'

try:
result = client.files_upload(
channels=channel_id,
initial_comment='Here\'s my file :smile:',
file=file_name,
)
except SlackApiError as e:
print("Error uploading file: {}".format(e))

最後,在頻道中就能看到 Slack 應用程式傳來的檔案囉

透過 Python 傳輸檔案到 Channel 中透過 Python 傳輸檔案到 Channel 中

私訊傳至特定使用者

與頻道識別碼相同,需要先找出使用者識別碼。首先於工作空間的左側選單中找到 人員與使用者群組,再尋找想要用 Slack API 私訊的成員,點擊 更多 即可查看成員識別碼

使用者識別碼使用者識別碼

使用與傳輸至頻道一樣的程式碼,只是 target_channel_id 就需要用使用者識別碼來取代。同樣地,可以使用半形逗號 (,) 來分隔多個頻道識別碼、使用者識別碼,一次將檔案傳輸給多個頻道或者私訊給多個使用者!

結語

Slack API 與 Webhook 是互補的關係,舉例來說:我們可以透過 files.upload 上傳檔案後,再用 Webhook 傳輸訊息來對檔案做註解,讓頻道中的同仁可以更清楚該檔案的作用是甚麼。因此,並不是只能在 Slack API 與 Webhook 兩者中擇一使用,這樣的特性讓 Slack 應用程式使用方式更多元!

很高興能在這裡幫助到您,歡迎登入 Liker 為我鼓掌 5 次,或者成為我的讚賞公民,鼓勵我繼續創造優質文章。
以最優質的內容回應您的鼓勵