Variables en Shopify Flow
Las variables son marcadores de posición que se reemplazan por valores cuando se ejecuta un flujo de trabajo. Estas variables describen los atributos de los clientes, pedidos y productos que aparecen en tus flujos de trabajo. Por ejemplo, hay variables para el número de pedido, el precio del pedido, el nombre del cliente, etc.
Los nombres de la mayoría de las variables son autodescriptivos. Por ejemplo, la variable que muestra el nombre del producto es {{ product.title }}
. Cuando se envía el mensaje, esta variable se reemplaza con el nombre del producto pedido: Large Coffee Mug
.
Agregar variables a acciones
Puedes agregar variables a cualquier campo de texto que contenga el enlace Agregar variable. Haz clic en el enlace Agregar variable debajo del campo correspondiente y, luego, selecciona una variable de la lista.
Las variables de la lista Agregar variable se filtran, de modo que solo veas las variables que se aplican al activador que has elegido. Después de elegir una variable de la lista, se le da el formato correcto y se agrega al cuadro de texto por ti.
Flow admite casi todos los campos de la API del panel de control de GraphQL.
Variables de Liquid
Si eres un desarrollador con experiencia escribiendo código de Liquid de Shopify, puedes usar Liquid para escribir tus variables o editar variables que insertas usando el enlace Agregar variable. Para más información, consulta la referencia del idioma de la plantilla de Liquid.
Etiquetas condicionales y de repetición
Puedes agregar manualmente etiquetas de variables de Liquid a tus mensajes de flujo de trabajo. Puedes usar estas etiquetas para incluir más información en tus mensajes.
Por ejemplo, puedes usar un objeto for loop
para que se repita a lo largo de una lista de objetos, como líneas de artículos para un pedido. Con estas etiquetas, puedes crear mensajes que contengan detalles, como título del producto, SKU, precio y cantidad de cada línea de artículo en un pedido y ahorrarles a tus destinatarios el trabajo de tener que buscar esta información en tu panel de control de Shopify.
Flow es compatible con todas las etiquetas condicionales de Shopify Liquid (o flujo de control):
https://shopify.dev/api/liquid/tags/control-flow-tags#if
- if
- unless
- else/elsif
- case/when
- y/o (múltiples condiciones)
Flow también es compatible con todas las etiquetas de repetición de Shopify Liquid:
Filtros
Flow es compatible con los siguientes filtros de Shopify Liquid:
Nombre del filtro | Tipo de filtro |
---|---|
abs | Matemático |
append | Cadena |
at_least | Matemático |
at_most | Matemático |
capitalize | Cadena |
ceil | Matemático |
concat | Array |
date | Adicional |
Predeterminado | Adicional |
divided_by | Matemático |
downcase | Cadena |
escape | Cadena |
Primero | Array |
floor | Matemático |
join | Array |
last | Array |
lstrip | Cadena |
map | Array |
minus | Matemático |
modulo | Matemático |
newline_to_br | Cadena |
plus | Matemático |
prepend | Cadena |
eliminar | Cadena |
remove_first | Cadena |
replace | Cadena |
replace_first | Cadena | reverse | Array |
round | Matemático |
rstrip | Cadena |
Tamaño | Array |
slice | Cadena |
ordenar | Array |
split | Cadena |
strip | Cadena |
strip_html | Cadena |
strip_newlines | Cadena |
times | Matemático |
truncate | Cadena |
truncatewords | Cadena |
uniq | Array |
upcase | Cadena |
url_encode | Cadena |
where | Array |
Ejemplos de variables
Supongamos que deseas crear un flujo de trabajo para enviar un correo electrónico a un empleado cuando un cliente gaste más de $ 500 en un pedido. Creas un flujo de trabajo usando el activador de pedido creado, estableces una condición que sea verdadera si el total del pedido es superior a $ 500 y usas la acción Enviar un correo electrónico. En la sección Mensaje de la acción Enviar un correo electrónico, usas las siguientes variables.
Entrada | Salida |
---|---|
Envía una nota de agradecimiento personal a {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) por realizar un pedido de $ {{ order.totalPriceSet.shopMoney.amount }}. | Envía una nota de agradecimiento personal a Jeanne Dupont (jeanne@example.com) por realizar un pedido de $ 763,42. |
Decides informar a un empleado cuando el inventario de productos está bajando y se debe realizar un pedido para obtener más existencia. Creas un flujo de trabajo que comienza con el activador de cantidad de inventario cambiada y estableces una condición que sea verdadera si la cantidad de inventario anterior es menor que o igual a 10. En la sección Mensaje de la acción Enviar un correo electrónico, usas las siguientes variables.
Entrada | Salida |
---|---|
Solicita de nuevo {{ product.title }}. Envía a owner@store.com un correo electrónico para verificar que ha recibido la orden de compra. | Solicita de nuevo los leggings de cintura alta negros. Envía a owner@example.com un correo electrónico para verificar que ha recibido la orden de compra. |
Deseas cancelar pedidos que tengan un nivel de alto riesgo, pero prefieres que tus empleados cancelen el pedido manualmente. Creas un flujo de trabajo que comienza con el activador de pedido creado y estableces una condición que sea verdadera si el nivel de riesgo del pedido es alto. En la sección Mensaje de la acción Enviar un correo electrónico, usas las siguientes variables.
Entrada | Salida |
---|---|
Nuestra tienda Shopify ha recibido un pedido con un alto riesgo de fraude. Nos gustaría cancelar este pedido de inmediato, antes de enviarlo a producción: {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} Confirma el nuevo estado del pedido. ¡Gracias! |
Nuestra tienda Shopify ha recibido un pedido con un alto riesgo de fraude. Nos gustaría cancelar este pedido de inmediato, antes de enviarlo a producción: #1001 Dupont, Jeanne jeanne@example.com Confirma el nuevo estado del pedido. ¡Gracias! |
Ejemplos de bucle for
Cuando se recibe un pedido, puede ser útil enviar un mensaje que contenga los productos solicitados. Puedes hacer esto usando for loop
, que ejecuta repetidamente un bloque de código. Los campos de texto compatibles con las variables también admiten bucles for y el objeto forloop.
Por ejemplo, deseas crear un flujo de trabajo que devuelva una lista de todos los SKU y cantidades en un pedido. En la sección Mensaje de la acción Enviar un correo electrónico, usas las siguientes variables.
Entrada | Salida |
---|---|
Resumen del pedido: {% for a in order.lineItems %} SKU: {{a.sku}} ({{a.quantity}}), {% endfor %} |
Resumen del pedido: 8987097979 (50) 8877778887 (3) 888998898B (1) |
Decides agregar más información al correo electrónico, incluyendo el nombre del producto, los SKU, el precio por artículo y la información de envío del cliente. En la sección Mensaje de la acción Enviar un correo electrónico electrónico, usas las siguientes variables.
Entrada | Salida |
---|---|
Resumen del pedido: {% for a in order.lineItems %} Producto: {{a.title}} SKU: {{a.sku}} Precio (por unidad): $ {{a.originalUnitPriceSet.shopMoney.amount}} Cantidad: {{a.quantity}} {% endfor %} |
Resumen del pedido: Producto: leggings de cintura alta negros SKU: 8987097979 Precio (por unidad): $ 8,49 Cantidad: 5 Producto: calcetines deportivos azules SKU: 888998898B Precio (por unidad): $ 5,61 Cantidad: 2 |
Debes hacer seguimiento de los artículos vendidos que proporciona un proveedor específico. En la sección Mensaje de la acción Enviar un correo electrónico, usas las siguientes variables e incluyes una instrucción if
en for loop
.
Entrada | Salida |
---|---|
Producto de Acme vendido: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} Nombre del producto: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %} |
Producto de Acme vendido: Nombre del producto: leggings de cintura alta negros SKU: 8987097979 |
Objetos de datos complejos en Shopify Flow
Shopify Flow no admite la salida de matrices y objetos por las siguientes razones:
- Los datos de salida que no son obligatorios están obsoletos para la API GraphQL, y podrían crear tamaños de consulta grandes que causen errores en tu flujo de trabajo.
- Cuando se introducen nuevas funciones, se agregan nuevos campos de la API, lo que podría interrumpir tu flujo de trabajo.
Si se envían demasiados datos automáticamente, el flujo de trabajo falla. En lugar de llamar a matrices y objetos directamente, realiza un bucle sobre las matrices e incluye solo los campos que desees.
Por ejemplo, en lugar de llamar a {{ order.lineItems }}
directamente, usa el siguiente formato para llamar a campos específicos. Estos ejemplos incluyen todos los campos que se incluirían al llamar directamente a la matriz u objeto. Copia y pega los campos que necesites.
{% 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 %}
]
}