Variabler i Shopify Flow
Variabler er plassholdere som erstattes med verdier når en arbeidsflyt kjører. Disse variablene beskriver særtrekkene til kundene, bestillingene og produktene som er involvert i arbeidsflytene dine. Det er for eksempel malvariabler for ordrenummer, bestillingspris, kundenavn og så videre.
Flow bruker en annen versjon av Liquid enn Shopify-temaer, og har tilgang til alle variablene som er tilgjengelige under GraphQL Admin API.
Navnet på de fleste variabler sier seg selv. Variabelen som viser navnet på et produkt er for eksempel {{ product.title }}
. Når meldingen blir sendt, erstattes denne variabelen med navnet på det bestilte produktet: Large Coffee Mug
.
Legge til variabler i handlinger
Du kan legge til variabler i alle tekstfelter som inneholder koblingen Legg til variabel. Klikk på koblingen Legg til variabel under det relevante feltet, og velg en variabel fra listen.
Variablene i Legg til variabel-listen er filtrert, slik at du bare ser variabler som gjelder for den utløseren du har valgt. Etter at du har valgt en variabel fra listen, vil den formateres riktig og legges til i tekstboksen for deg.
Flow støtter nesten alle GraphQL Admin API-felter.
Liquid-variabler
Hvis du er en utvikler som har erfaring med Liquid-kode kan du bruke Liquid for å skrive eller redigere variabler som settes inn ved hjelp av koblingen Legg til variabel. Se GraphQL Admin API-referansen for å finne ut mer.
Betingede tagger og gjentakelsestagger
Du kan legge til Liquid-variabeltagger manuelt i arbeidsflytmeldingene. Du kan bruke disse taggene til å inkludere mer informasjon i meldingene.
Du kan for eksempel bruke et for loop
-objekt til å gå gjennom en liste over objekter, for eksempel linjevarer for en bestilling. Med disse taggene kan du opprette meldinger som inneholder detaljer, for eksempel produktnavn, SKU, pris og antall for hver linjevare i en bestilling, og gjøre slik at mottakerne ikke trenger å slå opp denne informasjonen i Shopify-administratoren.
Flow støtter også følgende betingede Liquid- (eller kontrollflyt)-merker:
- if
- unless
- elsif/else
- case/when
- and/or (flere betingelser)
Flow støtter også følgende Liquid-iterasjonsmerker:
Filtre
Flow støtter følgende Liquid-filtre:
Filtrer navn | Filter type |
---|---|
abs | Matematikk |
tilføyings | Streng |
at_least | Matematikk |
at_most | Matematikk |
kapitalisere | Streng |
ceil | Matematikk |
concat | Matrise |
dato | Ytterligere |
standard | Ytterligere |
divided_by | Matematikk |
downcase | Streng |
unnslipp | Streng |
først | Matrise |
etasje | Matematikk |
bli med i | Matrise |
siste | Matrise |
lstrip | Streng |
kart | Matrise |
minus | Matematikk |
modulo | Matematikk |
newline_to_br | Streng |
pluss | Matematikk |
foranstill | Streng |
fjern | Streng |
remove_first | Streng |
erstatt | Streng |
replace_first | Streng | omvendt | Matrise |
rund | Matematikk |
rstrip | Streng |
størrelse | Matrise |
skive | Streng |
sorter | Matrise |
del opp | Streng |
strip | Streng |
strip_html | Streng |
strip_newlines | Streng |
ganger | Matematikk |
avkorte | Streng |
truncatewords | Streng |
unik | Matrise |
upcase | Streng |
url_encode | Streng |
hvor | Matrise |
Eksempler på variabler
Du vil for eksempel opprette en arbeidsflyt for å sende en e-post til en ansatt når en kunde bruker mer enn 500 USD på en bestilling. Du oppretter en arbeidsflyt med utløseren Bestilling opprettet, angir betingelsen som sann hvis totalsummen for bestillingen er over 500 USD, og bruker handlingen Send intern e-post. I delen Melding for handlingen Send intern e-post bruker du følgende variabler.
Overtre | Utdata |
---|---|
Send en personlig takkemelding til {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) for å ha lagt inn en bestilling på {{ order.totalPriceSet.shopMoney.amount }} USD . | Send en personlig takkemelding til Jeanne Dupong (jeanne@example.com) for å ha lagt inn en bestilling på 763,42 USD. |
Du bestemmer deg for å at du må informere et personalmedlem når lagerantallet blir lavt og det må legges inn en bestilling for nye lagervarer. Du oppretter en arbeidsflyt som starter med utløseren Lagerantall endret, og angir betingelsen som sann hvis lagerantallet før er mindre enn eller lik 10. I delen Melding for handlingen Send intern e-post bruker du følgende variabler.
Overtre | Utdata |
---|---|
Bestill mer av {{ product.title }}. Send en e-post til owner@store.com for å bekrefte at de har mottatt innkjøpsordren. | Bestill mer av Leggings med høyt liv – Sort. Send en e-post til owner@store.com for å bekrefte at de har mottatt innkjøpsordren. |
Du vil kansellere bestillinger med et høyt risikonivå, men foretrekker at personalet manuelt kansellerer bestillingen. Du oppretter en arbeidsflyt som starter med utløseren Bestilling opprettet, og angir en betingelse som er sann hvis risikonivået for bestillingen tilsvarer høyt. I delen Melding for handlingen Send intern e-post bruker du følgende variabler.
Overtre | Utdata |
---|---|
Shopify-butikken vår har mottatt en bestilling med høy svindelrisiko. Vi vil gjerne kansellere denne bestillingen umiddelbart, før den sendes i produksjon: {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} Bekreft den nye bestillingsstatusen. Takk! |
Shopify-butikken vår har mottatt en bestilling med høy svindelrisiko. Vi vil gjerne kansellere denne bestillingen umiddelbart, før den sendes i prdouksjon: #1001 Dupont, Jeanne jeanne@example.com Bekreft den nye bestillingsstatusen. Takk! |
For-loop-eksempler
Når en bestilling er mottatt, kan det være nyttig å sende en melding som inneholder produktene som er bestilt. Dette kan du gjøre ved å bruke for loop
, som kjører en blokk med kode gjentatte ganger. Tekstfelter som støtter variabler støtter også for-lokker og forloop-objektet.
Du vil for eksempel opprette en arbeidsflyt som returnerer en liste over alle SKU-er og antall i en bestilling. I delen Melding for handlingen Send intern e-post bruker du følgende variabler.
Overtre | Utdata |
---|---|
Bestillingssammendrag: {% for a in order.lineItems %} SKU: {{a.sku}} ( {{a.quantity}} ), {% endfor %} |
Bestillingssammendrag: 8987097979 (50) 8877778887 (3) 888998898B (1) |
Du bestemmer deg for å legge til mer informasjon i e-posten, inkludert produktnavn, SKU-er, pris per vare og kundens leveringsinformasjon. I delen Melding for handlingen Send intern e-post bruker du følgende variabler.
Overtre | Utdata |
---|---|
Bestillingssammendrag: {% for a in order.lineItems %} Produkt: {{a.title}} SKU: {{a.sku}} Pris (per vare): {{a.originalUnitPriceSet.shopMoney.amount}} USD Antall: {{a.quantity}} {% endfor %} |
Bestillingssammendrag: Produkt: Leggings med høyt liv – Sort SKU: 8987097979 Pris (per vare): 8,49 USD Antall: 5 Produkt: Gymsokker – Blå SKU: 888998898B Pris (per vare): 5,61 USD Antall: 2 |
Du har behov for å spore solgte varer som leveres av en bestemt leverandør. I delen Melding for handlingen Send intern e-post bruker du følgende variabler og legger ved en if
-kommando i for loop
.
Overtre | Utdata |
---|---|
Acme-produkt solgt: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} Produktnavn: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %} |
Acme-produkt solgt: Produktnavn: Leggings med høyt liv – Sort SKU: 8987097979 |
Kompliserte dataobjekter i Shopify Flow
Shopify Flow støtter ikke returnering av matriser og objekter av følgende årsaker:
- Utdata som ikke kreves er avskrevet i GraphQL API, og det kan skape store spørringer som gjør at arbeidsflyten mislykkes.
- Når nye funksjoner introduseres legges det til nye API-felter, noe som kan ødelegge arbeidsflyten.
Hvis det sendes for mye data automatisk vil arbeidsflyten mislykkes. I stedet for å kalle matriser og objekter direkte, bør du kjøre løkker over matriser og bare inkludere de feltene du ønsker.
I stedet for å kalle {{ order.lineItems }}
direkte, bør du for eksempel bruke følgende format til å kalle bestemte felter. Disse eksemplene inkluderer alle felter som vil inkluderes ved å kalle matrisen eller objektet direkte. Kopier og lim inn de feltene du har behov for.
{% 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 %}
]
}