對 Flow 錯誤和使用限制進行疑難排解
本文件將說明常見錯誤和限制,以及其發生原因和解決的方法。您可能會在 Flow 中遇到兩種類型的錯誤:永久性錯誤和暫時性錯誤。
編輯工作流程時發生錯誤
編輯工作流程時,可能會遇到無法儲存工作流程的錯誤。下列為編輯工作流程時可能會遇到的常見錯誤:
找不到資料
在工作流程中加入新動作時,可能會看到 Data not found
的錯誤訊息,例如:Customer data not found
。找不到此操作所需的資料時,便會出現此錯誤。例如,若您是新增一個需要商品 ID 的動作,則這個錯誤表示您的工作流程尚未提供可用的商品。
通常這些資料是由觸發條件或由「取得資料」(Get data) 動作所提供。如果使用「取得資料」(Get data) 動作,常見問題是動作需要單一項目 (顧客),但動作提供的是一份清單 (顧客清單)。若要呼叫該動作,您必須新增「每一個」(For each) 動作以循環查看清單,並為清單中的每個項目呼叫該動作。
若要查看觸發條件資料的相關問題,請參閱動作的說明文件,以瞭解可提供正確資料的觸發條件。
執行工作流程時發生錯誤
執行工作流程時若遇到錯誤,則系統會將工作流程執行作業標記為「失敗」。執行工作流程的詳細資訊中會顯示錯誤訊息。下列為工作流程執行失敗時可能會遇到的常見錯誤:
暫時性錯誤
暫時性錯誤是指當 Flow 無法完成任務而發生的臨時錯誤。這些錯誤在順利完成或達到逾時限制前,系統會不斷重試。例如,如果 Flow 在執行連接工具的動作時無法聯絡上合作夥伴,則 Flow 會多次重試此任務,然後才會停止。
重試是分散的,後續每次嘗試之間的延遲時間會比前一次的延遲時間更長。通常在工作流程遇到暫時性錯誤時,其會因重試任務而長時間保持在「執行」狀態。
重試任務並順利完成後,工作流程將繼續進行;如果重試任務遭遇永久性錯誤,則工作流程失敗。每個工作流程區段的總執行時間上限為 36 小時。如果含有暫時性錯誤的步驟在達到該限制前無法順利完成,工作流程即為失敗。
具有等待步驟的工作流程會分為多個區段,這會影響工作流程中超時限制的計算方式,而每個區段都是一組共同執行的任務,而每個區段都有各自的 36 小時執行上限。舉例來說,如果工作流程具有一個等待時間為一個小時的等候步驟,則該等待步驟之前的任務將在同一區段中同時執行,而等待步驟之後的任務將在其他區段中同時執行。如果工作流程具有多個等待步驟,則每個等待步驟間的任務將在同一區段中同時執行,不具等待步驟的工作流程會視為一個區段。
偶爾會出現一些暫時性錯誤,但如果您的工作流程在多次執行中不斷出現相同的暫時性錯誤,則您可能需要重新設定工作流程。
步驟逾時
Step timed out
錯誤通常會在工作流程的某個任務嘗試在同一區段查詢過多資料時發生。錯誤經常出現在重複查看太龐大的清單 (尤其是巢狀清單),而無法及時擷取資料的工作流程中。
若工作流程發生此錯誤,觸發條件或等待步驟會顯示為 retrying
。
要解決此問題,請檢查存取清單和巢狀清單的所有條件,以確保它們正確無誤。其中一個常見問題是條件會檢查商店中的所有商品,而不是只檢查訂單中的商品。
5xx 狀態
大部分的 Flow 動作會包含進行 HTTP 呼叫。有時,網路或其他伺服器問題可能會導致 HTTP 呼叫失敗,並傳回 500 到 599 之間的錯誤代碼。若僅看到發生這個錯誤一次無需擔心,但重複發生的話,可能表示處理任務的伺服器存在問題,而非設定步驟的方式。
此種類型的錯誤在「傳送 HTTP 要求」的動作中最常出現,但也可能發生在多數任務中。
GraphQL Throttled (GraphQL 已調節)
工作流程所完成的總工作量會受限於 API 速率限制,這些限制會依您的方案而定。正常情況下,除非工作流程很複雜或出現意外設計錯誤,否則不會達到這些限制。下列為可能導致此錯誤的情境範例:
- Liquid 或工作流程中的條件會迴圈執行包含大量資料的清單,例如檢查包含 HTML 的中繼欄位值。
- Liquid 或工作流中的條件會迴圈執行大型清單,例如對大型商店的
shop.orders
反覆執行迴圈。 - 工作流程會導致無限迴圈,而工作流程會不斷建立新工作流程執行作業。舉例來說,如果工作流程使用「顧客標籤已新增」觸發條件,並包含「新增顧客標籤」動作,則可能會發生這種情況。
如果達到限制,則您會收到 GraphQL throttled
錯誤。其他工作流嘗試執行時,可能會受此錯誤影響;因此如果發生此錯誤,應立即解決。
永久性錯誤
永久性錯誤是指當 Flow 無法完成任務,且無法重試任務時所發生的錯誤。例如,如果 Flow 由於電子郵件地址無效而無法寄送電子郵件,則不會重試任務。相反地,該工作流程即視為失敗。
欄位:ID 是必填欄位,但為空白
大多數 Shopify 動作都需要一項或多項資源才能執行,例如商品、顧客或訂單。有時沒有可供使用的資源,動作便無法如預期執行,例如在管理介面中建立沒有顧客的訂單。若您嘗試執行「新增顧客標籤」(Add customer tags) 之類的動作,則動作會失敗並出現此錯誤。
為防止出現錯誤,建議您在動作之前新增條件,以檢查資源是否存在。在前述範例中,若您想在與「新增顧客標籤」(Add customer tags) 相同的工作流程中寄送內部電子郵件,請將該動作放在可能失敗的步驟之前,或是執行以下其中一個動作。
將動作放在並行分支中 (其中兩個或多個分支來自一個步驟)
在動作之前新增條件,以檢查顧客是否存在。例如,您可以檢查 order / customer / id is not empty and exists
。
Flow 沒有您 Google 試算表帳戶的權限,請重新連結您的帳號。
Google 試算表連接工具 要求您將 Google 帳戶連結到 Flow,才會具有將內容寫入試算表的權限。這種錯誤可能會在 Flow 不具將內容寫入試算表的權限時發生,原因可能是帳戶未與 Flow 中連結,或帳戶不具該試算表的存取權限。
要解決此問題,請確保用於連接工具的帳號具有開啟表格及編輯存取的權限。如果連結了錯誤的帳號,您可以取消連結並重新連結新帳號。
步驟:
- 開啟或建立新的工作流程。
- 新增動作。
- 選取 Google 試算表連接工具。
- 點擊「取消連結」,然後點擊「連結」。
收到的 Flow 動作含有無效屬性,顧客不接受行銷。
「傳送行銷電子郵件」動作不會向未同意接收的顧客傳送電子郵件,如果工作流程嘗試這樣做,則動作將永久失敗。
若要解決此問題,請在工作流程中新增會檢查顧客訂閱狀態的條件。傳送行銷電子郵件之前,您可以確保顧客已同意接收這些電子郵件。請依照電子郵件訂閱者名單管理中的步驟進行操作。
遺漏 [資源類型] 的資源
此錯誤表示有一項資源 (如 customer
或 order
) 在工作流程可以擷取其資料前已遭刪除。這種情況通常發生在等待步驟之後,但如果資源在觸發事件發生後很快遭到刪除,則這種情況也可能發生在觸發條件上。
發生錯誤時收到通知
若發生錯誤會影響您的商店營運,建議您設定錯誤通知。錯誤通知的設定方式就和使用「工作流程發生錯誤」(Workflow error occurred) 觸發條件的任何其他工作流程一樣。錯誤通知旨在限制干擾,因此每個工作流程版本只會收到一個通知。
若要開始設定,可以使用以下其中一個範本:
重試執行
在某些情況下,執行工作流程可能會發生錯誤或未如預期執行。排解和修正相關工作流程中的問題後,便可手動重試過往的執行作業,以追溯並修正先前的執行結果。深入瞭解如何重試執行工作流程。
執行中 (速率受限)
在某些情況下,工作流程可能會使用過多的資源,為防止此現象造成問題,Flow 會刻意限制商店中執行的運行作業,如此可能會導致延遲和逾時錯誤。建議您重新編寫低效率的工作流程來解決此問題,這麼做通常可修正未按預期運作的錯誤。
執行太久
此訊息表示工作流程執行需要很長的時間來運作。常見的原因是工作流程使用大量資料,導致 Flow 需要花費許多時間來擷取。
範例
這些情況的常見原因是經過多個品項清單的深度要求路徑 (例如對商品所屬的全部商品系列中的全部商品要求所有中繼欄位): 通常也與工作流程逾時的觸發步驟相關。
循環使用所有中繼欄位的工作流程通常可藉由僅使用特定中繼欄位來改進。存取多個巢狀清單 (例如某件商品的所有商品系列中的所有商品) 或特別大型的清單 (例如中繼欄位定義,其中包含所有物件的所有中繼欄位) 可能都是無意中完成的,而選取正確的欄位 (單一商品或某物件上的單一中繼欄位) 可能會顯著提高效率。在其他情況下,使用具有查詢篩選條件的「取得商品/訂單/顧客資料」(Get Product/Order/Customer Data) 動作可顯著減少所使用的物件數量,但仍可存取相關物件。
處理太多資料
此訊息表示工作流程執行產生了大量的資料。常見的原因是存在檢查大量欄位的複雜條件,通常是由於檢查多層級清單上的欄位所造成。
範例
例如,如果條件 (如「此顧客的至少一個標籤、至少一件訂單商品項目、商品項目的至少一個標籤」等) 可能會導致執行多次檢查,並產生大量資料來顯示這些檢查的結果:
自動重試失敗
此訊息表示由於某些暫時性問題導致工作流程的執行反覆失敗,但在後續重試中並不常成功。若 Shopify Admin API 或合作夥伴的應用程式遇到大量要求,經常會發生這種情況。