Variabili in Shopify Flow
Le variabili sono segnaposti che vengono sostituiti con valori durante l'esecuzione di un flusso di lavoro e descrivono gli attributi dei clienti, degli ordini e dei prodotti coinvolti nei flussi di lavoro. Ad esempio, esistono variabili per il numero dell'ordine, il prezzo dell'ordine, il nome del cliente e così via.
Flow utilizza una versione di Liquid diversa dai temi di Shopify e può accedere a una qualsiasi delle variabili disponibili tramite l'Admin API GraphQL.
I nomi della maggior parte delle variabili sono auto-descrittivi. Ad esempio, la variabile che mostra il nome del prodotto è {{ product.title }}
. Quando il messaggio viene inviato, questa variabile viene sostituita con il nome del prodotto ordinato: Large Coffee Mug
.
Aggiunta di variabili alle azioni
Puoi aggiungere variabili modello a ogni campo di testo che contenga il link Add variable (Aggiungi variabile). Clicca sul link Add variable (Aggiungi variabile) sotto il campo pertinente, quindi scegli una variabile dall'elenco.
Poiché le variabili dell'elenco Add variable (Aggiungi variabile) vengono filtrate, risultano visibili solo quelle che si applicano al trigger scelto. Dopo aver scelto una variabile dall'elenco, questa viene formattata correttamente e aggiunta alla casella di testo.
Flow supporta quasi tutti i campi delle Admin API di GraphQL.
Variabili Liquid
Se sei uno sviluppatore con esperienza nella scrittura del codice Liquid, puoi utilizzare Liquid per scrivere le variabili o modificare quelle inserite utilizzando il link Add variable (Aggiungi variabile). Per maggiori informazioni, consulta le informazioni di riferimento dell'Admin API GraphQL.
Tag condizionali e di iterazione
Puoi aggiungere manualmente i tag della variabile Liquid al flusso di lavoro. Questi tag consentono di includere maggiori informazioni ai tuoi messaggi.
Ad esempio, puoi utilizzare un oggetto for loop
per eseguire un'iterazione in un elenco di oggetti, come nel caso delle voci di un ordine. Con questi tag, puoi creare messaggi che contengono dettagli come titolo del prodotto, SKU, prezzo e quantità per ogni voce dell'ordine ed evitare ai destinatari di dover cercare queste informazioni nel pannello di controllo Shopify.
Flow supporta i seguenti tag condizionali (o del flusso di controllo) di Liquid:
- if
- unless
- elsif/else
- case/when
- and/or (condizioni multiple)
Flow supporta inoltre i seguenti tag di iterazione di Liquid:
Filtri
Flow supporta i seguenti filtri Liquid:
Nome del filtro | Tipo di filtro |
---|---|
abs | Math |
append | String |
at_least | Math |
at_most | Math |
capitalize | String |
ceil | Math |
concat | Array |
date | Aggiuntivi |
predefinito | Aggiuntivi |
divided_by | Math |
downcase | String |
escape | String |
Primo | Array |
floor | Math |
join | Array |
last | Array |
lstrip | String |
map | Array |
minus | Math |
modulo | Math |
newline_to_br | String |
plus | Math |
prepend | String |
Rimuovi | String |
remove_first | String |
replace | String |
replace_first | String | reverse | Array |
round | Math |
rstrip | String |
Misura | Array |
slice | String |
ordina | Array |
split | String |
strip | String |
strip_html | String |
strip_newlines | String |
times | Math |
truncate | String |
truncatewords | String |
uniq | Array |
upcase | String |
url_encode | String |
dove | Array |
Esempi di variabili
Ad esempio, potresti voler creare un flusso di lavoro per inviare un'email a un dipendente quando un cliente spende più di 500 USD per un ordine. Puoi creare un flusso di lavoro utilizzando il trigger Order created (Ordine creato), impostare una condizione come true quando il totale dell'ordine è superiore a 500 USD e utilizzare l'azione Send internal email (Invia email interna). Nella sezione Message (Messaggio) dell'azione Send internal email (Invia email interna) utilizzerai le variabili seguenti.
Input | Output |
---|---|
Invia una nota di ringraziamento personale a {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) per aver effettuato un ordine di {{ order.totalPriceSet.shopMoney.amount }} USD. | Invia una nota di ringraziamento personale a Rosa Bianchi (rosa@example.com) per aver effettuato un ordine di 763,42 USD. |
Decidi di informare un membro dello staff quando le scorte dei prodotti si stanno esaurendo ed è necessario effettuare un ordine per aumentarle. Crei un flusso di lavoro che si avvia con il trigger Inventory quantity changed (Quantità di scorte modificata) e imposti una condizione come true quando la quantità di scorte precedente è inferiore o uguale a 10. Nella sezione Message (Messaggio) dell'azione Send internal email (Invia email interna) utilizzerai le variabili seguenti.
Input | Output |
---|---|
Ordina di nuovo {{ product.title }}. Invia un'email all'indirizzo owner@store.com per verificare che abbia ricevuto l'ordine d'acquisto. | Ordina di nuovo i leggings a vita alta - Nero. Invia un'email all'indirizzo owner@example.com per verificare che abbia ricevuto l'ordine d'acquisto. |
Desideri annullare gli ordini con un livello di rischio alto, ma preferisci che il tuo staff compia tale azione manualmente. Puoi creare un flusso di lavoro che si avvia con il trigger Order created (Ordine creato) e impostare una condizione come true quando il livello di rischio dell'ordine è uguale a Alto. Nella sezione Message (Messaggio) dell'azione Send internal email (Invia email interna) utilizzerai le variabili seguenti.
Input | Output |
---|---|
Il nostro negozio Shopify ha ricevuto un ordine ad alto rischio di frode. Vogliamo annullarlo immediatamente, prima che venga inviato alla produzione: {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} Conferma il nuovo stato dell'ordine. Grazie! |
Il nostro negozio Shopify ha ricevuto un ordine ad alto rischio di frode. Vogliamo annullarlo immediatamente, prima che venga inviato alla produzione: #1001 Dupont, Jeanne jeanne@example.com Conferma il nuovo stato dell'ordine. Grazie! |
Esempi di ciclo for
Alla ricezione di un ordine, potrebbe risultare utile inviare un messaggio con un riepilogo dei prodotti ordinati. Per farlo, puoi utilizzare un for loop
, che esegue ripetutamente un blocco di codice. I campi di testo che supportano le variabili supportano anche i cicli for e l'oggetto forloop.
Ad esempio, potresti voler creare un flusso di lavoro che restituisca un elenco di tutte le SKU e le quantità di un ordine. Nella sezione Message (Messaggio) dell'azione Send internal email (Invia email interna) utilizzerai le variabili seguenti.
Input | Output |
---|---|
Riepilogo dell'ordine: {% for a in order.lineItems %} SKU: {{a.sku}} ( {{a.quantity}} ), {% endfor %} |
Riepilogo dell'ordine: 8987097979 (50) 8877778887 (3) 888998898B (1) |
Decidi di aggiungere all'email ulteriori informazioni, tra cui il nome del prodotto, le SKU, il prezzo per articolo e i dati di spedizione del cliente Nella sezione Message (Messaggio) dell'azione Send internal email (Invia email interna) utilizzerai le variabili seguenti.
Input | Output |
---|---|
Riepilogo dell'ordine: {% for a in order.lineItems %} Prodotto: {{a.title}} SKU: {{a.sku}} Prezzo (unitario): {{a.originalUnitPriceSet.shopMoney.amount}} USD Quantità: {{a.quantity}} {% endfor %} |
Riepilogo dell'ordine: Prodotto: Leggings a vita alta - Nero SKU: 8987097979 Prezzo (unitario): 8,49 USD Quantità: 5 Prodotto: Calzini sportivi - Blu SKU: 888998898B Prezzo (unitario): 5,61 USD Quantità: 2 |
Devi monitorare gli articoli venduti forniti da un fornitore specifico. Nella sezione Message (Messaggio) dell'azione Send internal email (Invia email interna) utilizzerai le variabili seguenti e includerai un costrutto if
nel for loop
.
Input | Output |
---|---|
Prodotto Acme venduto: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} Nome del prodotto: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %} |
Prodotto Acme venduto: Nome del prodotto: Leggings a vita alta - Nero SKU: 8987097979 |
Oggetti dati complessi su Shopify Flow
Shopify Flow non supporta l'output di matrici e oggetti per i seguenti motivi:
- L'output di dati non obbligatori è deprecato per l'API GraphQL e potrebbe creare dimensioni elevate di query, che causano errori nel flusso di lavoro.
- Con l'introduzione di nuove funzionalità vengono aggiunti nuovi campi API, il che potrebbe interrompere il flusso di lavoro.
Se vengono inviati automaticamente troppi dati, il flusso di lavoro non va a buon fine. Anziché chiamare direttamente matrici e oggetti, esegui il ciclo sulle matrici e includi solo i campi desiderati.
Ad esempio, anziché chiamare direttamente {{ order.lineItems }}
, utilizza il formato seguente per chiamare campi specifici. Questi esempi includono tutti i campi che verrebbero inclusi chiamando direttamente la matrice o l'oggetto. Copia e incolla i campi di cui hai bisogno.
{% 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 %}
]
}