流程控制節點¶
工作流程裡的節點分兩種:一種是實際「做事」的任務節點(例如呼叫大型語言模型、查資料庫,見 Action 總覽),另一種就是這頁要介紹的流程控制節點——它們本身不產生內容,只負責決定流程往哪裡走、走幾次、要不要等、何時結束。
這些節點在編輯器的「新增狀態」面板「流程」頁籤中(操作見 編輯器介面導覽),共有七種:依條件分類(Choice)、迭代執行(Map)、並行執行(Parallel)、傳遞資料(Pass)、等待(Wait)、成功(Succeed)、失敗(Fail)。
開始前
這頁假設你已經會進入工作流程編輯器、用拖曳把節點加進畫布、用連線把節點接起來。若還不熟,先看 編輯器介面導覽。
共用欄位集中說明
所有節點面板共用的「名稱」、「附註」、「下一個狀態」,以及「輸入與輸出」、「錯誤處理」分頁,設定方式都一樣,集中說明在 Action 通用設定。這頁只說明每種流程節點特有的部分。
下面用一個「訂單處理」的小流程當例子貫穿說明:依訂單金額分流,大額訂單先並行通知業務與倉儲、再逐筆處理品項、等待一段時間後標記成功;小額訂單則直接標記失敗。
依條件分類(Choice)¶
用途:依資料內容把流程導向不同分支,相當於程式裡的 if/else。例如「訂單金額大於 1000 就走 A 流程,否則走 B 流程」。

| 欄位 | 必填 | 說明 |
|---|---|---|
| 名稱 | 是 | 這個節點的名稱。 |
| 規則 | - | 規則的容器。底下可放多個「類別」,由上而下逐一比對,第一個成立的就走它指定的分支。 |
| 預設值 | 否 | 當所有規則都不成立時,流程要走到哪個節點。建議設定,避免沒有任何分支符合時流程卡住。 |
| 類別 #N | - | 一條判斷規則。可有多條,按「建立新的分類」新增。每條包含下列三項。 |
| └ 條件 | 是 | 這條規則的判斷式(例如 $.amount > 1000)。點右側的編輯()圖示可開啟條件編輯器,挑選要比較的欄位、運算子(等於、大於、包含、是否存在…)與比較值。 |
| └ 下一個狀態 | 是 | 這條規則成立時,流程要走到哪個節點。 |
| └ 附註 | 否 | 這條規則的備註。 |
| 附註 | 否 | 整個節點的備註。 |
編輯一條判斷式:「編輯條件」對話框¶
點「條件」右側的編輯()圖示,會開啟「編輯條件」對話框。一條規則的判斷式就是在這裡組出來的:先選一個「條件陳述式」,再填一列或多列判斷式,每列由「變數」、「運算子」、「值類型」、「值」組成。

條件陳述式:要比對幾個條件¶
最上方的「條件陳述式」決定這條規則要看幾個判斷式、怎麼合起來算:
| 條件陳述式 | 說明 |
|---|---|
| Simple | 只評估單一判斷式。最常用,例如「金額大於 1000」。 |
| AND | 評估多個判斷式,全部都成立這條規則才算成立(且)。 |
| OR | 評估多個判斷式,任一個成立這條規則就算成立(或)。 |
選「AND」或「OR」後,下方會出現新增()圖示,按它就能再加一列判斷式;多餘的判斷式可按該列右側的刪除()圖示移除(至少保留兩列)。選「Simple」時只會有一列。
一列判斷式的欄位¶
每一列判斷式都包含下列欄位(由左到右):
| 欄位 | 必填 | 說明 |
|---|---|---|
| 否定 | 否 | 把整列的判斷結果反過來。留空表示照原意;選「Not」表示「不符合上述條件才算成立」。 |
| 變數 | 是 | 要拿來比較的資料,用 JSONPath 指出(例如 $.amount 代表輸入裡的 amount 欄位)。寫法見 變數與資料引用。 |
| 運算子 | 是 | 要做哪一種比較(等於、大於、是否存在…),共八種,詳見下表。 |
| 值類型 | 視運算子而定 | 「值」是哪一種資料,以及是直接給一個常數、還是再指向另一個欄位。選「is present」「matches string」時不會出現這欄。 |
| 值 | 視運算子而定 | 拿來和「變數」比較的對象。輸入方式會隨「值類型」改變(見下文)。 |
標籤為英文
「運算子」與「值類型」的選項在畫面上以英文呈現(例如 is greater than、Number Constant),下面表格保留英文原文,方便你和畫面對照。
運算子:八種比較方式¶
| 運算子 | 意思 | 要搭配的「值類型」與「值」 |
|---|---|---|
is present | 「變數」這個欄位是否存在。 | 不選值類型;「值」是 true/false 下拉:true 表示「要存在」、false 表示「要不存在」。 |
is of type | 「變數」的值是不是某種型別(數字、字串、布林、時間、空值)。 | 「值類型」選型別(見下方基本型別);「值」是 true/false 下拉:true 表示「要是該型別」、false 表示「要不是」。 |
is equal to | 「變數」等於指定的值。 | 「值類型」可選全部八種詳細型別(見下方)。 |
is greater than | 「變數」大於指定的值。 | 「值類型」可選詳細型別,但不含布林(布林不分大小)。 |
is greater than or equal to | 「變數」大於等於指定的值。 | 同上,不含布林。 |
is less than | 「變數」小於指定的值。 | 同上,不含布林。 |
is less than or equal to | 「變數」小於等於指定的值。 | 同上,不含布林。 |
matches string | 「變數」的字串符合指定的樣式(規則表達式,regex)。 | 不選值類型;「值」直接輸入樣式字串,例如 ^ORDER-\d+$。 |
「是否存在」與「否定」
is present 與 is of type 的「值」本身就能用 true/false 表達正反,通常不必再開「否定」;其餘比較運算子才常搭配「否定」來表達「不符合」。
值類型:值是哪一種資料¶
「值類型」分兩組,依運算子自動切換:
基本型別(搭配 is of type):用來判斷「變數」是哪一種型別。
| 值類型 | 對應型別 |
|---|---|
Number | 數字 |
Timestamp | 時間(時間戳記) |
String | 字串 |
Boolean | 布林(true/false) |
Null | 空值 |
詳細型別(搭配 is equal to 與大小比較運算子):每種型別都分「常數(Constant)」和「變數(Variable)」兩款——常數是你直接打一個固定值來比;變數是再用 JSONPath 指向另一個欄位,拿兩個欄位互相比。
| 值類型 | 說明 | 「值」的輸入方式 |
|---|---|---|
Number Constant | 和一個固定數字比。 | 數字輸入框。 |
Number Variable | 和另一個欄位的數字比。 | 用 JSONPath 選欄位。 |
String Constant | 和一段固定文字比。 | 文字輸入框。 |
String Variable | 和另一個欄位的文字比。 | 用 JSONPath 選欄位。 |
Timestamp Constant | 和一個固定時間比。 | 文字輸入框,需為 ISO 8601 格式(例如 2026-06-15T09:00:00Z)。 |
Timestamp Variable | 和另一個欄位的時間比。 | 用 JSONPath 選欄位。 |
Boolean Constant | 和一個固定布林值比(僅 is equal to 可用)。 | true/false 下拉。 |
Boolean Variable | 和另一個欄位的布林值比(僅 is equal to 可用)。 | 用 JSONPath 選欄位。 |
大小比較不支援布林
is greater than、is less than 等大小比較運算子的「值類型」清單不含 Boolean Constant/Boolean Variable,因為布林值沒有大小之分;布林只能用 is equal to 比相等,或用 is of type 判斷型別。
迭代執行(Map)¶
用途:對一份清單裡的每一筆資料重複執行同一段流程,相當於 for-each 迴圈。例如「對訂單裡的每一個品項各跑一次檢查」。迴圈內的處理步驟畫在這個節點內部的子流程中。

| 欄位 | 必填 | 預設 | 說明 |
|---|---|---|---|
| 名稱 | 是 | - | 節點名稱,整條流程裡不可重複。 |
| 項目陣列路徑 | 否 | 整包輸入 | 用 JSONPath 指出「要對哪一個陣列做迭代」。詳見下方〈要對哪個陣列迭代〉。 |
| 項目選擇器 | 否 | 單一元素本身 | 一段 JSON 樣板,決定每一筆進到子流程時長什麼樣子。詳見下方〈每一筆要餵什麼進子流程〉。 |
| 並行執行上限 | 否 | 10 | 同時最多處理幾筆。可填 1~1000 的整數;填 1 等於一筆一筆依序處理,留空則用平台預設值 10。資料量大又想加速時調高,但要注意下游(如外部 API)能不能承受同時這麼多筆的負載。 |
| 下一個狀態 | 是 | - | 全部迭代完成後,流程接著走到哪個節點(或在下拉選單選「結束」收尾)。 |
| 附註 | 否 | - | 節點備註。 |
每一筆資料實際要做什麼,是畫在這個節點裡的子流程(迭代本體)。把處理步驟放進子流程,平台就會對清單中的每一筆各跑一次。

要對哪個陣列迭代:「項目陣列路徑」¶
「迭代執行」節點會先收到上游節點傳下來的整包資料,「項目陣列路徑」就是用 JSONPath 從這包資料裡,挑出那個要被逐筆處理的陣列:
- 例:上游輸出
{ "orderId": "A001", "items": [ {…}, {…}, {…} ] },要逐筆處理items,就填$.items。 - 留空時,平台會把整包輸入當成要迭代的陣列——這時輸入本身必須就是一個陣列(例如
[ {…}, {…} ]),否則會出錯。多數情況建議明確填上路徑,比較不會誤判。
先確認上游真的給了陣列
「項目陣列路徑」指到的位置必須是一個陣列。若上游給的是單一物件或字串,迭代會失敗。不確定上游輸出長相時,可先試跑一次、在執行結果查看這個節點的輸入(見 執行與查看結果),再回來對照路徑。
每一筆要餵什麼進子流程:「項目選擇器」¶
子流程(迭代本體)裡的每個節點,靠 $ 取用「這一筆」的資料。$ 實際是什麼,由「項目選擇器」決定:
- 留空「項目選擇器」:子流程拿到的
$就是陣列裡的單一元素本身。例如$.items是品項清單,子流程裡用$.sku、$.qty就能取到這一筆品項的欄位。 -
填寫「項目選擇器」:你可以重新組一個物件當作每一筆的輸入。它是一段 JSON 樣板,鍵名以
.$結尾代表「值是用 JSONPath 取來的」(沒有.$就是固定值)。取值來源有三種:寫法 取到的東西 $$.Map.Item.Value目前正在處理的這一筆(陣列裡的單一元素)。 $$.Map.Item.Index目前這筆是第幾個,從 0開始計算。$.欄位從進入本節點的整包輸入取共用欄位(每一筆都一樣的東西,例如訂單編號)。 例如要讓每一筆都同時拿到「這一筆品項」「它的序號」以及「整張訂單共用的訂單編號」:
{ "item.$": "$$.Map.Item.Value", "index.$": "$$.Map.Item.Index", "order_id.$": "$.orderId" }這樣子流程裡的
$就會是{ "item": {…}, "index": 0, "order_id": "A001" },節點內用$.item、$.order_id即可取用。
迭代結果怎麼回到主流程
每一筆子流程的輸出會依原本清單的順序組成一個陣列,放回主流程。要把這份結果放到哪個欄位、會不會蓋掉原輸入,由「輸入與輸出」分頁的 ResultPath 控制(見 Action 通用設定)。
並行執行(Parallel)¶
用途:同時執行多個分支,全部完成後再繼續往下。例如「同時通知業務與倉儲」,兩邊各做各的、互不等待,等兩邊都好了才進下一步。

| 欄位 | 必填 | 說明 |
|---|---|---|
| 名稱 | 是 | 節點名稱,整條流程裡不可重複。 |
| 下一個狀態 | 是 | 所有分支都完成後,流程接著走到哪個節點(或在下拉選單選「結束」收尾)。 |
| 附註 | 否 | 節點備註。 |
| 建立新的分支 | - | 按一下新增一條並行分支。每條分支是一段獨立的子流程,畫在這個節點內部;至少要有一條分支。 |
| 清除空分支 | - | 一鍵移除沒有放任何步驟的空白分支,保持畫面乾淨。 |
每條分支是一段獨立的子流程,畫在這個節點內部(下圖的「並行通知」同時有「通知業務」與「通知倉儲」兩條分支):

每條分支拿到什麼輸入¶
和「迭代執行」不同,「並行執行」不是把清單拆開分給各分支,而是讓每條分支各自拿到一份相同的輸入——也就是進入本節點的那包資料。各分支彼此獨立、看不到對方的資料:
- 分支內每個節點的
$,預設就是進入本節點的整包輸入。每條分支拿到的內容完全一樣,差別只在各分支對它做不同的事。 - 想讓各分支只拿到輸入的某一部分、或先整理成特定格式,可到「輸入與輸出」分頁用
InputPath/Parameters調整(見 Action 通用設定);同樣支援以.$結尾的鍵名搭配 JSONPath 取值。
各分支的結果怎麼合併與取用¶
所有分支都跑完後,平台會把各分支的最終輸出依分支由上而下的順序,組成一個陣列(第一條分支的結果是第 0 筆、第二條是第 1 筆,以此類推)。下一步要取用時,就用陣列索引去拿:
- 假設在「輸入與輸出」分頁把這個節點的
ResultPath設為$.notifyResult,則$.notifyResult[0]是「通知業務」分支的結果、$.notifyResult[1]是「通知倉儲」分支的結果。 - 之後若要把兩邊結果挑出來重組,常接一個「傳遞資料(Pass)」節點,用
Parameters把$.notifyResult[0].…、$.notifyResult[1].…取成好讀的欄位。
別讓並行結果蓋掉原始輸入
若下一步還需要用到進入並行前的原始資料,記得在「輸入與輸出」分頁設定 ResultPath,把並行結果放進獨立欄位(如上例的 $.notifyResult),不要整包覆蓋原始輸入(見 Action 通用設定)。
等待(Wait)¶
用途:讓流程暫停一段時間或等到指定的時間點再繼續。例如「送出通知後等 5 秒再查狀態」「等到明天上午 9 點才寄出報表」。
「等待」有兩種類型,用面板上的「類型」切換:
等待固定時間間隔:暫停固定秒數。

| 欄位 | 必填 | 說明 |
|---|---|---|
| 名稱 | 是 | 節點名稱。 |
| 類型 | 是 | 選「等待固定時間間隔」。 |
| 秒數 | 是 | 要暫停的秒數。 |
| 下一個狀態 | 否 | 等待結束後接著走到哪個節點。 |
| 附註 | 否 | 節點備註。 |
等待直到特定日期和時間:暫停到某個絕對時間點。

| 欄位 | 必填 | 說明 |
|---|---|---|
| 名稱 | 是 | 節點名稱。 |
| 類型 | 是 | 選「等待直到特定日期和時間」。 |
| 日期 | 是 | 要等到的日期。 |
| 時間 | 是 | 要等到的時間。 |
| 時區 | 是 | 上述日期時間採用的時區(UTC 位移,例如 UTC+08:00 為台灣時間)。 |
| 下一個狀態 | 否 | 等待結束後接著走到哪個節點。 |
| 附註 | 否 | 節點備註。 |
成功(Succeed)¶
用途:提前以「成功」結束流程。流程走到這個節點就正常結束,不再往下執行。常放在某條分支的結尾,表示「這條路走完就算成功了」。

| 欄位 | 必填 | 說明 |
|---|---|---|
| 名稱 | 是 | 節點名稱。 |
| 附註 | 否 | 節點備註。 |
「成功」是終點節點,沒有「下一個狀態」。
失敗(Fail)¶
用途:以「失敗」結束流程,並可標記錯誤代碼與原因。常和「依條件分類」搭配,把不符合條件的情況導到這裡,讓整筆執行被標記為失敗、方便後續排查。

| 欄位 | 必填 | 說明 |
|---|---|---|
| 名稱 | 是 | 節點名稱。 |
| 錯誤 | 否 | 錯誤代碼或名稱(例如 OrderTooSmall),方便程式或人員辨識失敗類型。也可填 JSONPath 從資料動態帶入。 |
| 原因 | 否 | 失敗原因的文字說明(例如「訂單金額未達門檻」)。也可填 JSONPath 動態帶入。 |
| 附註 | 否 | 節點備註。 |
「失敗」是終點節點,沒有「下一個狀態」。
傳遞資料(Pass)¶
用途:不做運算,只把資料整理、補值或傳遞到下一步,常用來在串接步驟之間「喬」資料格式。

「傳遞資料」同時也是一種任務節點,完整欄位(含「輸入與輸出」分頁的 Result、ResultPath 等)說明見 傳遞資料。
把它們組起來:實際效果¶
把上面的節點接起來,就成了完整的「訂單處理」流程:「開始」→「依條件分類」判斷金額,大額走「並行執行」→「迭代執行」→「等待」→「成功」,小額走「傳遞資料」→「失敗」。

實際執行(輸入 amount 為 5000、items 為三個品項)後,在執行結果的「執行流程圖」可看到流程實際走過的路徑:走到的節點變綠色(成功),沒走到的分支(小額訂單的「傳遞訂單 → 標記失敗」)維持灰色。

完整的執行與查看結果操作,見 執行與查看結果。
下一步¶
- 設定每個節點共用的名稱、下一個狀態、輸入與輸出、錯誤處理:Action 通用設定
- 認識實際做事的任務節點:Action 總覽
- 在條件與欄位中引用前面步驟的資料:變數與資料引用
- 設定整條流程的輸入與輸出長相:開始與結束節點
- 實際執行並查看結果:執行與查看結果