Variabler i Shopify Flow
Variabler är platshållare som ersätts med värden när en arbetsflöde körs. Dessa variabler beskriver attribut för kunder, ordrar och produkter som ingår i dina arbetsflöden. Det finns till exempel variabler för ordernummer, orderpris, kundnamn med mera.
Flow använder en annan version av Liquid än Shopify-teman och kan komma åt alla variabler som finns tillgängliga via GraphQL Admin API.
Namnen på de flesta variablerna är självbeskrivande. Till exempel är variabeln som visar produktnamnet {{ product.title }}
. När meddelandet skickas ersätts denna variabel med namnet på den beställda produkten: Large Coffee Mug
.
Lägg till variabler för åtgärder
Du kan lägga till variabler i ett textfält som innehåller länken Lägg till variabel. Klicka på länken Lägg till variabel under relevant fält och välj sedan en variabel från listan.
Variablerna i listan Lägg till variabel filtreras, så att du endast ser de variabler som gäller för den utlösare som du har valt. När du har valt en variabel från listan är den formaterad och läggs till i textrutan åt dig.
Flow stöder nästan alla fält för GraphQL Admin API.
Liquid-variabler
Om du är en utvecklare med erfarenhet av att skriva Liquid-kod kan du använda Liquid för att skriva dina variabler eller redigera variabler som du för in med hjälp av länken Lägg till variabel. För mer information, se GraphQL Admin API-referens.
Villkorliga och iterationstaggar
Du kan lägga till Liquid variabeltaggar manuellt till dina arbetsflödesmeddelanden. Du kan använda dessa taggar för att inkludera mer information i dina meddelanden.
Du kan till exempel använda ett for loop
-objekt för att iterera genom en lista över objekt, till exempel radartiklar för en order. Med dessa taggar kan du skapa meddelanden som innehåller information, till exempel produktnamn, SKU, pris och kvantitet för varje post i en order så dina mottagare slipper leta upp denna information i din Shopify-admin.
Flow stöder följande villkors-taggar för Liquid (eller kontrollflöde):
- if
- unless
- elsif/else
- case/when
- och/eller (flera villkor)
Flow stöder även följande Liquid iteration-taggar:
Filter
Flow stöder följande Liquid-filter:
Filternamn | Filtertyp |
---|---|
abs | Math |
Lägg till | Sträng |
at_least | Math |
at_most | Math |
capitalize | Sträng |
ceil | Math |
concat | Array |
Datum | Ytterligare |
standard | Ytterligare |
divided_by | Math |
DownCase | Sträng |
Fly | Sträng |
först | Array |
floor | Math |
asluta sig till | Array |
last | Array |
LStrip | Sträng |
karta | Array |
minus | Math |
modulo | Math |
newline_to_br | Sträng |
plus | Math |
prepend | Sträng |
ta bort | Sträng |
remove_first | Sträng |
ersätt | Sträng |
replace_first | Sträng | reverse | Array |
round | Math |
rstrip | Sträng |
storlek | Array |
slice | Sträng |
sortera | Array |
dela upp | Sträng |
strip | Sträng |
strip_html | Sträng |
strip_newlines | Sträng |
gånger | Math |
truncate | Sträng |
TrunkCatewords | Sträng |
uniq | Array |
upcase | Sträng |
url_encode | Sträng |
var | Array |
Variabelexempel
Du vill till exempel skapa ett arbetsflöde för att skicka ett e-postmeddelande till en anställd när en kund spenderar mer än 500 USD på en order. Du skapar ett arbetsflöde med hjälp av utlösaren Order skapad, anger ett villkor som är sant om ordersumman är över 500 USD och använder åtgärden Skicka internt e-postmeddelande. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.
Indata | Utdata |
---|---|
Skicka en personlig tackhälsning till {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) för att de lade en order på {{ order.totalPriceSet.shopMoney.amount }} USD. | Skicka en personlig tackhälsning till Jeanne Dupont (jeanne@example.com) för att de lade en order på 763,42 USD. |
Du bestämmer dig för att du behöver informera en medarbetare när produktlagret börjar bli lågt och en order måste läggas på fler lagerartiklar. Du skapar ett arbetsflöde som startar med utlösaren Lagerkvantitet ändrad och anger ett villkor som är sant om den tidigare lagerkvantiteten är mindre än eller lika med 10. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.
Indata | Utdata |
---|---|
Återbeställ {{ product.title }}. Skicka ett e-postmeddelande till owner@store.com för att verifiera att de har tagit emot inköpsordern. | Återbeställ Leggings med hög midja – svarta. Skicka ett e-postmeddelande till owner@example.com för att verifiera att de har tagit emot inköpsordern. |
Du vill annullera ordrar med hög risknivå men föredrar att din personal annullerar ordern manuellt. Du skapar ett arbetsflöde som startar med utlösaren Order skapad och anger ett villkor som är sant om risknivån för ordern är lika med hög. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.
Indata | Utdata |
---|---|
Vår Shopify-butik har fått en order med stor risk för bedrägeri. Vi vill omedelbart annullera denna order innan den skickas till produktion: {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} Bekräfta den nya orderstatusen. Tack! |
Vår Shopify-butik har fått en order med stor risk för bedrägeri. Vi vill omedelbart annullera denna order innan den skickas till produktion: #1001 Dupont, Jeanne jeanne@example.com Bekräfta den nya orderstatusen. Tack! |
Exempel på loop
När en order tas emot kan det vara bra att skicka ett meddelande som innehåller de beställda produkterna. Du kan göra det genom att använda for loop
, som kör ett kodblock upprepade gånger. Textfält som stöder variabler stöder även for loops och forloop-objekt.
Du vill till exempel skapa ett arbetsflöde som returnerar en lista över alla SKU:er och kvantiteter i en order. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.
Indata | Utdata |
---|---|
Ordersammanfattning: {% for a in order.lineItems %} SKU: {{a.sku}} ( {{a.quantity}} ), {% endfor %} |
Ordersammanfattning: 8987097979 (50) 8877778887 (3) 888998898B (1) |
Du bestämmer dig för att lägga till mer information i e-postmeddelandet, inklusive produktnamn, SKU:er, pris per artikel och kundens leveransinformation. I avsnittet Meddelande i åtgärden Skicka internt e-postmeddelande använder du följande variabler.
Indata | Utdata |
---|---|
Ordersammanfattning: {% for a in order.lineItems %} Produkt: {{a.title}} SKU: {{a.sku}} Pris (per enhet): {{a.originalUnitPriceSet.shopMoney.amount}} USD Kvantitet: {{a.quantity}} {% endfor %} |
Ordersammanfattning: Produkt: Leggings med hög midja – svarta SKU: 8987097979 Pris (per enhet): 8,49 USD Kvantitet: 5 Produkt: Sportsockor – blå SKU: 888999888B Pris (per enhet): 5,61 USD Kvantitet: 2 |
Du måste spåra sålda artiklar som tillhandahålls av en specifik säljare. I avsnittet Meddelande i åtgärden Skicka e-postmeddelande använder du följande variabler och inkluderar ett if
-utdrag i din for loop
.
Indata | Utdata |
---|---|
Såld Acme-produkt: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} Produktnamn: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %} |
Såld Acme-produkt: Produktnamn: Leggings med hög midja – svarta SKU: 8987097979 |
Komplexa dataobjekt i Shopify Flow
Shopify Flow stöder inte utdataarrayer och objekt av följande skäl:
- Utdata som inte krävs är inaktuella för GraphQL API, och det kan skapa stora frågestorlekar som gör att arbetsflödet misslyckas.
- När nya funktioner introduceras läggs nya API-fält till, vilket kan bryta ditt arbetsflöde.
Arbetsflödet misslyckas om för mycket data skickas automatiskt. Loopa över arrayer och inkludera endast de fält du vill ha i stället för att anropa arrayer och objekt direkt.
Istället för att till exempel anropa {{ order.lineItems }}
direkt kan du använda följande format för att anropa specifika fält. Dessa exempel inkluderar alla fält som skulle ingå genom att anropa arrayen eller objektet direkt. Kopiera och klistra in de fält du behöver.
{% 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 %}
]
}