As variáveis são marcadores de posição que são definidas no Liquid. Quando o fluxo de trabalho é executado, elas são substituídas por valores da API GraphQL Admin. Além disso, as variáveis descrevem os atributos dos clientes, pedidos e produtos envolvidos no fluxo de trabalho, por exemplo: o número do pedido, o preço do pedido, o nome do cliente e assim por diante. É possível usá-las dentro de condições para controlar a lógica no fluxo de trabalho ou gerar dados de uma ação.
É possível usar o Liquid para incluir variáveis a qualquer campo de texto que contenha o link Adicionar variável. Clique nesse link, logo abaixo do campo relevante, e escolha uma opção da lista.
As variáveis na lista "Add a variable" (Adicionar uma variável) são filtradas para que você use apenas as variáveis retornadas por etapas anteriores à etapa atual, como acionadores. Por exemplo, o acionador "Order Created" (Pedido criado) fornece recursos para pedidos e lojas a partir da API Admin que podem ser inseridos como variáveis. Depois de escolher uma variável da lista, ela é adicionada à caixa de texto como Liquid formatado adequadamente.
Outra opção é escrever o código do Liquid direto no bloco de texto. Use a variável {{ order.name }}, por exemplo, para mostrar a string do pedido exibida no admin da Shopify (como order-123).
Como o Flow usa a API Admin para recuperar os dados utilizados no Liquid, a sintaxe da variável segue o padrão "camel case". Para acessar a data de criação de um produto, por exemplo, insira {{ product.createdAt }}. Se você usa a sintaxe do Liquid em um tema da Shopify, insira {{ product.created_at }}.
Tags condicionais e de iteração do Liquid
A linguagem também permite usar tags para realizar as seguintes ações:
Escrever declarações condicionais, como saber se o total de um pedido é maior que R$ 100
Fazer iterações por uma lista de objetos, como gerar dados para cada item de linha em um pedido
O código a seguir, por exemplo, mostra o número de pedido se o total é maior que R$ 100:
{% if order.totalPriceSet.shopMoney.amount > 100 %}
Order number: {{ order.name }}
{% endif %}
Também é possível usar um for loop para fazer iterações por uma lista de objetos, como itens de linha de um pedido. No código abaixo, há instruções para mostrar o nome de cada item de linha de um pedido:
{% for li in order.lineItems %}
{{ li.title }}
{% endfor %}
O Flow é compatível com estas tags condicionais do Liquid (ou de controle de fluxo):
Os filtros permitem transformar dados no Liquid. O Flow é compatível com todos os filtros de código aberto do Liquid.
O código a seguir, por exemplo, remove um prefixo do nome de um pedido e gera o texto restante: {{ order.name | remove: "Order-" }}
Além dos filtros-padrão, o Flow oferece filtros de data para indicar uma data em relação a outra, úteis para o acionador Scheduled time ("Horário agendado") e os recursos Get data ("Coletar dados"): date_minus e date_plus.
Para retornar uma data um dia no futuro, use:{{ "now" | date_plus: "1 day" }}
Se quer retornar uma data um dia antes, utilize:{{ "now" | date_minus: "1 day" }}
Esses filtros aceitam second, minute, day, week, month e year como unidade de duração, tanto singular (como second) quanto plural (como seconds). Também é possível indicar um número inteiro (no caso de segundos), Por exemplo:{{ "now" | date_minus: 3600 }}
Outra opção é usar uma string de duração ISO8601, em que P1Y2D significa 1 ano e 2 dias:{{ "now" | date_minus: "P1Y2D" }}
Informações sobre o uso de variáveis do Liquid em filtros
No Flow, não é permitido usar a notação de ponto disponível para alguns filtros. É possível utilizar, por exemplo, {{ order.lineItems | size }}, mas não {{ order.lineItems.size }}.
O mesmo vale para metacampos: em vez de usar {{ order.metafields.custom.hold_note }}, por exemplo, é preciso recorrer a loops, como indicado na próxima seção.
O Flow não é compatível com o uso de índices para acessar itens de uma lista. Por exemplo, não é possível usar {{ order.lineItems[0].title }}. Em vez disso, é necessário recorrer a loops sobre os itens de linha, como descrito nos exemplos.
Exemplos
Para ter uma noção melhor de como usar variáveis do Liquid, veja os exemplos abaixo.
URLs de saída para recursos
Você quer exibir URLs de cliente, pedido e produto envolvidos em um fluxo de trabalho.
# 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>
Converter uma lista de tags em um metacampo
Você quer converter um conjunto de tags em um metacampo que é uma lista de campos de texto de linha única. Para isso, você cria um fluxo de trabalho com o acionador Product added to store ("Produto adicionado à loja") e usa a ação Update product metafield ("Atualizar metacampo do produto"). Na seção Value ("Valor") da ação Update product metafield ("Atualizar metacampo do produto"), você adiciona o código do Liquid abaixo. Este exemplo pressupõe que você só precisa definir os valores uma vez quando o produto é criado e que o item tem duas tags relevantes: color:red e color:orange.
Exemplo de Liquid para definir a lista de um campo de texto de linha única.
### Escrever uma mensagem de e-mail dinâmico para um pedido {#dynamic-email}
Digamos que você queira criar um fluxo de trabalho para enviar um e-mail a um funcionário quando um cliente gastar mais de R$ 500 em um pedido. Para isso, crie um fluxo com o acionador Order created ("Pedido criado"), defina uma condição que seja verdadeira se o total do pedido for superior a R$ 500 e use a ação Send internal email ("Enviar e-mail interno"). Na seção Message ("Mensagem") da ação Send internal email ("Enviar e-mail interno"), use as variáveis abaixo.
Exemplo de uso de variáveis para fornecer informações do cliente.
Entrada
Saída
Envie uma nota pessoal de agradecimento a {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) pelo pedido de R$ {{ order.totalPriceSet.shopMoney.amount }} realizado.
Envie uma nota pessoal de agradecimento a Jane Oliveira (jane@exemplo.com.br) pelo pedido de R$ 763,42 realizado.
### Escrever uma mensagem de e-mail dinâmico para um produto com estoque baixo {#dynamic-email-product}
Você decide que precisa informar um membro da equipe quando o estoque de produtos estiver baixo e for necessário fazer um pedido para reabastecê-lo. Para isso, crie um fluxo de trabalho que inicie com o acionador Inventory quantity changed ("Volume de estoque alterado") e defina uma condição que seja verdadeira se o volume anterior for menor ou igual a 10. Na seção Message ("Mensagem") da ação Send internal email ("Enviar e-mail interno"), use as variáveis abaixo.
Exemplo de uso de variáveis para fornecer informações de itens.
Entrada
Saída
Por favor, renove o estoque de {{ product.title }}. Envie um e-mail para titular@loja.com.br para confirmar se o pedido de compra foi recebido.
Por favor, renove o estoque de Leggings cintura alta - preto. Envie um e-mail para titular@loja.com.br para confirmar se o pedido de compra foi recebido.
### Escrever uma mensagem de e-mail dinâmico para notificar os membros da equipe sobre um pedido fraudulento {#dynamic-email-fraud}
Você quer cancelar pedidos que tenham um nível de risco alto, mas prefere que a equipe faça o cancelamento manual. Para isso, crie um fluxo de trabalho que inicie com o acionador Order created ("Pedido criado") e defina uma condição que seja verdadeira se o nível de risco do pedido for igual a "High" ("Alto"). Na seção Message ("Mensagem") da ação Send internal email ("Enviar e-mail interno"), use as variáveis abaixo.
Exemplo de uso de variáveis para fornecer informações sobre um pedido fraudulento.
Entrada
Saída
Nossa loja da Shopify recebeu um pedido com alto risco de fraude. Queremos cancelá-lo imediatamente, antes que ele seja enviado para produção:
Por favor, confirme o novo status do pedido. Obrigado!
Nossa loja da Shopify recebeu um pedido com risco alto de fraude. Queremos cancelá-lo imediatamente, antes que ele seja enviado para produção:
nº 1001 Oliveira, Joana joana@exemplo.com.br
Por favor, confirme o novo status do pedido. Obrigado!
### Gerar os itens de linha de um pedido com um loop for {#output-line-items}
Quando um pedido é recebido, pode ser útil enviar uma mensagem que contenha os produtos solicitados. Para isso, use for loop, que executa repetidamente um bloco de código. Os campos de texto compatíveis com variáveis também aceitam for loops e o objeto forloop.
Por exemplo, digamos que você queira criar um fluxo de trabalho que retorne uma lista de todas as SKUs e quantidades de um pedido. Na seção Message ("Mensagem") da ação Send internal email ("Enviar e-mail interno"), use as variáveis abaixo.
Exemplo de uso de loop para fornecer informações do pedido.
Entrada
Saída
Resumo do pedido: {% for a in order.lineItems %} SKU: {{a.sku}} ( {{a.quantity}} ), {% endfor %}
Resumo do pedido: 8987097979 (50) 8877778887 (3) 888998888B (1)
### Gerar os itens de linha de um pedido com um loop for com informações adicionais {#output-line-items-additional}
Você decide adicionar mais dados ao e-mail, incluindo nome do produto, SKUs, preço por item e informações de frete do cliente. Na seção Message ("Mensagem") da ação Send internal email ("Enviar e-mail interno"), use as variáveis abaixo.
Exemplo de uso de loop for para fornecer informações de pedido mais detalhadas.
Entrada
Saída
Resumo do pedido: {% for a in order.lineItems %} Produto: {{a.title}} SKU: {{a.sku}} Preço (por unidade): R$ {{a.originalUnitPriceSet.shopMoney.amount}} Quantidade: {{a.quantity}} {% endfor %}
Resumo do pedido: Produto: Leggings de cintura alta - preto SKU: 8987097979 Preço (por unidade): R$ 8,49 Quantidade: 5 Produto: Meias esportivas - azul SKU: 88898898B Preço (por unidade): R$ 5,61 Quantidade: 2
### Gerar alguns itens de linha pela combinação de um loop for com uma instrução if {#output-line-items-if}
Você precisa rastrear os itens vendidos que são fornecidos por um fabricante específico. Na seção Message ("Mensagem") da ação Send internal email ("Enviar e-mail interno"), use as variáveis abaixo e inclua uma instrução if em for loop.
Exemplo de loop for e uso da instrução "if" para fornecer informações do pedido a fornecedores específicos.
Entrada
Saída
Produto Acme vendido: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} Nome do produto: {{x.title}} SKU: {{x.sku}} {% endif %} {% endfor %}
Produto Acme vendido: Nome do produto: Leggings de cintura alta - preto SKU: 8987097979
## Objetos de dados complexos no Shopify Flow {#complex-data-objects}
O Flow permite que você acesse quase todos os dados que estão na API Admin GraphQL, incluindo objetos de dados complexos como listas e objetos. No entanto, existem algumas limitações relacionadas às ações permitidas nesses objetos. Esta seção descreve as limitações e apresenta exemplos de como trabalhar com elas.
Em vez de chamar listas e objetos diretamente, use um loop e inclua apenas os campos desejados.
Por exemplo, em vez de chamar diretamente {{ order.lineItems }}, use o formato a seguir para chamar campos específicos. Esses exemplos incluem todos os campos que seriam incluídos ao chamar a lista ou o objeto diretamente. Copie e cole os campos necessários.
Text
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}