學到這裡,你可能發現有好多個工作流,最後一步都是「發送一則格式精美的 Slack 通知」。例如「每日戰報」要發通知、「新客戶」要發通知、「Jira 狀態同步」也要發通知。
結果就是。。。
重複地在好幾個地方,都設定了幾乎一樣的 Slack 節點,複製貼上那一大串 Blocks JSON 程式碼。
更慘的是,有一天想統一改一下通知訊息的標題格式,我竟然要去五個不同的工作流裡面,一個一個手動改!
太沒效率了,而且很容易漏改!
今天,我們要學習樂高積木的玩法,告別「複製貼上」的原始人模式。
我們要將「發送 Slack 通知」這個最常用的功能,單獨抽出來,做成一個可重複使用的「標準零件」,我們稱之為「子流程 (Sub-workflow)」。
未來,任何工作流需要發通知時,不用再自己從頭蓋了,只要從我們的「零件庫」裡,拿出這個標準零件,「卡」上去就好了。想修改格式,也只需要改這一個零件,所有地方就同步更新!
模組化與可重用性的核心思想 (DRY: Don't Repeat Yourself)
如何建立一個可被呼叫的「子流程」。
如何使用 Execute Workflow 節點,在主流程中「呼叫」這個子流程。
第一步:打造我們的第一個「標準零件」 (子流程)
我們要先建立一個專門負責「發送 Slack 通知」的工作流。
建立一個全新的工作流,將它命名,例如 Sub - Send Slack Notification。
命名很重要:在子流程的名稱前面加上 Sub - 或 Module - ,是一種很好的習慣,能讓你一眼就分辨出它的用途
這個工作流的觸發器,就是預設的 Start 節點。
你可以把它想像成這個零件的「插座」,用來接收來自外部的指令和資料。
在 Start 節點後,加上一個 Slack 節點。
關鍵設定:
我們要讓這個 Slack 節點的內容,變成「動態」的,由呼叫它的人來決定。
Channel: 在欄位中輸入運算式:{{ $json.channel }}
JSON / Blocks: 在欄位中輸入運算式:{{ $json.blocks }}
這段設定的意思是:「當我這個零件被使用時,我期待對方告訴我兩件事:要發送到『哪個頻道』(channel),以及訊息的『內容』是什麼 (blocks)。」
啟用它:儲存並啟用 (Active) 這個子流程。我們的第一個標準零件,已經放入零件庫待命了。
第二步:在主力流程中,「引用」我們的標準零件
現在,讓我們回到之前有使用到Slack通知的節點,如 Day 14 的「每日戰情報告」工作流。
找到流程最後面那個原本用來發送 Slack 通知的 Slack 節點,勇敢地把它刪掉!
在同樣的位置,新增一個叫做 Execute Workflow 的節點。這個節點就是「呼叫器」。
設定呼叫器:
Workflow: 在下拉選單中,選擇我們剛剛建立的 Sub - Send Slack Notification。
Source: 這是我們要傳遞給子流程的「包裹」。我們要告訴它 channel 和 blocks 的內容。點擊 Add Field 新增兩個欄位:
第一個欄位:
Name: channel
Value: 輸入你要發送的頻道名稱,例如 general。
第二個欄位:
Name: blocks
Value (Expression): 貼上我們之前寫好的那一整大段 Blocks JSON 程式碼。記得,這裡要用 Expression 模式!
現在,執行你的工作流試試看。
你會發現,即使流程中已經沒有 Slack 節點了,但 Slack 頻道依然收到了那封精美的報告!因為 Execute Workflow 節點,完美地呼叫了我們的「通知零件」,並請它完成了任務。
這樣做的好處?—— 一次修改,處處生效
從今天起,你所有的工作流,凡是需要發送 Slack 通知的,都統一使用這個 Execute Workflow 節點來呼叫你的「通知零件」。
未來,當你想修改所有通知的風格、加上公司 Logo、或是在頁尾增加一句話時,你再也不需要去十幾個地方修改了。你只需要回到 Sub - Send Slack Notification 這唯一的一個工作流中,修改它的 Slack 節點,儲存。
瞬間,所有引用了這個零件的工作流,全部都會同步更新。
今天,你學會了「化繁為簡」!
你不再只是埋頭打造一個個獨立的流程,你開始建立自己的「自動化零件庫」。
這不僅僅是為了效率,更是一種專業的、可持續發展的架構思維。它能讓你的自動化系統,在未來變得越來越龐大時,依然保持乾淨、整潔、且易於維護。
既然我們的流程已經「可靠」且「高效」,明天,我們將繼續探討另一個議題:如何讓你的工作流更容易分享與協作,以及去哪裡找到高手們已經做好的酷東西來參考。