Zmienne w Shopify Flow
Zmienne to symbole zastępcze, które są zastępowane wartościami po uruchomieniu workfow. Zmienne te opisują atrybuty klientów, zamówień i produktów, które są ujęte w workflow. Istnieją na przykład zmienne dla numeru zamówienia, ceny zamówienia, nazwy klienta itd.
Aplikacja Flow używa innej wersji języka Liquid niż szablony Shopify i może uzyskać dostęp do dowolnej zmiennej dostępnej za pośrednictwem interfejsu API panelu administracyjnego GraphQL.
Nazwy większości zmiennych są same w sobie opisem. Przykładem zmiennej, która wyświetla nazwę produktu jest {{ product.title }}
. Po wysłaniu wiadomości zmienna ta jest zastępowana nazwą zamówionego produktu: Large Coffee Mug
.
Dodawanie zmiennych do czynności
Możesz dodać zmienne do dowolnego pola tekstowego zawierającego link Dodaj zmienną. Kliknij link Dodaj zmienną poniżej odpowiedniego pola, a następnie wybierz zmienną z listy.
Zmienne szablonu na liście Dodaj zmienną są filtrowane, dzięki czemu widoczne są tylko zmienne, które mają zastosowanie do wybranego wyzwalacza. Po wybraniu zmiennej z listy jest ona poprawnie formatowana i dodawana do pola tekstowego.
Flow obsługuje prawie wszystkie pola API panelu administracyjnego GraphQL.
Zmienne Liquid
Jeśli jesteś programistą z doświadczeniem w pisaniu kodu Liquid, możesz użyć tego kodu do napisania zmiennych lub edycji zmiennych wstawianych za pomocą linku Dodaj zmienną. Aby dowiedzieć się więcej, zapoznaj się z informacjami dotyczącymi interfejsu API panelu administracyjnego GraphQL.
Tagi warunkowe i tagi iteracji
Możesz ręcznie dodawać tagi zmiennych Liquid do wiadomości workflow. Możesz używać tych tagów w celu uwzględnienia większej liczby informacji w wiadomościach.
Możesz na przykład użyć obiektu for loop
do iteracji w liście obiektów takich jak pozycje dla zamówienia. Za pomocą tych tagów można tworzyć wiadomości zawierające szczegóły, takie jak tytuł produktu, SKU, cena i ilość dla każdej pozycji w zamówieniu, dzięki czemu odbiorcy nie będą musieli szukać tych informacji w panelu administracyjnym Shopify.
Aplikacja Flow obsługuje następujące tagi warunkowe (lub przepływu sterowania) Liquid:
- if
- unless
- elsif/else
- case/when
- and/or (wiele warunków)
Flow obsługuje również następujące tagi iteracji Liquid:
Filtry
Flow obsługuje następujące filtry Liquid:
Nazwa filtra | Typ filtra |
---|---|
abs | Math |
append | Ciąg znaków |
at_least | Math |
at_most | Math |
capitalize | Ciąg znaków |
ceil | Math |
concat | Array |
date | Dodatkowe |
default | Dodatkowe |
divided_by | Math |
downcase | Ciąg znaków |
escape | Ciąg znaków |
first | Array |
floor | Math |
join | Array |
last | Array |
lstrip | Ciąg znaków |
map | Array |
minus | Math |
modulo | Math |
newline_to_br | Ciąg znaków |
plus | Math |
prepend | Ciąg znaków |
usuń | Ciąg znaków |
remove_first | Ciąg znaków |
zastąp | Ciąg znaków |
replace_first | Ciąg znaków | reverse | Array |
round | Math |
rstrip | Ciąg znaków |
rozmiar | Array |
slice | Ciąg znaków |
sortowanie | Array |
split | Ciąg znaków |
strip | Ciąg znaków |
strip_html | Ciąg znaków |
strip_newlines | Ciąg znaków |
razy | Math |
truncate | Ciąg znaków |
truncatewords | Ciąg znaków |
uniq | Array |
upcase | Ciąg znaków |
url_encode | Ciąg znaków |
gdzie | Array |
Przykłady zmiennych
Przykład: chcesz utworzyć workflow, aby wysłać wiadomość e-mail do pracownika, gdy klient wyda więcej niż 500 USD na zamówienie. Utwórz workflow wykorzystujący wyzwalacz Zamówienie utworzone, ustaw warunek, który ma wartość PRAWDA, jeśli suma zamówienia przekracza 500 USD i użyj czynności Wyślij wewnętrzną wiadomość e-mail. W sekcji Wiadomość w czynności Wyślij wewnętrzną wiadomość e-mail możesz użyć następujących zmiennych.
Dane wejściowe | Dane wyjściowe |
---|---|
Proszę wysłać osobiste podziękowanie do {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) za złożenie zamówienia na kwotę {{ order.totalPriceSet.shopMoney.amount }} USD. | Proszę wysłać osobiste podziękowanie do Anny Kowalskiej (anna@przykład.com) za złożenie zamówienia na kwotę 763,42 USD. |
Ustalasz, że musisz informować pracownika, gdy poziom zapasów produktów będzie niski i konieczne będzie złożenie zamówienia na większą ilość zapasów. Utwórz workflow uruchamiany za pomocą wyzwalacza Zmieniono ilość zapasów i ustaw warunek, który jest prawdziwy, jeśli wcześniejsza ilość zapasów jest mniejsza lub równa 10. W sekcji Wiadomość w czynności Wyślij wewnętrzną wiadomość e-mail możesz użyć następujących zmiennych.
Dane wejściowe | Dane wyjściowe |
---|---|
Zamów ponownie {{ product.title }}. Wyślij e-mail do właściciel@sklep.com e-mail, aby sprawdzić, czy otrzymał zamówienie. | Zamów ponownie legginsy z wysokim stanem – czarne. Wyślij e-mail do właściciel@przykład.com, aby sprawdzić, czy otrzymał zamówienie. |
Chcesz anulować zamówienia o wysokim poziomie ryzyka, ale wolisz, aby Twoi pracownicy anulowali je ręcznie. Utwórz workflow uruchamiany za pomocą wyzwalacza Utworzono zamówienie i ustaw warunek, który ma wartość PRAWDA, jeśli poziom ryzyka zamówienia jest wysoki. W sekcji Wiadomość w czynności Wyślij wewnętrzną wiadomość e-mail możesz użyć następujących zmiennych.
Dane wejściowe | Dane wyjściowe |
---|---|
Nasz sklep Shopify otrzymał zamówienie z wysokim ryzykiem oszustwa. Chcielibyśmy anulować to zamówienie od razu, zanim zostanie wysłane do produkcji: {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} Prosimy o potwierdzenie nowego statusu zamówienia. Dziękujemy! |
Nasz sklep Shopify otrzymał zamówienie z wysokim ryzykiem oszustwa. Chcielibyśmy anulować to zamówienie od razu, zanim zostanie wysłane do produkcji: #1001 Kowalska, Anna anna@przykład.com Prosimy o potwierdzenie nowego statusu zamówienia. Dziękujemy! |
Przykłady pętli For
Po otrzymaniu zamówienia przydatne może być wysłanie wiadomości dotyczącej zamówionych produktów. Możesz to zrobić za pomocą instrukcji for loop
, które wielokrotnie uruchamiają blok kodu. Pola tekstowe, które obsługują zmienne, obsługują również instrukcje for loops oraz obiekt forloop.
Przykład: chcesz utworzyć workflow, który zwraca listę wszystkich jednostek SKU i ilości w zamówieniu. W sekcji Wiadomość w czynności Wyślij wewnętrzną wiadomość e-mail możesz użyć następujących zmiennych.
Dane wejściowe | Dane wyjściowe |
---|---|
Podsumowanie zamówienia: {% for a in order.lineItems %} SKU: {{a.sku}} ( {{a.quantity}} ), {% endfor %} |
Podsumowanie zamówienia: 8987097979 (50) 8877778887 (3) 888998898B (1) |
Chcesz dodać więcej informacji do e-maila, w tym nazwę produktu, jednostki SKU, cenę pozycji i informacje o wysyłce do klienta. W sekcji Wiadomość w czynności Wyślij wewnętrzną wiadomość e-mail możesz użyć następujących zmiennych.
Dane wejściowe | Dane wyjściowe |
---|---|
Podsumowanie zamówienia: {% for a in order.lineItems %} Produkt: {{a.title}} SKU: {{a.sku}} Cena (za sztukę): USD {{a.originalUnitPriceSet.shopMoney.amount}} Ilość: {{a.quantity}} {% endfor %} |
Podsumowanie zamówienia: Produkt: Legginsy z wysokim stanem – czarne SKU: 8987097979 Cena (za sztukę): 8,49 USD Ilość: 5 Produkt: Skarpetki sportowe - niebieskie SKU: 888998898B Cena (za sztukę): 5,61 USD Ilość: 2 |
Musisz śledzić sprzedane pozycje, które są dostarczane przez określonego dostawcę. W sekcji Wiadomość w czynności Wyślij wewnętrzną wiadomość e-mail użyj następujących zmiennych i dołącz instrukcję if
w for loop
.
Dane wejściowe | Dane wyjściowe |
---|---|
Sprzedany produkt Acme: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} Nazwa produktu: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %} |
Sprzedany produkt Acme: Nazwa produktu: z wysokim stanem – czarne SKU: 8987097979 |
Złożone obiekty danych w Shopify Flow
Shopify Flow nie obsługuje wyjściowych tablic i obiektów z następujących powodów:
- Dane wyjściowe, które nie są wymagane, są nieaktualne dla interfejsu API GraphQL i mogą tworzyć zapytania o dużych rozmiarach, które powodują niepowodzenie workflow.
- Po wprowadzeniu nowych funkcji dodawane są nowe pola API, które mogą przerwać workflow.
Jeśli automatycznie wysłanych zostanie zbyt dużo danych, workflow nie powiedzie się. Zamiast wywoływania tablic i obiektów bezpośrednio, używaj pętli w tablicach i uwzględniaj tylko potrzebne pola.
Na przykład, zamiast wywoływania {{ order.lineItems }}
bezpośrednio, użyj następującego formatu, aby wywołać określone pola. Przykłady te obejmują wszystkie pola, które byłyby zawarte poprzez bezpośrednie wywołanie tablicy lub obiektu. Skopiuj i wklej pola, których potrzebujesz.
{% 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 %}
]
}