變量與液體

此應用程式中所有動態內容皆採用 Liquid - - 這正是 Shopify 主題所使用的模板語言。您只需撰寫佔位符,應用程式便會在發送時自動填入內容。

命名空間

命名空間 價值從何而來 提供以下版本:
{{ variables.key }} 「Shopify Flow」動作中的「變數 (JSON)」欄位 電子郵件主旨與內文、HTTP URL、標頭與內容
{{ secrets.key }} 「祕密」頁面 同上,另需提供 SMTP 使用者名稱與密碼
{{ shop.name }}, {{ shop.domain }}, {{ shop.email }} 您的商店 電子郵件與 HTTP 動作
{{ language }} 由「Shopify Flow」步驟傳送的語言,否則即為佈局的預設語言 電子郵件主旨、預覽文字及內文 - - 請參閱 以客戶的語言發送電子郵件
{{ unsubscribe_link }}, {{ unsubscribe_url }} 收件者的取消訂閱連結(僅限行銷版面配置) 電子郵件正文;在交易型版面配置中為空 - 詳見下文
{{ flow.key }} Shopify Flow 的原始載荷 僅限 HTTP 請求

編輯器中的「系統變數」卡片會列出各變數的值及其當前內容,點擊其中一項即可複製該值。

從Shopify Flow傳遞變數

在「Shopify Flow」動作中,請在「**變數 (JSON)」**欄位中輸入一個 JSON 物件:

{
  "firstName": "{{ customer.firstName }}",
  "orderNumber": "{{ order.name }}",
  "total": "{{ order.totalPriceSet.shopMoney.amount }}"
}

接著,您可以在版面配置的任何位置引用它們:

Hi {{ variables.firstName }}, your order {{ variables.orderNumber }} is on its way.

鍵值由您自行選擇。您在左側輸入的任何名稱,都將在 variables. 之後被使用,且拼寫與大寫格式必須完全一致。

您無需手動撰寫這段 JSON。每個佈局都有一張**「在 Shopify Flow 中使用」**卡片,其中已備妥可供複製的正確 JSON - - 請參閱 從 Shopify Flow 傳遞資料。

篩選器

標準的 Liquid 過濾器都能正常運作。其中最實用的就是 default,它能防止出現空值:

Hi {{ variables.firstName | default: "there" }}

其餘的表現則如你所料:

{{ variables.productTitle | upcase }}
{{ variables.total | round: 2 }}
{{ variables.note | truncate: 100 }}

當變數顯示為空白時

若即時傳送的程式碼會將任何被引用的變數轉換為 nothing,則該程式碼在「**歷史紀錄」**中會顯示「**空變數」**標籤。開啟該條目時,系統會為其命名,並將兩個不同的問題區分開來:

  • 由 Shopify Flow 傳送,但內容為空 - - 該鍵雖存在於您的 JSON 中,但 Shopify Flow 卻未產生任何值。通常是屬性路徑錯誤,或是該記錄中的欄位確實為空(訪客結帳時不會有客戶名字)。
  • 這根本不是由 Shopify Flow 傳送的 - - 您的 JSON 檔案中完全缺少這把金鑰。

加入 | default: 備用連結,即表示該空白處是刻意為之,應用程式便不會再就此發出警告。

條件語句與迴圈

請使用 HTML / 程式碼區塊來撰寫條件語句:

{% if variables.isVip %}
  <p>As a VIP you get free shipping on this order.</p>
{% else %}
  <p>Spend a little more to unlock free shipping.</p>
{% endif %}

使用「迴圈」積木來重複處理一個陣列,例如訂單明細:

{% for item in variables.items %}
  <tr>
    <td>{{ item.title }}</td>
    <td>{{ item.quantity }}</td>
    <td>{{ item.price }}</td>
  </tr>
{% endfor %}

將 Shopify Flow 中的陣列以 JSON 格式傳遞:

{
  "items": [
    { "title": "Classic White T-Shirt", "quantity": 2, "price": "29.00" },
    { "title": "Eco Water Bottle", "quantity": 1, "price": "19.00" }
  ]
}

若要在建構器中預覽迴圈,請在「**測試變數」**分頁中輸入與該值相同的 JSON 陣列。

物件在電子郵件和 HTTP 中的行為有所不同

這正是唯一值得了解的尖銳邊緣。

  • 在 HTTP 請求中,對物件或陣列進行插值會自動將其序列化為 JSON。例如,{{ variables.records }} 會在請求正文中轉為標準的 JSON 陣列。若您希望明確指定,亦可使用 json 篩選器。
  • 在電子郵件中,並不會進行此類轉換。對整個物件進行插值運算後,會將文字「[object Object]」原樣呈現。

因此,在電子郵件中,請務必直接在主旨欄中輸入內容,而非直接列印:

Wrong:  {{ variables.customer }}
Right:  {{ variables.customer.firstName }} {{ variables.customer.lastName }}

或者,可以對陣列進行迴圈處理,而不是將其整組輸出。

範本中的祕密

以相同的方式引用儲存的密鑰:

Authorization: Bearer {{ secrets.airtableAccessToken }}

請使用確切的語法 {{ secrets.keyName }}。以下語法均無法正常運作:

  • {{ secret.keyName }} - 單數
  • {{ secrets['keyName'] }} - 括號語法

鍵名會區分大小寫。請參閱 秘密。

HTTP 請求的正文覆寫

HTTP 動作的「變數」欄位還有第二種模式。若傳入 body 鍵,它會完全取代已儲存的請求正文:

{
  "body": { "anything": "you like", "shaped": ["however"] }
}

當載荷形狀由先前執行的「Shopify Flow」步驟決定時,此功能便相當實用。唯有一項例外:若您儲存的本體本身引用了「{{ variables.body }}」,則它會被視為一般變數。

測試您所寫的內容

頁面預覽功能不會解析 Liquid - - 它僅會顯示標籤的原始內容。若要查看解析後的值:

  • 若要發送電子郵件,請在版面編輯器中使用「發送測試電子郵件」功能。
  • 對於 HTTP 請求,請使用「測試」按鈕,該按鈕會在顯示回應的同時,一併顯示「解析後的 URL」和「解析後的內容」。

行銷版面中的取消訂閱連結

若版面的「電子郵件類型」設為「行銷」,則會額外增加兩個變數。每封行銷電子郵件的收件者皆擁有專屬的取消訂閱連結,而這些變數會將該連結置於:

  • {{ unsubscribe_link }} 會根據「設定」中的**「取消訂閱」連結文字**(或佈局本身的文字)渲染出一個連結。
  • {{ unsubscribe_url }} 會輸出原始位址,供您自行設定樣式的按鈕或超連結使用。
<p>No longer interested? <a href="{{ unsubscribe_url }}">Unsubscribe here</a>.</p>

您無需使用這些變數:畢竟每封行銷電子郵件的頁尾都會自動附加「取消訂閱」連結。當渲染後的郵件正文已包含該連結時,頁尾便不會顯示「取消訂閱」的文字,僅會附加公司資訊。在主旨和預覽文字中,這兩項變數均不會顯示任何內容;而在交易型郵件的版面配置中,它們始終為空。請參閱 行銷電子郵件與取消訂閱。

相關