Router
Router 是用於根據條件決定工作流程執行路徑的 processor。
基本用法
執行 Router 時,會依序檢查設定的條件,第一個評估為 true 的條件分支會被執行,如果所有條件都不符合則走向 Else 分支。
配置參數
節點的屬性面板:

Name
顯示在畫布上的名稱,用於在工作流程中識別此 processor。
Description
用於補充此 processor 的用途,提升工作流程的可讀性。
Properties
可以新增多個條件分支,每個分支包含條件名稱和條件值。
設定類型選項
- Literal:直接輸入
true或false - Expression:使用 JavaScript 表達式進行條件判斷
- Template:使用模板語法進行條件評估
詳細的取值方式說明請參考:Expression 介紹 - 取值方式
在 Workflow CRD 中的設定
每個條件分支是一個 config,名稱依序為 case-1、case-2,值就是該分支的判斷式。分支名稱同時也是連接關係的名稱,所以新增一個 case 等於同時新增一個設定與一條出線。
- name: proc-route
type: router
labels:
display_name: 判斷是否為退貨詢問
configs:
- name: case-1
expression: |-
(() => {
return /退貨|退款/.test(prevMessage);
})()
- name: case-2
expression: |-
(() => {
return /出貨|物流/.test(prevMessage);
})()
預設的連接關係是 case-1 與 else。else 不需要設定條件,所有 case 都不成立時會走它。
連接關係
動態分支
根據在 Properties 中設定的條件,會自動產生對應的連接點。當條件評估為 true 時,工作流程會從該分支繼續執行。
Else
當所有動態條件都不符合時,工作流程會從此連接點繼續執行,作為預設的執行路徑。
一個實際的例子
依庫存查詢結果決定要不要通知。在 Properties 按 + 加一個 case:
| case 名稱 | 條件 |
|---|---|
need_restock | Expression:low_stock.length > 0 |
畫面上會多出一條叫 need_restock 的分支,加上本來就有的 Else,共兩條出口。條件要回傳布林值。
條件怎麼被判斷
Router 依照 case 加入的順序往下檢查,第一個成立的就走那一條並停止檢查,後面的 case 不會再看。全部都不成立才走 Else。
判斷值不是「有值就算真」:
- 布林值直接採用。
- 字串會用
strconv.ParseBool解析,所以true、false、1、0、t、f這些可以,解析不出來的字串會走 Failure,不是當成 false。 - 既不是布林也不是字串的值(物件、數字、null)一律走 Failure。
這一點常被誤解:條件寫成一個會回傳非布林值的 expression 時,流程不會安靜地走 Else,而是整個節點失敗。