Las variables son marcadores de posición que se definen en Liquid y que se reemplazan con valores de GraphQL Admin API cuando se ejecuta un flujo de trabajo. Las variables pueden describir atributos de los clientes, los pedidos y los productos involucrados en tu flujo de trabajo, como el número del pedido, el precio, el nombre del cliente, etc. Las variables pueden usarse en condiciones para controlar la lógica del flujo de trabajo o para obtener datos a partir de una acción.
Con Liquid, 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 puedes utilizar las variables que se devuelven en los pasos anteriores al actual, como los activadores. Por ejemplo, el activador Crear pedido proporciona recursos de pedido y tienda de Admin API que se pueden insertar como variables. Una vez que eliges una variable de la lista, esta se agrega al cuadro de texto con el formato correcto de Liquid.
También puedes escribir el código de Liquid directamente en el bloque de texto. Por ejemplo, puedes usar la variable {{ order.name }} para mostrar la cadena de pedido que aparece en el panel de control de Shopify, como, por ejemplo, pedido-123.
Dado que Flow utiliza la Admin API para recuperar los datos utilizados en Liquid, la sintaxis de las variables usa el estilo "camel case". Por ejemplo, para acceder a la fecha en que se creó un producto, introduce {{ product.createdAt }}. Si usas la sintaxis de Liquid en un tema de Shopify, deberías introducir{{ product.created_at }}.
Etiquetas condicionales y de iteración de Liquid
Quizás deseas usar etiquetas Liquid para hacer cosas como:
Escribir declaraciones condicionales, como determinar si el total de un pedido es mayor que $100
Iterar a través de una lista de objetos, como generar datos para cada línea de artículo en un pedido
Puedes usar etiquetas de Liquid para escribir estas declaraciones e iterar objetos.
Por ejemplo, en el siguiente Liquid se muestra el número de pedido si el total es mayor que $100:
{% if order.totalPriceSet.shopMoney.amount > 100 %}
Order number: {{ order.name }}
{% endif %}
También puedes usar un bucle "for" para iterar en una lista de objetos, como líneas de artículo para un pedido. Por ejemplo, en el siguiente Liquid se muestra el nombre de cada línea de artículo de un pedido:
{% for li in order.lineItems %}
{{ li.title }}
{% endfor %}
Flow admite las siguientes etiquetas condicionales (o de flujo de control) de Liquid:
Los filtros te permiten transformar datos en Liquid. Flow es compatible con todos los filtros de código abierto de Liquid.
Por ejemplo, el siguiente Liquid elimina un prefijo del nombre del pedido y genera lo que queda: {{ order.name | remove: "Order-" }}
Además de los filtros estándar de Liquid, Flow proporciona filtros de fecha para obtener una fecha relativa a otra fecha para admitir el activador de hora programada y activar funciones de obtención de datos. Estos filtros son: date_minus y date_plus.
Para devolver una fecha un día después:{{ "now" | date_plus: "1 day" }}
Para devolver una fecha un día en el pasado:{{ "now" | date_minus: "1 day" }}
Estos filtros aceptan second, minute, day, week, monthy year como la unidad de duración, tanto singular (como second) y plural (como seconds). Además de este formato, también puedes suministrar un número entero (número de segundos). Por ejemplo:{{ "now" | date_minus: 3600 }}
También puedes suministrar una cadena de duración ISO8601, en la que P1Y2D significa 1 año y 2 días:{{ "now" | date_minus: "P1Y2D" }}
Consideraciones para usar variables de Liquid en filtros
Flow no admite la notación de puntos que está disponible para algunos filtros. Por ejemplo, Flow admite {{ order.lineItems | size }} pero no {{ order.lineItems.size }}.
Flow no admite la notación de puntos para metacampos. Por ejemplo, no puedes usar {{ order.metafields.custom.hold_note }}. En su lugar, debes hacer un bucle sobre los metacampos como se describe en los ejemplos.
Flow no admite el uso de menús para acceder a los artículos de una lista. Por ejemplo, no puedes usar {{ order.lineItems[0].title }}. En su lugar, debes hacer un bucle sobre las líneas de artículos como se describe en los ejemplos.
Ejemplos
Para tener una mejor idea de cómo usar las variables de Liquid, ten en cuenta los siguientes ejemplos.
Extraer URL para recursos
Es preciso extraer las URL del cliente, el pedido y el producto que están involucrados en un flujo de trabajo.
# Output the base Admin URL for your store
https://admin.shopify.com/store/{{ shop.myShopifyDomain | replace: ".myshopify.com", "" }}
# Assign the base Admin url to a variable named base_url:
{%- capture base_url -%}https://admin.shopify.com/store/{{ shop.myShopifyDomain | replace: ".myshopify.com", "" }}{%- endcapture -%}
# Customer from a Customer trigger:
{{ base_url }}/customers/{{ customer.legacyResourceId }}
# Customer without the base_url:
https://admin.shopify.com/store/{{ shop.myShopifyDomain | replace: ".myshopify.com", "" }}/customers/{{ customer.legacyResourceId }}
# Customer from an Order trigger:
{{ base_url }}/customers/{{ order.customer.legacyResourceId }}
# Order:
{{ base_url }}/orders/{{ order.legacyResourceId }}
# Product:
{{ base_url }}/products/{{ product.legacyResourceId }}
# Product Variant:
{{ base_url }}/products/{{ product.legacyResourceId }}/variants/{{ productVariant.legacyResourceId }}
# Example showing a clickable link in HTML, making use of the URL:
<a href="{{ base_url }}/products/{{ product.legacyResourceId }}">{{ product.title }}</a>
Convertir una lista de etiquetas en un metacampo
Deseas convertir un conjunto de etiquetas en un metacampo que es una lista de campos de texto de una sola línea. Creas un flujo de trabajo con el activador Producto agregado a la tienda y usas la acción Actualizar metacampo del producto. En la sección Valor de la acción Actualizar metacampo del producto, agregas el siguiente código de Liquid. Este ejemplo supone que solo debes establecer los valores una vez cuando se crea el producto y que este tiene dos etiquetas relevantes: color:red y color:orange.
Ejemplo de Liquid para establecer la lista de un campo de texto de una sola línea.
### Escribir un mensaje de correo electrónico dinámico para un pedido {#dynamic-email}
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 con el activador Pedido creado, estableces una condición que sea verdadera si el total del pedido es superior a $500 y usas la acción Enviar correo electrónico interno. En la sección Mensaje de la acción Enviar correo electrónico interno, usas las siguientes variables.
Ejemplo del uso de variables para proporcionar detalles del cliente
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.
### Escribir un mensaje de correo electrónico dinámico para un producto con pocas existencias {#dynamic-email-product}
Decides que es necesario informar a un empleado cuando el inventario de productos esté bajando y sea necesario realizar un pedido para ampliar las existencias. Creas un flujo de trabajo que se inicia con el activador Cantidad de inventario cambiada y estableces una condición que sea verdadera si la cantidad de inventario anterior es inferior o igual a 10. En la sección Mensaje de la acción Enviar correo electrónico interno, usas las siguientes variables.
Ejemplo del uso de variables para proporcionar detalles del artículo.
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.
### Escribir un mensaje de correo electrónico dinámico para informar a los empleados sobre un pedido fraudulento {#dynamic-email-fraud}
Deseas cancelar los pedidos que tengan un nivel de riesgo alto, pero prefieres que tus empleados cancelen el pedido manualmente. Creas un flujo de trabajo que se inicia con el activador Pedido creado y estableces una condición que sea verdadera si el nivel de riesgo del pedido es elevado. En la sección Mensaje de la acción Enviar correo electrónico interno, usas las siguientes variables.
Ejemplo del uso de variables para proporcionar información sobre un pedido fraudulento
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:
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!
### Extraer las líneas de artículo de un pedido usando un bucle for {#output-line-items}
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 que admiten 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 de un pedido. En la sección Mensaje de la acción Enviar correo electrónico interno, usas las siguientes variables.
Ejemplo de uso de bucle for para proporcionar información de pedido
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)
### Extraer las líneas de artículo de un pedido usando un bucle for con información adicional {#output-line-items-additional}
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 correo electrónico interno, usas las siguientes variables.
Ejemplo de uso de bucle for para proporcionar información de pedidos más extensa
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 %}
### Extraer algunas líneas de artículos mediante la combinación de un bucle for y un enunciado if {#output-line-items-if}
Debes hacer seguimiento de los artículos vendidos que suministra un proveedor específico. En la sección Mensaje de la acción Enviar correo electrónico interno, usas las variables siguientes e incluyes una instrucción if en for loop.
Ejemplo de uso del bucle for e instrucción if para proporcionar información de pedidos a proveedores específicos
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 {#complex-data-objects}
Flow te permite acceder a casi cualquier dato que esté en la Admin API de GraphQL, incluidos los objetos de datos complejos, como listas y objetos. Sin embargo, hay ciertas limitaciones sobre lo que puedes hacer con estos objetos. La sección describe estas limitaciones y proporciona ejemplos de cómo trabajar con ellas.
En lugar de llamar a listas y objetos directamente, debes hacer un bucle en la lista e incluir 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 lista u objeto. Copia y pega los campos que necesites.
Text
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}