0%

n8n 串接 Slack、發送訊息、用 Slack 觸發 workflow

n8n-with-slack_bg

Credentials 設定

n8n_set_slack_credentials

n8n 設定 Slack 的 Credentials 有兩種方式

OAuth

n8n_set_slack_credentials_oauth_step1
n8n_set_slack_credentials_oauth_success

這是最簡單直覺的方式,只要登入 Slack 並授權即可
優缺點:
✅ 不需要管理 Access Token
✅ 自動處理好需要的權限,Slack 的 Permissions 繁多複雜,稍後 Access Token 會提到
❌ 無法客製化調整權限
❌ 無法當作 Slack 的相關 Trigger 使用

Access Token

想要取得 Token 就必須得完成下面幾個部分

  1. 到 Slack 新增一個 APP
n8n_slack_create_app
  1. 調整要取得權限的 Scope
n8n_slack_app_set_scope

Scope 這邊要注意,前面優缺點有提到,要設定的選項蠻多的
n8n 有提供文件參考哪些需要設定:

查看需要的 Slack Scopes 設定清單

點擊下方文字即可複製所需的 Scope:

channels:read
chat:write
files:read
files:write
groups:read
im:read
mpim:read
reactions:read
reactions:write
usergroups:read
usergroups:write
users:read

以下 Scopes 不適用於 Bot Token:

users.profile:write
stars:write
stars:read
channels:write
  1. 將 APP 安裝到 workspace
  2. 取得 Access Token
n8n_slack_app_reinstall_app_get_token
  1. 將 Token 填入 n8n 的 Credentials
n8n_slack_paste_access_token
  1. 如果要發送訊息到某個 Channel 需要先邀請 App 進入 Channel
n8n_slack_send_message_invite_bot_to_channel

發送訊息

Credentials 設定好後,就可以建立 Node 來發送訊息

n8n_slack_send_message_setting
  1. 選擇剛剛建立好的 credentials
  2. 選擇要發送的 Channel
    這裡先以 Channel 為示範,如果選擇 User 則是發送訊息給特定使用者
  3. 填入要發送的訊息,測試時可以先用固定文字
n8n_slack_send_message_setting_step2
  1. 按下 Test Action 後測試,看到截圖這樣就代表成功
n8n_slack_send_message_test_success

Slack Trigger

Slack 除了可以當 action,也能當 Trigger 來觸發
這裡會用 app mention 來示範
也就是說當我們在 Slack Channel @APP 時,他就會觸發 n8n 的 workflow

設定步驟

n8n_slack-set_trigger_on_bot_app_mentioned

首先一樣新增一個 Node

  1. 選擇需要的 Slack Trigger,總共有八種可以選
    這裡先選擇 On bot app mention
  2. 確認 Trigger 是剛剛選擇的
  3. 選擇一個 Channel,後續就需要在這個 Channel 來 @{你的app}
    如果這個步驟無法選擇,那可能是權限有問題,請確認你在 Slack 設定的權限是否都是上面建議的那些
  4. 你會得到一個 Webhook URL,這個 URL 需要在 Slack 貼上做驗證如下圖
n8n_slack-check_webhook_url
  1. 驗證成功後,看到 Verified 代表設定成功

測試觸發

測試蠻簡單的,先在 n8n 把 Trigger 點擊 Test Step
接著就會看到他開始監聽
由於他監聽的事件是 app mentioned
那我們就要到剛剛指定的 Channel 來 @APP 觸發

n8n_slack-test_slack_trigger

回到 Slack 並且 @APP 發送訊息後,回到 n8n 就能看到這些資訊了

n8n_slack-get_test_information

幾個 Schema 可以提一下,方便未來使用
user: 發送訊息的 User ID,如果你想要讓 App Mention 該使用者,就會需要這個 ID
channel: Channel 的 ID,如果想要單獨發送訊息回到這個 Channel,就要使用這個 ID
text: 使用者發訊息的內容,如果要根據內容來往下處理,就會需要提取這個內容來判斷
team: workspace 的 ID
ts: 發送訊息的時間戳記,但如果你想要 App 回覆訊息時 Reply 在該訊息下,就要使用這個時間戳記

時間戳記的使用方式如下圖

n8n_slack-post_message_to_reply

成果

目前展示的場景很簡單

在 @APP 發送訊息後,將訊息內容直接丟給 OpenAI API 的 4o-mini 模型來做回應
選擇 4o-mini 的原因不外呼是因為 API 的價格便宜,回應速度也很快

原本想測試 Perplexity 的 API 但貌似在 n8n 還沒有直接支援
得改用 n8n 的 Http Request 來做,並且還要額外處理回應的內容格式

n8n_slack-demo_success

希望這篇能夠幫到對於 n8n 和 Slack 有興趣的人,有問題的話也歡迎來信
或私訊 IG