跳轉到

流程控制節點

工作流程裡的節點分兩種:一種是實際「做事」的任務節點(例如呼叫大型語言模型、查資料庫,見 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 thanNumber Constant),下面表格保留英文原文,方便你和畫面對照。

運算子:八種比較方式

運算子 意思 要搭配的「值類型」與「值」
is present 「變數」這個欄位是否存在 不選值類型;「值」是 truefalse 下拉:true 表示「要存在」、false 表示「要不存在」。
is of type 「變數」的值是不是某種型別(數字、字串、布林、時間、空值)。 「值類型」選型別(見下方基本型別);「值」是 truefalse 下拉: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 presentis of type 的「值」本身就能用 truefalse 表達正反,通常不必再開「否定」;其餘比較運算子才常搭配「否定」來表達「不符合」。

值類型:值是哪一種資料

「值類型」分兩組,依運算子自動切換:

基本型別(搭配 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 可用)。 truefalse 下拉。
Boolean Variable 和另一個欄位的布林值比(僅 is equal to 可用)。 用 JSONPath 選欄位。

大小比較不支援布林

is greater thanis less than 等大小比較運算子的「值類型」清單不含 Boolean ConstantBoolean Variable,因為布林值沒有大小之分;布林只能用 is equal to 比相等,或用 is of type 判斷型別。

迭代執行(Map)

用途:對一份清單裡的每一筆資料重複執行同一段流程,相當於 for-each 迴圈。例如「對訂單裡的每一個品項各跑一次檢查」。迴圈內的處理步驟畫在這個節點內部的子流程中。

「迭代執行」節點設定面板

欄位 必填 預設 說明
名稱 節點名稱,整條流程裡不可重複。
項目陣列路徑 整包輸入 用 JSONPath 指出「要對哪一個陣列做迭代」。詳見下方〈要對哪個陣列迭代〉。
項目選擇器 單一元素本身 一段 JSON 樣板,決定每一筆進到子流程時長什麼樣子。詳見下方〈每一筆要餵什麼進子流程〉。
並行執行上限 10 同時最多處理幾筆。可填 11000 的整數;填 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)

用途:同時執行多個分支,全部完成後再繼續往下。例如「同時通知業務與倉儲」,兩邊各做各的、互不等待,等兩邊都好了才進下一步。

「並行執行」節點設定面板

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

每條分支是一段獨立的子流程,畫在這個節點內部(下圖的「並行通知」同時有「通知業務」與「通知倉儲」兩條分支):

「並行執行」節點內含的兩條分支子流程

每條分支拿到什麼輸入

和「迭代執行」不同,「並行執行」不是把清單拆開分給各分支,而是讓每條分支各自拿到一份相同的輸入——也就是進入本節點的那包資料。各分支彼此獨立、看不到對方的資料:

  • 分支內每個節點的 $,預設就是進入本節點的整包輸入。每條分支拿到的內容完全一樣,差別只在各分支對它做不同的事。
  • 想讓各分支只拿到輸入的某一部分、或先整理成特定格式,可到「輸入與輸出」分頁用 InputPathParameters 調整(見 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)

用途:不做運算,只把資料整理、補值或傳遞到下一步,常用來在串接步驟之間「喬」資料格式。

「傳遞資料」節點設定面板

「傳遞資料」同時也是一種任務節點,完整欄位(含「輸入與輸出」分頁的 ResultResultPath 等)說明見 傳遞資料

把它們組起來:實際效果

把上面的節點接起來,就成了完整的「訂單處理」流程:「開始」→「依條件分類」判斷金額,大額走「並行執行」→「迭代執行」→「等待」→「成功」,小額走「傳遞資料」→「失敗」。

訂單處理流程:含全部流程控制節點的設計畫面

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

執行流程圖:大額訂單實際走過的路徑(綠色為成功)

完整的執行與查看結果操作,見 執行與查看結果

下一步