這一頁說明工作流怎麼跑:先手動試,再正式啟用;怎麼看每一次執行;每一次執行受哪些上限管;以及一次執行失敗時,怎麼自動去跑另一個工作流。
試跑與正式啟用
手動試跑
- 上方列的「執行」,會照最後一次儲存的樣子,手動跑一次整個工作流。有還沒儲存的變更時,它會先幫你存;存不起來時,就不會跑。
- 不論開關是「啟用中」還是「未啟用」,都可以按「執行」。要按「執行」,你要能編輯這個工作流,而且工作流裡要有觸發節點,請看一個工作流,很多觸發。
- 卡片上的「執行節點」,和設定視窗的「儲存並執行」,只執行那一個節點。它們也會先把工作流存起來。這種只跑一個節點的執行,不算在任何上限裡,失敗時也不會啟動錯誤工作流。
- 執行的時候,「執行」會變成「停止」;按下去之後,它寫著「取消中…」。正在跑的那一個節點會先跑完,才停下來,執行面板會寫著:「已經送出停止了。正在跑的節點會先跑完,再停下來。」
- 「執行」因為專案的上限被擋下來時,上方列的下面會出現一行紅字,寫著擋下的原因。因為每小時的上限被擋下來時,執行紀錄裡也會多一筆失敗的執行。
正式啟用
- 上方列的「啟用中」/「未啟用」開關,只有可以編輯的人看得到。切到「啟用中」,會打開排程、Webhook 的網址與 Agent 對話,請看一個工作流,很多觸發。
- 切到「啟用中」時,網站會檢查這個工作流跑不跑得起來、有沒有觸發節點;不行時,上方列的下面會出現一行紅字說原因。
- 開關用的是最後一次儲存的樣子,它不會先幫你存。所以請先按「儲存」,再切到「啟用中」。
- 新建立的、用「建立複本」做出來的,以及匯入的工作流,一開始都是「未啟用」。
兩件要小心的事
- 釘選資料只用在有人自己動手跑的時候:按「執行」、這種執行失敗後的「重試」,以及只跑一個節點時,前面節點的釘選資料會當作它的輸入。排程、Webhook、對話、AI 工具、子工作流和錯誤工作流的執行,一定不會用。所以靠釘選資料手動跑得好好的工作流,正式啟用之後,還是可能失敗,請看釘選資料。
- 手動執行也會真的做事:它和其他的執行一樣,會送出訊息、發文、寫入資料表。
執行面板
按畫布工具列上的一個圖示按鈕,游標指著時顯示「顯示執行面板」(打開後是「關閉執行面板」),會在畫布下面打開執行面板。一次執行開始時,它也會自己打開。
- 面板上方有四個開關:「執行紀錄」、「執行結果」、「輸入資料」與「輸出資料」。它們不是分頁,可以同時打開好幾個。至少要留一個打開;只剩一個時,它不能關掉。
- 拖面板的上緣可以改它的高度,按兩下就會還原。面板上方最右邊的按鈕,會把面板收起來。
「執行結果」
- 從上到下是:這次執行的錯誤(有的話)、以「提醒:」開頭的提醒(有的話),然後是狀態、這次執行的來源、「觸發者:…」、「從「…」開始」,以及花了多久。
- 「觸發者:」後面寫著是誰、或是什麼啟動了這次執行:
- 按下「執行」、「重試」、節點卡片上的「執行節點」,或節點設定視窗的「儲存並執行」的人,寫的是這個人的名字。
- 「Agent 對話」啟動的執行,寫的是那個 AI Agent 的名字。
- 用「AI 工具」叫的執行,寫的是叫它的那個 AI Agent 的名字。
- 子工作流的執行,寫的是呼叫它的工作流的名字;錯誤工作流的執行,寫的是執行失敗的那個工作流的名字。
- 排程啟動的執行,寫著「排程」;Webhook 啟動的執行,寫著「Webhook」。
- 在垃圾桶裡的 AI Agent 或工作流,還是寫它的名字。觸發者已經被永久刪除,或是這次執行比觸發者的紀錄更早時,寫著「—」。
- 碰到上限而被擋下來的執行,也會記下觸發者。
- 正在跑的執行,有「停止」;失敗的執行,有「重試」。
- 執行的狀態有:「排隊中」、「執行中」、「等待中」、「成功」、「失敗」與「已取消」。
- 下面列出跑過的每一個節點。節點的狀態有:「等待中」、「執行中」、「成功」、「失敗」、「已取消」與「略過」。
- 一個節點跑了好幾次時,每一次各一行,寫著「第 … 次」。重試時直接沿用上一次結果的節點,寫著「沿用」。一個節點自己重試過時,寫著「重試 …」。
- 按一行,「輸入資料」與「輸出資料」就會顯示那個節點的資料。在執行面板裡,這兩個窗格一開始是「表格」。
- 還沒有任何執行時,面板寫著「按上面的「執行」開始,或到「執行紀錄」看以前跑過的。」
- 一個節點,或整個執行,跑的次數快到上限時,會出現一行琥珀色的提醒,例如「提醒:…這個工作流可能有停不下來的迴圈,請檢查看看。」請看下面的執行上限。
執行紀錄
「執行紀錄」列出以前的執行,新的在上面,一頁一頁看。
- 狀態的篩選:「全部」、「成功」、「失敗」、「執行中」、「等待中」與「已取消」。
- 來源的選單:「所有來源」、「手動」、「AI 工具」、「對話」、「排程」、「Webhook」、「子工作流」、「錯誤工作流」與「單一節點」。
- 每一次執行,在來源的後面寫著觸發者,游標指著時會顯示「觸發者」。沒有觸發者時,寫著「—」。觸發者寫的是什麼,請看上面的「執行結果」。
- 上方寫著「共 … 次」。還沒有任何執行時,寫著「還沒有執行過。」
- 按一次執行,畫布會畫出那一次執行當時的流程圖,不能編輯,上方寫著「正在看以前的執行,畫面上是那時候的流程圖,不能編輯。」按「回到編輯」就會回去。
- 還沒開始就被擋下來的執行,會顯示成失敗,寫著擋下的原因,沒有開始的時間。
重試
- 只有失敗的執行,才有「重試」按鈕。
- 重試會留下已經成功的節點,從失敗的那一個重新開始。「重試」旁邊寫著:「重試會沿用已經成功的節點,從失敗的那一個重新開始。」
- 注意:重試跑的,是那一次失敗的執行當時的流程圖,不是你後來存的新版本。改好一個節點之後,請按「執行」重新跑一次。
- AI 工具的執行不能重試,請看AI 工具。
保留多久
跑完的執行,在跑完之後保留 30 天,之後網站每天會清掉一次。還在跑、或還在等待的執行,不論多久都會留著。
執行上限
這一個工作流的時間上限
在 ⋯「更多」選單的「工作流設定」裡,「執行時間上限(秒)」是這一個工作流自己的時間上限。改好之後,按視窗最下面的「儲存」。
- 空著時,灰色的字寫著「不填就用專案的 … 秒」,也就是用專案的時間上限。
- 它下面寫著「專案目前是 … 秒。」這一個工作流的時間上限,可以和專案的一樣,或是比專案的短,不能比專案的長。
整個專案的設定
「工作流設定」的下面,是「整個專案的設定」。只有在這個工作流所在的專案裡,角色有「管理自動化設定」這項角色權限的成員,和那個專案的擁有者看得到它;改的也是那個專案的設定。它的欄位是「專案的執行時間上限(秒)」、「同時最多幾個在跑」、「每小時執行次數上限」、「單一節點執行次數上限」、「單次執行總步數上限」與「專案預設的失敗處理工作流」。改好之後,按「儲存專案設定」;存不起來時,會寫著「專案設定存不起來。」
一個專案一開始的上限:
- 「專案的執行時間上限(秒)」:900 秒。
- 「同時最多幾個在跑」:5 個。
- 「每小時執行次數上限」:500 次。
- 「單一節點執行次數上限」:250 次。
- 「單次執行總步數上限」:1000 次。
每一格都有最小與最大可以填的數字。這些上限都不能關掉。
- 「每小時執行次數上限」的說明寫著:「算的是最近一小時內開始的執行,不是整點到整點。對話和錯誤處理的執行會算進去,但不會被擋下來。」這句話說的是每小時的上限。「同時最多幾個在跑」到了上限時,對話與錯誤工作流的執行,還是會被擋下來。
- 「每小時執行次數上限」的下面,有一塊寫著用了多少:「本小時 … 次 / … 次」;有執行被擋下來時,還有「另有 … 次被拒絕。」下面列出這個小時跑得最多的幾個工作流,和它們各跑了幾次;按工作流的名字,就會打開它。
- 「單一節點執行次數上限」的說明寫著:「一次執行裡,同一個節點最多可以跑幾次。」
- 「單次執行總步數上限」的說明寫著:「一次執行裡,所有節點加起來最多可以跑幾次,被跳過的節點也算。」
- 這兩格的下面寫著:「這兩個上限調整後,下一次執行才會套用。」
- 一個節點自己也可以設「執行次數上限」。這時兩個上限都有效,比較小的那一個算數,請看節點設定分頁。
私人工作流的上限
私人工作流不屬於任何專案,所以「工作流設定」裡沒有「整個專案的設定」,也沒有人可以改它的上限。它用的是上面「一個專案一開始的上限」的數字:
- 執行時間上限:900 秒。「工作流設定」裡「執行時間上限(秒)」的「不填就用專案的 … 秒」與「專案目前是 … 秒。」,寫的就是這個數字;這一個工作流自己的時間上限,一樣可以設得更短。
- 同時在跑的上限:5 個;每小時的上限:500 次。這兩個算的是擁有者所有的私人工作流加起來,不是一個工作流。
- 單一節點執行次數上限:250 次;單次執行總步數上限:1000 次。
碰到上限時
- 同時在跑的太多:「這個專案同時執行中的工作流已經到達上限 … 個。請等其他執行結束,或在專案設定裡把上限調高。」
- 這一小時跑太多次:「這個專案這一小時已經執行 … 次工作流,到達上限 … 次。再過 … 分鐘會空出名額。」
- 私人工作流同時在跑的太多:「你的私人工作流同時執行中的已經到達上限 … 個。請等其他執行結束。」
- 私人工作流這一小時跑太多次:「你的私人工作流這一小時已經執行 … 次,到達上限 … 次。再過 … 分鐘會空出名額。」
- 跑太久:「這次執行已經超過時間上限 … 秒,已經停止。」
- 一個節點跑太多次:「節點「…」在這次執行中已經跑了 … 次,超過上限,執行已停止。請檢查是不是有停不下來的迴圈。」節點自己設的上限先到時,訊息寫的是「超過這個節點自己設定的上限」。
- 整個執行跑太多步:「這次執行的節點次數已經到達上限 … 次,執行已停止。」後面可能還會寫是哪一個節點跑最多次,最後是「請檢查是不是有停不下來的迴圈。」
哪些執行會算、會被擋
- 只跑一個節點的執行(「執行節點」與「儲存並執行」):不算在任何上限裡,也不會被擋下來。
- 每小時的上限:對話與錯誤工作流的執行會算進去,但不會被它擋下來。其他的執行到了上限,會被擋下來。
- 同時在跑的上限:除了只跑一個節點的執行,每一種執行都可能被它擋下來,對話與錯誤工作流的執行也一樣。
- 停在「等待」,或停在會等待的「執行子工作流」上的執行,不算在同時在跑的數量裡。
- 時間上限是在兩個節點之間檢查的,所以正在跑的那一個節點,會先跑完。
- 有好幾個 AI 步驟的工作流,常常需要比較長的時間上限。
畫面上改不了的上限
- 每一個 Webhook 節點,每分鐘最多接受 60 次呼叫。
- 「Webhook」設成「跑完再回傳資料」時,整個工作流要在 30 秒內跑完。
- 一次 Agent 對話的執行:60 秒。
- 一次 AI 工具的執行:600 秒。
- 子工作流的呼叫鏈:最多 5 層。
- 「等待」最長可以等:7 天。
- 跑完的執行保留:30 天。
- 每一個工作流保留的版本紀錄:最新的 20 筆。
另外還有幾個上限,這裡不寫數字:每一個節點存下來的資料有大小上限;「合併 (Merge)」的「SQL 查詢 (SQL Query)」讀進來和查出來的筆數有上限;「失敗時重試」的「總嘗試次數」與「重試間隔」各有最大值,寫在它們的名稱裡。「移除重複 (Remove Duplicates)」能記住多少個值,由它自己的「最多記幾筆 (History Size)」決定。
錯誤工作流
錯誤工作流,是另一個工作流失敗時,網站自動去跑的工作流,例如用來發通知。
在哪裡設
- 在 ⋯「更多」選單的「工作流設定」,在「失敗時要執行的工作流」選它,再按視窗最下面的「儲存」。沒有選時,它寫著「不指定」。選單下面寫著「這個工作流失敗的時候,會去執行你選的那一個,可以用來發通知。這裡只列出開放給這個工作流的工作流。」
- 選單裡列出的,是「權限」加上了這個工作流,或有「所有工作流」而這個工作流在範圍裡的工作流,不論在哪一個專案;在別的專案的,名字後面寫著那個專案的名稱,私人工作流寫著「(私人)」。正在打開的這一個,以及在垃圾桶裡的工作流,不在裡面。請錯誤工作流的擁有者在它的權限管理加上這個工作流。
- 選了一個「權限」沒有加上這個工作流的工作流,按「儲存」會被擋下:「選到的失敗處理工作流沒有開放給這個工作流,或已經不存在。請重新選一個。」原本存好的選擇沒有改,就不會再檢查一次,所以之後「權限」拿掉了這個工作流,也不會擋下時區的修改。
- 在這個工作流所在的專案有「管理自動化設定」的人,也可以在「整個專案的設定」選「專案預設的失敗處理工作流」。這個選單列出那個專案裡你打得開的工作流,不包括正在打開的這一個;只能選那個專案裡、不在垃圾桶裡的工作流。一個工作流自己有選時,用它自己選的。私人工作流沒有專案預設,只用它自己選的。
- 設定裡寫的是「失敗時」與「失敗處理」,執行紀錄的來源寫的是「錯誤工作流」,說的是同一件事。錯誤工作流的執行,觸發者是執行失敗的那個工作流。
什麼時候會跑
- 錯誤工作流的「權限」要加上失敗的那個工作流,而且不在垃圾桶裡,它才會跑。 不論是工作流自己選的,還是專案預設的,都一樣。沒有加上時,它不會跑,畫面上也不會說。工作流自己選的那一個沒有加上時,不會改用專案預設的。
- 只有一次執行以失敗結束時,它才會跑。按「停止」取消的執行、只跑一個節點的執行,以及錯誤工作流自己的執行,都不會啟動它。在開始之前就被拒絕的執行,例如碰到每小時的上限,雖然在執行紀錄裡記成失敗,也不會啟動它。
- 它從它的「子工作流觸發」開始;沒有的話,從它的第一個觸發節點開始。
- 只有從「子工作流觸發」或「手動觸發」開始時,它才拿得到失敗的細節。 所以每一個錯誤工作流,都請用「子工作流觸發」開始。
- 它拿到一筆項目,欄位有
workflow_id、workflow_name、run_id、node_name(失敗的節點)、message與failed_at。發通知時,可以寫{{ $json.workflow_name }}與{{ $json.message }}。 - 「中止並拋出錯誤」節點的「錯誤訊息」,會放在
message裡傳過來,前面加上「節點「…」執行失敗:」。 - 它的執行,會算在每小時的執行次數裡,但不會被這個上限擋下來。專案同時在跑的執行已經到上限時,它不會跑,畫面上也不會說。
- 它跑不起來時,不會讓別的東西跟著失敗。
- 不論它是「啟用中」還是「未啟用」,都會跑。
例子:失敗時發一則通知
- 建立一個工作流,用「子工作流觸發」開始,後面接一個「HTTP 請求」節點,「HTTP 方法」選 POST,「網址」填聊天服務給你的接收網址(incoming webhook)。
- 打開「傳送請求 Body」,把要送出的文字切成「運算式」,寫
{{ $json.workflow_name }} 失敗了:{{ $json.message }},放在聊天服務要的欄位裡,再按上方列的「儲存」。 - 在通知工作流的 ⋯「更多」選單打開「權限」,在「權限管理」選「工作流」,加上要看著的那一個工作流,再按「儲存」。
- 打開要看著的那一個工作流,在 ⋯「更多」選單的「工作流設定」,把「失敗時要執行的工作流」選成剛才的工作流,再按「儲存」。
- 之後這個工作流的一次執行失敗時,通知工作流就會跑,上面寫的例外除外。