Shopify Flow 中的條件

在 Shopify Flow 中,條件會用來決定工作流程中應遵循的路徑,通常是控制是否執行動作。您設定條件時,會選擇要檢查的資料欄位 (例如商品名稱)、邏輯運算子 (例如 equal to),還有檢查的值 (Blue jeans)。

條件範例

檢查清單中是否至少有一個項目與條件相符

此範例顯示的典型條件,會檢查清單中是否至少有一個項目與特定值相符。

在本案例中,條件會檢查訂單中是否有任一商品具有 presale 標籤。若要建立此條件,您可以選擇 order / lineItems / product / tags。依預設,Flow 會選擇「至少一項」(at least one of) 作為邏輯運算子:

If at least one of order / lineItems:
  If at least one of lineItem_item / product / tags
    tags_item
    is equal to
    presale

至少一項」(at least one of) 部分是清單運算子,用於處理多個清單項目之間的比對。「等於零」(is equal to) 部分則是欄位層級運算子,能確定某一個清單項目是否相符。

檢查清單中的項目是否都與條件不符

此範例顯示的典型條件,會檢查清單中的項目是否都與特定值不符。但有個需要考慮的常見問題,即清單可能是空的。若是空白清單,條件將由清單運算子處理 (在本案例中是「」(none of))。

在本案例中,條件會檢查商品標籤是否都不等於 foo:

If none of product / tags:
  tag_item
  is equal to
  foo

如果 (1) 沒有商品標籤或 (2) 標籤都不是 foo,則條件會傳回 true,否則會傳回 false

檢查清單中的項目是否與多個條件相符

此範例顯示的典型條件,會檢查清單中是否至少有一個項目符合兩個不同的條件。

在本案例中,條件會檢查訂單中是否有任一商品具有 presale 標籤,且 productType 為 clothing

If at least one of order / lineItems:
  If at least one of lineItem_item / product / tags
    tags_item
    is equal to
    presale
  AND
  If lineItem_item / product
    productType
    is equal to
    clothing

若要建立此條件,您應該執行下列步驟:

  1. 為第一個條件選擇 order / lineItems / product / tags
  2. 選擇在 lineItems 清單中為相同項目新增條件。備註:在此處選擇不正確的清單項目是常見錯誤。
  3. 選擇 lineItems_item 作為最上層物件,然後為第二個條件選擇 product / productType。備註:在此處選擇不正確的物件也是常見的錯誤。
  4. 選擇 AND 以合併這兩個條件。
  5. 為兩個條件輸入 presaleclothing 值。

Flow 使用的資料類型

Flow 條件的第一個值都是從商店中擷取來的資料,且是從 GraphQL 管理員 API擷取而來。

Flow 支援以下類型的資料:

  • 浮點數:浮點數值是帶有小數的數字。例如:4.25。
  • 整數:整數值是整數,沒有小數。例如:42。
  • 日期:日期值是日期的數值表示形式。例如:01012021。
  • 字串:字串值為文字。使用字串值進行比較時不區分大小寫。
  • 布林值:布林值為 true 或 false。
  • Enum:Enum 值是一組資料,允許變數為一組預先定義的恒數值。

邏輯運算子

邏輯運算子定義條件的使用方式。條件可以檢查簡單的屬性,例如訂單總數是否超過特定金額,或顧客是否接受行銷。邏輯運算子也可以檢查更複雜的屬性。

運算子可以是欄位層級運算子 (例如「等於」(equal to) 或「不等於」(not equal to)),也可以是清單運算子 (例如「至少一項」(at least one of) 或「」(none of))。

欄位層級運算子

欄位層級運算子是用來比較兩個值。Flow 可以使用下列運算子:

等於 (equal to)

等於」(equal to) 可將值互相比較,以檢查是否相同。在下列範例中,系統從您的商店資料中擷取 order.currentTotalDiscountsSet.shopMoney.amount 的值,並與第二個值 50 進行比較。

工作流程範例:使用「等於」邏輯運算子,在擷取資料等於 50 時取消訂單。

如果第一個值等於 50,則條件為 true。該訂單已取消。

不等於 (not equal to)

不等於」(not equal to) 可將值互相比較,以檢查是否不相同。在下列範例中,系統從您的商店資料中擷取 order.currentTotalDiscountsSet.shopMoney.amount 的值,並與第二個值 50 進行比較。

工作流程範例:使用「不等於」邏輯運算子,在擷取資料不等於 50 時取消訂單。

如果第一個值等於 93,則條件為 true。該訂單已取消。

大於 (greater than)、大於或等於 (greater than or equal to)

大於」(greater than) 以及「大於或等於」(greater than or equal to) 會將值相互比較,以檢查第一個值是否大於第二個值,或是大於或等於第二個值。在下列範例中,系統從您的商店資料中擷取 order.currentTotalDiscountsSet.shopMoney.amount 的值,並與第二個值 50 進行比較。

工作流程範例:使用「大於」邏輯運算子,在擷取資料大於 50 時取消訂單。

如果您商店中的值為 137,則條件為 true,因為 137 大於 50。該訂單已取消。

小於 (less than)、小於或等於 (less than or equal to)

小於」(less than) 以及「小於或等於」(less than or equal to) 會將值相互比較,以檢查第一個值是否小於第二個值,或是小於或等於第二個值。在下列範例中,系統從您的商店資料中擷取 order.currentTotalDiscountsSet.shopMoney.amount 的值,並與第二個值 50 進行比較。

工作流程範例:使用「小於或等於」邏輯運算子,在擷取資料小於或等於 50 時取消訂單。

如果您商店的值為 47,則條件為 true,因為 47 小於或等於 50。訂單已取消。

至少一項 (At least one of)

至少一項」(At least one of) 運算子會檢查該欄位是否等於所提供清單中的任何值。要檢查的值必須個別輸入,然後按下 Enter 鍵 (類似於標籤)。在空白陣列中使用「至少一項」(At least one of) 會導致評估結果為 false。在下列範例中,系統會從您的商店資料中擷取 order.lineitem.product.title 的值,並和以下第二組的值進行比較:pineapple、guava、kiwi。

工作流程範例:使用「至少一項」(At least one of) 邏輯運算子,在擷取資料含有「pineapple」、「guava」或「kiwi」時取消訂單。

如果您商店中的值為「guava」,則條件為 true,因為「guava」包含在「pineapple」、「guava」、「kiwi」陣列中。訂單已取消。

非任一 (not any of)

非任一」(not any of) 運算子會檢查該欄位是否不等於所提供清單中的任何值。要檢查的值必須個別輸入,然後按下 Enter 鍵 (類似於標籤)。在下列範例中,系統會從您的商店資料中擷取 order.lineitem.product.title 的值,並和以下第二組的值進行比較:pineapple、guava、kiwi。

工作流程範例:使用「非任一」邏輯運算子,在擷取資料不包含「pineapple」、「guava」、或「kiwi」時取消訂單。

如果您商店中的值為「raspberry」,則條件為 true,因為「raspberry」不包含在「pineapple」、「guava」、「kiwi」陣列中。系統已取消訂單。

包含 (includes)

包含」(includes) 會將值相互比較,以檢查所有第一個輸入值是否包含第二個輸入值的資料。在下列範例中,系統從您的商店資料中擷取 order.lineitem.product.title 的值,並與第二個值「scrape」進行比較。

工作流程範例:使用「含有」邏輯運算子,在擷取資料含有字串「scrape」時取消訂單。

如果商店資料擷取的值是「skyscraper」,則條件為 true,因為字串「scrape」包含在「skyscraper」字串中。訂單已取消。

不包含 (does not include)

不包含」(does not include) 會將值相互比較,以檢查所有第一個輸入值是否不包含第二個輸入值的資料。在下列範例中,系統從您的商店資料中擷取 order.lineitem.product.title 的值,並與第二個值「scrape」進行比較。

工作流程範例:使用「不包含」邏輯運算子,在擷取資料不包含字串「scrape」時取消訂單。

如果商店資料擷取的值是「scrap-metal」,則條件為 true,因為字串「scrape」未包含在「scrap-metal」字串中。系統已取消訂單。

開頭為 (starts with)

開頭為」(starts with) 會將值相互比較,以檢查第一個值的開頭是否為第二個值的資料。在下列範例中,系統從您的商店資料中擷取 order.shippingAddress.country 的值,並與第二個值「United」進行比較。

工作流程範例:使用「開頭為」(starts with) 邏輯運算子,在擷取資料以字串「United」為首時取消訂單。

如果您商店中的值為「United Kingdom」,則條件為 true,因為字串「United」為「United Kingdom」的開頭。訂單已取消。

開頭不是 (does not start with)

開頭不是」(does not start with) 會將值相互比較,以檢查第一個值的開頭是否不是第二個值的資料。在下列範例中,系統從您的商店資料中擷取 order.shippingAddress.country 的值,並與第二個值「United」進行比較。

工作流程範例:使用「開頭不是」邏輯運算子,在擷取資料字串的開頭不是「United」時取消訂單。

如果您商店中的值為「Canada」,則條件為 true,因為字串「Canada」不會啟動字串「United」。訂單已取消。

結尾為 (ends with)

結尾為」(ends with) 會將值相互比較,以檢查第一個值的結尾是否為第二個值的資料。在下列範例中,系統從您的商店資料中擷取 order.lineitems.product.title 的值,並與第二個值「last-available」進行比較。

工作流程範例:使用「結尾為」邏輯運算子,在擷取資料字串的結尾為「last-available」時取消訂單。

如果您商店的值為「athletic socks last-available」,則條件為 true,因為「athletic socks last-available」字串的結尾為「last-available」。系統已取消訂單。

結尾不是 (does not end with)

結尾不是」(does not end with) 會將值相互比較,以檢查第一個值的結尾是否不是第二個值的資料。在下列範例中,系統從您的商店資料中擷取 order.lineitems.product.title 的值,並與第二個值「last-available」進行比較。

工作流程範例:使用「結尾不是」邏輯運算子,在擷取資料字串的結尾不是「last-available」時取消訂單。

如果您商店中的值是「athletic socks new」(新的運動襪),則條件為 True,因為「athletic socks new」字串的結尾不是「last-available」。系統已取消訂單。

Null 或空白運算子

空白或不存在 (empty or does not exist)

資料中的某些欄位可能為空白。例如,在未取消訂單時,order.cancelReason 會傳回 null。如果您要在欄位為空白或 null 時傳回 true,並在欄位存在時傳回 false,請使用「空白或不存在」(empty or does not exist)。

非空白且存在 (not empty and exists)

資料中的某些欄位可能為空白。例如,在未取消訂單時,order.cancelReason 會傳回 null。如果您要在欄位為非空白時傳回 true,並在欄位空白時傳回 false,請使用「非空白且存在」(not empty and exists)。

清單運算子

將清單運算子與欄位層級運算子結合在一起,能允許您對清單中包含的資料檢查條件。

「至少一項」(at least one) 範例一樣,您可能想檢查訂單是否包含具有特定標籤 (order.lineItems.product.tags 下的清單) 的特定商品 (位於 order.lineItems)。在這兩個案例中,範例都使用「至少一項」(at least one of) 清單運算子。

Flow 提供了 3 個處理清單的運算子:至少一項 (At least one of)、 (None of)、全部 (All of)。

至少一項 (At least one of)

大多數包含清單的條件會使用「至少一項」(At least one of)。如果清單中的任何項目符合條件,這個運算子會傳回 true。例如,如果您想檢查訂單是否包含具有特定標籤的商品,不妨使用「至少一項」(At least one of)。當清單為空白或是不符合條件時,條件會傳回 false

在某些情況下,您可能會想檢查清單是否不包含某個項目。建立這個條件的最好方法就是將清單運算子變更為「」(None of)。如果清單中的項目都不符合條件,這個運算子會傳回 true。且很重要的一點是,清單為空白時也會傳回 true。例如,如果若您想檢查商品是否不包含標籤 presale,不妨使用 None of product tags is equal to presale

全部

在少數情況下,您或許想檢查清單中的所有項目是否都符合條件。舉例來說,假設您想檢查訂單中的所有品項是否都有名為 Acme 的特定商品廠商,此時可使用 All of order line items have a product.vendor equal to Acme

條件排列順序

您可以建立包含多個條件的工作流程,每項條件都能導致不同的動作。條件的排列順序很重要。系統會在工作流程開始時進行條件檢查,並有系統地檢查各個條件,並於滿足條件時停止檢查。

將多個條件準則合併到一個條件

建立條件時,您可以設定數個條件準則,並選擇合併個別準則的方式。

若符合所有條件 (if any conditions are met)

如果您選取「若符合所有條件」(if any conditions are met),則設定的所有條件皆為 true 的時候,系統才會以 true 回應結果。這就像程式設計中的 AND 陳述式。

舉例來說,您建立工作流程以標註位於加拿大、且單一訂單消費超過 $500 美元的顧客。

工作流程範例:使用「以及」條件

只有在顧客位於加拿大且訂單消費超過 $500 美元時,工作流程才能標記顧客。如果上述任一條件為 false,則系統不會標記顧客。

若符合任何條件 (if any conditions are met)

若您選取「若符合任何條件」(If any conditions are met),則設定的任何條件為 true 的時候,系統即會以 true 回應結果。這就像程式設計中的 OR 陳述式。

舉例來說,您建立工作流程以標註視為高風險或中等風險的訂單。

使用「或」條件的工作流程範例

如果訂單為高風險或中等風險,工作流程會標註該訂單。只要其中一項條件為 true,系統即會標註該訂單。

組合條件與動作

您可以將條件組合在一起,形成一個更大的條件。當多個條件組合在一起時,所有條件都必須滿足,才能使整個條件成立。如果有任何條件未能滿足,則整個條件都無法成立。在下列範例中,顧客必須接受行銷資料,且訂單總金額必須超過 $1000 美元。

工作流程範例:檢查顧客總支出金額,並新增標籤

同樣地,您也可以合併數個動作以便同時執行。此範例根據顧客在商店中消費的總金額,使用多項條件檢查顧客是否符合加入忠實顧客計畫的資格。在上述範例中,系統是依下列條件的顯示順序來進行檢查:

  1. 如果訂單總金額超過 1000 美元,且顧客同意接受行銷活動,即使用「金級」標籤來標記顧客。
  2. 如果訂單總金額低於 1000 美元但超過 500 美元,且顧客同意接受行銷活動,即使用「銀級」標籤來標記顧客。
  3. 如果顧客的消費金額超過 200 美元,且同意接受行銷行動,即使用「銅級」標籤來標記顧客。

條件的靜態和動態資料

條件的第二個值通常是靜態的手動輸入值 (例如 product.title == "your title")。每次執行工作流程時,此值皆保持不變。

如果第二個值的欄位顯示 </> 符號,您也可以使用動態值。每次執行工作流程時,都會從商店資料中擷取動態值。若要使用動態值,請點擊 </> 符號,然後選取要檢查的值。動態值無法用於所有欄位。

舉例來說,您建立一個工作流程,如果訂單的帳單地址國家/地區與運送地址的國家/地區相符時,系統就會標註訂單。

工作流程範例:使用 RHS 資料來標註訂單,以檢查顧客的帳單和運送國家/地區是否相同。

在此範例中,第一個值和第二個值都是從商店資料中擷取而來,而非手動指定檢查第二個值的靜態字串。如果顧客的帳單地址中的國家/地區與顧客運送地址中的國家/地區相同,則條件為 true,系統會標註訂單。

您偶爾可能需要使用類型錯誤的動態資料。舉例來說,您可能需要將儲存為字串的數字與其他數字進行比較。在這種情況下,不妨使用「執行程式碼」(Run code) 選項將資料轉換為正確的類型。

準備好開始透過 Shopify 銷售商品了嗎?

免費試用