Biến trong Shopify Flow
Biến là phần giữ chỗ được thay thế bằng các giá trị khi quy trình làm việc chạy. Những biến này mô tả thuộc tính của khách hàng, đơn hàng và sản phẩm có liên quan đến quy trình làm việc. Ví dụ: Có các biến cho mã đơn hàng, giá đơn hàng, tên khách hàng, v.v.
Flow sử dụng phiên bản Liquid khác so với chủ đề Shopify và có thể truy cập mọi biến có trên API quản trị GraphQL.
Tên của hầu hết các biến đều là tự mô tả. Ví dụ: Biến hiển thị tên sản phẩm là {{ product.title }}
. Khi tin nhắn được gửi đi, biến này sẽ được thay thế bằng tên của sản phẩm đã đặt hàng: Large Coffee Mug
.
Thêm biến vào thao tác
Bạn có thể thêm biến vào bất kỳ trường văn bản nào có chứa liên kết Thêm biến. Nhấp vào liên kết Thêm biến bên dưới trường liên quan, rồi chọn một biến trong danh sách.
Các biến trong danh sách Thêm biến được lọc để bạn chỉ nhìn thấy những biến được dùng cho yếu tố kích hoạt bạn đã chọn. Sau khi bạn chọn một biến trong danh sách, biến này sẽ được định dạng phù hợp và thêm vào hộp văn bản giúp bạn.
Flow hỗ trợ hầu hết các trường API quản trị GraphQL.
Biến Liquid
Nếu bạn là nhà phát triển có kinh nghiệm viết mã Liquid, bạn có thể sử dụng Liquid để viết biến hoặc chỉnh sửa biến mà bạn thêm bằng liên kết Thêm biến. Để tìm hiểu thêm, hãy tham khảo tài liệu tham khảo về API quản trị GraphQL.
Thẻ có điều kiện và thẻ lặp lại
Bạn có thể thêm thủ công thẻ biến Liquid vào tin nhắn về quy trình làm việc. Bạn có thể sử dụng các thẻ này để thêm thông tin vào tin nhắn.
Ví dụ: Bạn có thể sử dụng đối tượng for loop
để lặp lại thông qua danh sách đối tượng, ví dụ các mục hàng trong một đơn hàng. Với những thẻ này, bạn có thể tạo tin nhắn chứa thông tin chi tiết như tiêu đề sản phẩm, SKU, giá và số lượng cho từng mục hàng trong một đơn hàng, và giúp người nhận không phải tra cứu thông tin này trong trang quản trị Shopify của bạn.
Flow hỗ trợ các thẻ có điều kiện (hoặc thẻ điều khiển luồng) sau của Liquid:
- if
- unless
- elsif/else
- case/when
- và/hoặc (nhiều điều kiện)
Flow cũng hỗ trợ các thẻ lặp lại sau của Liquid:
Bộ lọc
Flow hỗ trợ các bộ lọc Liquid sau:
Tên bộ lọc | Loại bộ lọc |
---|---|
abs | Toán học |
append | Chuỗi |
at_least | Toán học |
at_most | Toán học |
capitalize | Chuỗi |
ceil | Toán học |
concat | Mảng |
date | Bổ sung |
mặc định | Bổ sung |
divided_by | Toán học |
downcase | Chuỗi |
escape | Chuỗi |
đầu tiên | Mảng |
floor | Toán học |
join | Mảng |
last | Mảng |
lstrip | Chuỗi |
bản đồ | Mảng |
minus | Toán học |
modulo | Toán học |
newline_to_br | Chuỗi |
biểu tượng dấu cộng | Toán học |
prepend | Chuỗi |
xóa | Chuỗi |
remove_first | Chuỗi |
thay thế | Chuỗi |
replace_first | Chuỗi | reverse | Mảng |
round | Toán học |
rstrip | Chuỗi |
kích cỡ | Mảng |
slice | Chuỗi |
sắp xếp | Mảng |
phân tách | Chuỗi |
strip | Chuỗi |
strip_html | Chuỗi |
strip_newlines | Chuỗi |
times | Toán học |
truncate | Chuỗi |
truncatewords | Chuỗi |
uniq | Mảng |
upcase | Chuỗi |
url_encode | Chuỗi |
where | Mảng |
Ví dụ về biến
Ví dụ: Bạn muốn tạo quy trình làm việc để gửi email cho nhân viên khi khách hàng chi tiêu trên 500 USD cho một đơn hàng. Bạn tạo quy trình làm việc bằng yếu tố kích hoạt Đã tạo đơn hàng, đặt điều kiện là true nếu tổng giá trị đơn hàng trên 500 USD và sử dụng thao tác Gửi email nội bộ. Trong mục Thông báo của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Nhập vào | Thông tin đầu ra |
---|---|
Hãy gửi ghi chú cảm ơn cá nhân cho {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) vì đã đặt hàng có giá trị {{ order.totalPriceSet.shopMoney.amount }} USD. | Hãy gửi ghi chú cảm ơn cá nhân cho Nguyễn Tuyết Mai (tuyetmai@example.com) vì đã đặt đơn hàng có giá trị 763,42 USD. |
Bạn thấy cần thông báo cho nhân viên khi hàng trong kho của sản phẩm sắp hết và cần đặt thêm hàng để lưu kho. Bạn tạo quy trình làm việc bắt đầu bằng yếu tố kích hoạt Đã thay đổi số lượng hàng tồn kho và đặt điều kiện là true nếu số lượng hàng tồn kho trước đó nhỏ hơn hoặc bằng 10. Trong mục Thông báo của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Nhập vào | Thông tin đầu ra |
---|---|
Hãy đặt hàng lại {{ product.title }}. Gửi email đến địa chỉ owner@store.com để xác minh họ đã nhận được đơn đặt hàng. | Hãy đặt hàng lại Quần legging cạp cao - Màu đen. Gửi email đến địa chỉ owner@example.com để xác minh họ đã nhận được đơn đặt hàng. |
Bạn muốn hủy đơn hàng có mức độ rủi ro cao nhưng ưu tiên để nhân viên hủy đơn hàng theo cách thủ công. Bạn tạo quy trình làm việc bắt đầu bằng yếu tố kích hoạt Đã tạo đơn hàng và đặt điều kiện là true nếu mức độ rủi ro của đơn hàng cao. Trong mục Thông báo của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Nhập vào | Thông tin đầu ra |
---|---|
Cửa hàng Shopify của chúng tôi đã nhận được đơn hàng có nguy cơ gian lận cao. Chúng tôi muốn hủy đơn hàng này ngay lập tức trước khi gửi đơn hàng đến bộ phận sản xuất: {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} Vui lòng xác nhận trạng thái đơn hàng mới. Xin cảm ơn! |
Cửa hàng Shopify của chúng tôi đã nhận được đơn hàng có nguy cơ gian lận cao. Chúng tôi muốn hủy đơn hàng này ngay lập tức trước khi gửi đơn hàng đến bộ phận sản xuất: #1001 Nguyễn, Mai tuyetmai@example.com Vui lòng xác nhận trạng thái đơn hàng mới. Xin cảm ơn! |
Ví dụ về vòng lặp for
Khi nhận được đơn hàng, bạn nên gửi tin nhắn chứa các sản phẩm đã được đặt. Bạn có thể gửi tin nhắn bằng cách sử dụng for loop
để thực hiện một khối mã nhiều lần. Các trường văn bản hỗ trợ biến cũng hỗ trợ vòng lặp for và đối tượng forloop.
Ví dụ: Bạn muốn tạo quy trình làm việc trả về danh sách tất cả SKU và số lượng trong đơn hàng. Trong mục Thông báo của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Nhập vào | Thông tin đầu ra |
---|---|
Tóm tắt đơn hàng: {% for a in order.lineItems %} SKU: {{a.sku}} ( {{a.quantity}} ), {% endfor %} |
Tóm tắt đơn hàng: 8987097979 (50) 8877778887 (3) 888998898B (1) |
Bạn quyết định thêm thông tin vào email, bao gồm tên sản phẩm, SKU, giá mỗi mặt hàng và thông tin vận chuyển của khách hàng. Trong mục Thông báo của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Nhập vào | Thông tin đầu ra |
---|---|
Tóm tắt đơn hàng: {% for a in order.lineItems %} Sản phẩm: {{a.title}} SKU: {{a.sku}} Giá (trên mỗi đơn vị): $ {{a.originalUnitPriceSet.shopMoney.amount}} Số lượng: {{a.quantity}} {% endfor %} |
Tóm tắt đơn hàng: Sản phẩm: Quần legging cạp cao - Màu đen SKU: 8987097979 Giá (trên mỗi đơn vị): 8.49 USD Số lượng: 5 Sản phẩm: Tất thể thao - Màu xanh dương SKU: 888998898B Giá (trên mỗi đơn vị): 5,61 USD Số lượng: 2 |
Bạn cần theo dõi các mặt hàng đã bán do nhà cung cấp nào đó cung cấp. Trong mục Thông báo của thao tác Gửi email nội bộ, bạn sử dụng các biến sau và thêm câu lệnh if
vào for loop
.
Nhập vào | Thông tin đầu ra |
---|---|
Sản phẩm đã bán của Acme: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} Tên sản phẩm: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %} |
Sản phẩm đã bán của Acme: Tên sản phẩm: Quần legging cạp cao - Màu đen SKU: 8987097979 |
Đối tượng dữ liệu phức tạp trong Shopify Flow
Shopify Flow không hỗ trợ xuất mảng và đối tượng vì những lý do sau:
- API GraphQL đã ngừng việc không bắt buộc xuất dữ liệu. Điều này có thể tạo kích thước truy vấn lớn khiến quy trình làm việc không thành công.
- Khi ra mắt tính năng mới thì sẽ có thêm các trường API mới. Điều này có thể làm hỏng quy trình làm việc của bạn.
Nếu tự động gửi quá nhiều dữ liệu, quy trình làm việc sẽ không thành công. Thay vì gọi trực tiếp mảng và đối tượng, hãy lặp lại các mảng và chỉ thêm trường bạn muốn.
Ví dụ: Thay vì gọi trực tiếp {{ order.lineItems }}
, hãy sử dụng định dạng sau để gọi các trường cụ thể. Những ví dụ dưới đây bao gồm tất cả các trường được thêm vào khi gọi trực tiếp mảng hoặc đối tượng. Hãy sao chép và dán các trường bạn cần.
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}
{% for ca in li.customAttributes %}
{{ ca.key }}
{{ ca.value }}
{% endfor %}
{% for da in li.discountAllocations %}
{{ da.allocatedAmountSet.presentmentMoney.amount }}
{{ da.allocatedAmountSet.presentmentMoney.currencyCode }}
{{ da.allocatedAmountSet.shopMoney.amount }}
{{ da.allocatedAmountSet.shopMoney.currencyCode }}
{% endfor %}
{{ li.discountedTotalSet.presentmentMoney.amount }}
{{ li.discountedTotalSet.presentmentMoney.currencyCode }}
{{ li.discountedTotalSet.shopMoney.amount }}
{{ li.discountedTotalSet.shopMoney.currencyCode }}
{{ li.discountedUnitPriceSet.presentmentMoney.amount }}
{{ li.discountedUnitPriceSet.presentmentMoney.currencyCode }}
{{ li.discountedUnitPriceSet.shopMoney.amount }}
{{ li.discountedUnitPriceSet.shopMoney.currencyCode }}
{% comment %}li.duties - omitted {% endcomment %}
{{ li.fulfillableQuantity }}
{{ li.fulfillmentService.callbackUrl }}
{{ li.fulfillmentService.fulfillmentOrdersOptIn }}
{{ li.fulfillmentService.handle }}
{{ li.fulfillmentService.id }}
{{ li.fulfillmentService.inventoryManagement }}
{% comment %}rest of location omitted{% endcomment %}
{{ li.fulfillmentService.location.name }}
{{ li.fulfillmentService.productBased }}
{{ li.fulfillmentService.serviceName }}
{% for sm in li.fulfillmentService.shippingMethods %}
{{ sm.code }}
{{ sm.label }}
{% endfor %}
{{ li.fulfillmentService.type }}
{{ li.fulfillmentStatus }}
{{ li.id }}
{{ li.image.altText }}
{{ li.image.height }}
{{ li.image.id }}
{% comment %}li.image.metafield omitted{% endcomment %}
{% comment %}li.image.privateMetafield omitted{% endcomment %}
{{ li.image.width }}
{{ li.merchantEditable }}
{{ li.name }}
{{ li.nonFulfillableQuantity }}
{{ li.originalTotalSet.presentmentMoney.amount }}
{{ li.originalTotalSet.presentmentMoney.currencyCode }}
{{ li.originalTotalSet.shopMoney.amount }}
{{ li.originalTotalSet.shopMoney.currencyCode }}
{{ li.originalUnitPriceSet.presentmentMoney.amount }}
{{ li.originalUnitPriceSet.presentmentMoney.currencyCode }}
{{ li.originalUnitPriceSet.shopMoney.amount }}
{{ li.originalUnitPriceSet.shopMoney.currencyCode }}
{% comment %}rest of product omitted{% endcomment %}
{{ li.product.title }}
{{ li.quantity }}
{{ li.refundableQuantity }}
{{ li.requiresShipping }}
{{ li.restockable }}
{{ li.sellingPlan.name }}
{{ li.sku }}
{% for tl in li.taxLines %}
{{ tl.priceSet.presentmentMoney.amount | json }}
{{ tl.priceSet.presentmentMoney.currencyCode | json }}
{{ tl.priceSet.shopMoney.amount | json }}
{{ tl.priceSet.shopMoney.currencyCode | json }}
{{ tl.rate | json }}
{{ tl.ratePercentage | json }}
{{ tl.title | json }}
{% endfor %}
{{ li.taxable }}
{{ li.title }}
{{ li.totalDiscountSet.presentmentMoney.amount }}
{{ li.totalDiscountSet.presentmentMoney.currencyCode }}
{{ li.totalDiscountSet.shopMoney.amount }}
{{ li.totalDiscountSet.shopMoney.currencyCode }}
{{ li.unfulfilledDiscountedTotalSet.presentmentMoney.amount }}
{{ li.unfulfilledDiscountedTotalSet.presentmentMoney.currencyCode }}
{{ li.unfulfilledDiscountedTotalSet.shopMoney.amount }}
{{ li.unfulfilledDiscountedTotalSet.shopMoney.currencyCode }}
{{ li.unfulfilledOriginalTotalSet.presentmentMoney.amount }}
{{ li.unfulfilledOriginalTotalSet.presentmentMoney.currencyCode }}
{{ li.unfulfilledOriginalTotalSet.shopMoney.amount }}
{{ li.unfulfilledOriginalTotalSet.shopMoney.currencyCode }}
{{ li.unfulfilledQuantity }}
{% comment %}rest of variant omitted{% endcomment %}
{{ li.variant.title }}
{{ li.variantTitle }}
{{ li.vendor }}
{% endfor %}
{
"lineItems": [
{% for li in order.lineItems %}
{% if forloop.first != true %},{% endif %}
{
"contract": {
{% comment %}rest of contract omitted{% endcomment %}
"id": {{ li.contract.id | json }}
},
"customAttributes": [
{% for ca in li.customAttributes %}
{% if forloop.first != true %},{% endif %}
{
"key":{{ ca.key | json }},
"value":{{ ca.value | json }}
}
{% endfor %}
],
"discountAllocations": [
{% for da in li.discountAllocations %}
{% if forloop.first != true %},{% endif %}
"allocatedAmountSet": {
"presentmentMoney" : {
"amount": {{ da.allocatedAmountSet.presentmentMoney.amount | json }},
"currencyCode": {{ da.allocatedAmountSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ da.allocatedAmountSet.shopMoney.amount | json }},
"currencyCode": {{ da.allocatedAmountSet.shopMoney.currencyCode | json }}
}
}
{% endfor %}
],
"discountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li.discountedTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.discountedTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.discountedTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.discountedTotalSet.shopMoney.currencyCode | json }}
}
},
"discountedUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li.discountedUnitPriceSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.discountedUnitPriceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.discountedUnitPriceSet.shopMoney.amount | json }},
"currencyCode": {{ li.discountedUnitPriceSet.shopMoney.currencyCode | json }}
}
},
"duties": [
{% for duty li.duties %}
{% if forloop.first != true %},{% endif %}
{
{% comment %}rest of duties omitted{% endcomment %}
"id": {{ duty.id | json }}
}
{% endfor %}
],
"fulfillableQuantity": {{ li.fulfillableQuantity | json }},
"fulfillmentService": {
"callbackUrl":{{ li.fulfillmentService.callbackUrl | json }},
"fulfillmentOrdersOptIn": {{ li.fulfillmentService.fulfillmentOrdersOptIn | json }},
"handle": {{ li.fulfillmentService.handle | json }},
"id": {{ li.fulfillmentService.id | json }},
"inventoryManagement": {{ li.fulfillmentService.inventoryManagement | json }},
{% comment %}fulfillmentService.inventoryManagement - omitted {% endcomment %}
"productBased": {{ li.fulfillmentService.productBased | json }},
"serviceName": {{ li.fulfillmentService.serviceName | json }},
"shippingMethods": [
{% for sm in li.fulfillmentService.shippingMethods %}
{% if forloop.first != true %},{% endif %}
{
"code": {{ sm.code | json }},
"label": {{ sm.label | json }}
}
{% endfor %}
],
"type": {{ li.fulfillmentService.type | json }}
},
"fulfillmentStatus": {{ li.fulfillmentStatus | json }},
"id": {{ li.id | json }},
"image": {
"altText": {{ li.image.altText | json }},
"height": {{ li.image.height | json }},
"id": {{ li.image.id | json }},
{% comment %}li.image.metafield omitted{% endcomment %}
{% comment %}li.image.privateMetafield omitted{% endcomment %}
"width":{{ li.image.width | json }}
},
"merchantEditable": {{ li.merchantEditable | json }},
"name": {{ li.name | json }},
"nonFulfillableQuantity": {{ li.nonFulfillableQuantity | json }},
"originalTotalSet": {
"presentmentMoney" : {
"amount": {{ li.originalTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.originalTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.originalTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.originalTotalSet.shopMoney.currencyCode | json }}
}
},
"originalUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li.originalUnitPriceSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.originalUnitPriceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.originalUnitPriceSet.shopMoney.amount | json }},
"currencyCode": {{ li.originalUnitPriceSet.shopMoney.currencyCode | json }}
}
},
"product": {
{% comment %}rest of Product omitted{% endcomment %}
"title": {{ li.product.title | json }}
},
"quantity": {{ li.quantity | json }},
"refundableQuantity": {{ li.refundableQuantity | json }},
"requiresShipping": {{ li.requiresShipping | json }},
"restockable": {{ li.restockable | json }},
"sellingPlan": {
"name": {{ li.sellingPlan.name | json }}
},
"sku": {{ li.sku | json }},
"taxLines": [
{% for tl in li.taxLines %}
{% if forloop.first != true %},{% endif %}
{
"priceSet": {
"presentmentMoney" : {
"amount": {{ tl.priceSet.presentmentMoney.amount | json }},
"currencyCode": {{ tl.priceSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ tl.priceSet.shopMoney.amount | json }},
"currencyCode": {{ tl.priceSet.shopMoney.currencyCode | json }}
}
},
"rate": {{ tl.rate | json }},
"ratePercentage": {{ tl.ratePercentage | json }},
"title": {{ tl.title | json }}
}
{% endfor %}
],
"taxable":{{ li.taxable | json }},
"title":{{ li.title | json }},
"totalDiscountSet": {
"presentmentMoney" : {
"amount": {{ li.totalDiscountSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.totalDiscountSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.totalDiscountSet.shopMoney.amount | json }},
"currencyCode": {{ li.totalDiscountSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledDiscountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li.unfulfilledDiscountedTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.unfulfilledDiscountedTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.unfulfilledDiscountedTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.unfulfilledDiscountedTotalSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledOriginalTotalSet": {
"presentmentMoney" : {
"amount": {{ li.unfulfilledOriginalTotalSet.presentmentMoney.amount | json }},
"currencyCode": {{ li.unfulfilledOriginalTotalSet.presentmentMoney.currencyCode | json }}
},
"shopMoney": {
"amount": {{ li.unfulfilledOriginalTotalSet.shopMoney.amount | json }},
"currencyCode": {{ li.unfulfilledOriginalTotalSet.shopMoney.currencyCode | json }}
}
},
"unfulfilledQuantity": {{ li.unfulfilledQuantity | json }},
"variant": {
{% comment %}rest of variant omitted {% endcomment %}
"title": {{ li.variant.title | json }}
},
"variantTitle": {{ li.variantTitle | json }},
"vendor": {{ li.vendor | json }}
}
{% endfor %}
]
}