Las variables de Liquid son marcadores de posición definidos en Liquid que se reemplazan con valores de la GraphQL Admin API cuando se ejecuta un flujo de trabajo. Las variables pueden describir los atributos de los clientes, los pedidos y los productos involucrados en tus flujos de trabajo, como el número de pedido, el precio del pedido o el nombre del cliente. Las variables se pueden usar en condiciones para controlar la lógica en el flujo de trabajo o para emitir datos desde una acción.
Agregar variables a los flujos de trabajo con Liquid
Puedes agregar variables con Liquid en cualquier campo de texto que contiene el enlace Agregar variable. Haz clic en el enlace Agregar variable debajo del campo correspondiente y luego elige una variable de la lista.
Las variables de la lista Agregar variable se filtran para que solo uses las variables que devuelven los pasos anteriores al paso actual, como los activadores. Por ejemplo, el activador Pedido creado proporciona recursos de pedido y de tienda desde la Admin API que se pueden insertar como variables. Después de elegir una variable de la lista, se agrega al cuadro de texto con el formato correcto de Liquid.
También puedes escribir Liquid directamente en el campo de texto. Por ejemplo, puedes usar la variable {{ order.name }} para mostrar la cadena del pedido desde el panel de control de Shopify, como order-123.
Como Flow usa la Admin API para recuperar los datos que usa Liquid, la sintaxis de las variables emplea camel case. En camel case, la primera palabra empieza con minúscula y las siguientes comienzan con mayúscula, por ejemplo, firstName o canMarkAsPaid. Para acceder a la fecha en que se creó un producto, ingresa {{ product.createdAt }}. Si usas la sintaxis de Liquid en un tema de Shopify, que no usa camel case, entonces ingresarías {{ product.created_at }}.
Etiquetas condicionales y de iteración de Liquid
Puedes usar etiquetas de Liquid con variables para hacer lo siguiente:
Escribir sentencias condicionales, por ejemplo, para determinar si el total de un pedido es mayor que 100 USD.
Iterar sobre una lista de objetos, por ejemplo, para generar datos de cada línea de artículo de un pedido.
Puedes usar Liquid tags para escribir estas sentencias e iterar sobre objetos.
Por ejemplo, el siguiente código Liquid muestra el número de pedido si el total del pedido es mayor que 100 USD:
{% if order.totalPriceSet.shopMoney.amount > 100 %}
Order number: {{ order.name }}
{% endif %}
También puedes usar un for loop para iterar sobre una lista de objetos, como las líneas de artículo de un pedido. Por ejemplo, el siguiente código Liquid 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 de Liquid (o de control de flujo):
Puedes transformar los datos de las variables en Liquid mediante filtros. Flow admite todos los Liquid filters de código abierto.
Por ejemplo, el siguiente código Liquid quita un prefijo del nombre de un pedido y muestra lo que queda: {{ order.name | remove: "Order-" }}
Consideraciones para usar variables de Liquid en filtros
Antes de transformar variables con filtros, revisa las siguientes consideraciones:
Flow no admite la notación con punto disponible en algunos filtros. Por ejemplo, Flow admite {{ order.lineItems | size }} pero no {{ order.lineItems.size }}.
Flow no admite la notación con punto para los metacampos. Por ejemplo, no puedes usar {{ order.metafields.custom.hold_note }}. En su lugar, debes iterar sobre los metacampos como se indica en los ejemplos.
Flow no admite usar índices para acceder a elementos en una lista. Por ejemplo, no puedes usar {{ order.lineItems[0].title }}. En su lugar, debes iterar sobre las líneas de artículo como se indica en los ejemplos.
Filtros de fecha
Además de los filtros estándar de Liquid, Flow proporciona filtros de fecha para obtener una fecha relativa a otra y admitir el activador Scheduled time y las funciones de Get data. Estos filtros son: date_minus y date_plus. Por ejemplo:
Para devolver una fecha un día en el futuro: {{ "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, month y year como unidad de duración, tanto en singular (como second) como en plural (como seconds). También puedes indicar los siguientes tipos de unidad personalizable:
Un entero que representa la cantidad de segundos: {{ "now" | date_minus: 3600 }}, donde 3.600 equivale a 1 hora.
Una ISO8601 duration string: {{ "now" | date_minus: "P1Y2D" }}, donde P1Y2D significa 1 año y 2 días.
Filtros criptográficos
Flow ofrece filtros criptográficos para aplicar hashing y para crear códigos de autenticación de mensajes basados en hash (HMAC). Estos filtros son útiles para crear identificadores únicos, sumas de comprobación o para integrarse con sistemas externos que requieren formatos de hash específicos.
Filtros de hash
Shopify Flow es compatible con los siguientes tipos de filtros de hash:
blake3 - Crea un hash BLAKE3 (recomendado para uso general).
Para fines generales de hashing y para nuevas implementaciones, usa blake3, ya que ofrece mayor rendimiento y seguridad que los algoritmos más antiguos. Sin embargo, sha256, sha1 y md5 están disponibles por compatibilidad con sistemas externos.
Ejemplo de uso:
{{ "hello world" | blake3 }} devuelve el hash BLAKE3 de "hello world".
Filtros de HMAC
Para crear un HMAC con una clave secreta, usa uno de los siguientes filtros compatibles:
Quieres mostrar las URL del cliente, el pedido y el producto que participan 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
Quieres convertir un conjunto de etiquetas en un metacampo que sea 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 de producto. En la sección Valor de la acción Actualizar metacampo de producto, agregas el siguiente código Liquid. Este ejemplo supone que solo se deben establecer los valores una vez, cuando se crea el producto, y que el producto tiene dos etiquetas relevantes: color:red y color:orange.
Ejemplo en Liquid para definir la lista de un campo de texto de una sola línea.
Redactar un correo electrónico dinámico para un pedido
Quieres crear un flujo de trabajo para enviar un correo electrónico a un miembro del personal cuando un cliente gaste más de 500 USD en un pedido. Creas un flujo de trabajo con el activador Pedido creado, configuras una condición que sea verdadera si el total del pedido supera 500 USD 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 de uso de variables para proporcionar información del cliente.
Entrada
Salida
Please send a personal thank you note to {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) for placing an order for $ {{ order.totalPriceSet.shopMoney.amount }}.
Envía una nota de agradecimiento personal a Jeanne Dupont (jeanne@example.com) por haber hecho un pedido por 763,42 USD.
Redactar un correo electrónico dinámico para un producto con pocas existencias
Decides que necesitas informar a un miembro del personal cuando el inventario de un producto esté bajando y sea necesario emitir una orden de compra para más existencias. Creas un flujo de trabajo que comienza con el activador Cantidad de inventario modificada y configuras una condición que sea verdadera si la cantidad de inventario anterior es menor o igual a 10. En la sección Mensaje de la acción Enviar correo electrónico interno, usas las siguientes variables.
Ejemplo de uso de variables para proporcionar información del artículo.
Entrada
Salida
Please reorder {{ product.title }}. Email owner@store.com to verify that they've received the purchase order.
Solicita de nuevo High Waist Leggings - Black. Envía un correo electrónico a owner@example.com para verificar que recibieron la orden de compra.
Redactar un correo electrónico dinámico para avisar al personal sobre un pedido fraudulento
Quieres cancelar los pedidos con un nivel de riesgo alto, pero prefieres que el personal cancele el pedido de forma manual. Creas un flujo de trabajo que comienza con el activador Pedido creado y configuras 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 correo electrónico interno, usas las siguientes variables.
Ejemplo de uso de variables para proporcionar información sobre un pedido fraudulento.
Entrada
Salida
Our Shopify store has received an order with a high risk of fraud. We would like to cancel this order right away, before it is sent to production:
{{ order.name }}
{{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }}
{{ order.email }}
Please confirm the new order status. Thanks!
Nuestra tienda Shopify ha recibido un pedido con un alto riesgo de fraude. Nos gustaría cancelar este pedido de inmediato, antes de que se envíe a producción:
#1001
Dupont, Jeanne
jeanne@example.com
Confirma el nuevo estado del pedido. ¡Gracias!
Mostrar las líneas de artículo de un pedido con un bucle for
Cuando se recibe un pedido, puede ser útil enviar un mensaje que contenga los productos del pedido. Puedes hacerlo 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, quieres crear un flujo de trabajo que devuelva una lista con todos los SKU y las 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 un bucle for para mostrar información del pedido.
Entrada
Salida
Order summary:
{% for a in order.lineItems %}
{{a.sku}} ( {{a.quantity}} )
{% endfor %}
Resumen del pedido:
8987097979 (50)
8877778887 (3)
888998898B (1)
Mostrar las líneas de artículo de un pedido con un bucle for e información adicional
Decides agregar más información al correo electrónico, como 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 un bucle for para mostrar información del pedido más detallada.
Entrada
Salida
Order summary:
{% for a in order.lineItems %}
Product: {{a.title}}
SKU: {{a.sku}}
Price (per unit): ${{a.originalUnitPriceSet.shopMoney.amount}}
Quantity: {{a.quantity}}
{% endfor %}
Resumen del pedido:
Producto: High Waist Leggings - Black
SKU: 8987097979
Precio (por unidad): 8,49 USD
Cantidad: 5
Producto: Athletic Socks - Blue
SKU: 888998898B
Precio (por unidad): 5,61 USD
Cantidad: 2
Mostrar algunas líneas de artículo combinando un bucle for con una instrucción if
Necesitas 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 siguientes variables e incluyes una instrucción if en el for loop.
Ejemplo de uso de un bucle for y una instrucción if para mostrar información del pedido para proveedores específicos.
Entrada
Salida
Acme product sold:
{% for x in order.lineItems %}
{% if x.vendor == 'acme-vendor' %}
Product name: {{x.title}}
SKU: {{x.sku}}
{% endif %}
{% endfor %}
Producto Acme vendido:
Nombre del producto: High Waist Leggings - Black
SKU: 8987097979
Objetos de datos complejos en Shopify Flow
Flow permite acceder a casi cualquier dato que esté en la GraphQL Admin API. Esto incluye objetos de datos complejos, como listas y objetos. Sin embargo, hay algunas limitaciones sobre lo que puedes hacer con estos objetos. En esta sección se describen estas limitaciones y se muestran ejemplos de cómo trabajar con ellos.
En lugar de llamar directamente a las listas y a los objetos, itera sobre la lista e incluye solo los campos que necesitas.
Por ejemplo, en lugar de llamar {{ order.lineItems }} directamente, usa el siguiente formato para llamar campos específicos. Estos ejemplos incluyen todos los campos que se incluirían si llamas directamente a la lista o al objeto. Copia y pega los campos que necesites.
Texto
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}