Variáveis do Liquid no Shopify Flow

As variáveis são marcadores de posição que são substituídas por valores quando um fluxo de trabalho é executado. Elas descrevem os atributos dos clientes, pedidos e produtos envolvidos no fluxo. Há variáveis, por exemplo, para o número do pedido, o preço do pedido, o nome do cliente e assim por diante. É possível usá-las em condições para controlar a lógica no fluxo de trabalho ou gerar dados em uma ação.

Sobre o Liquid

É uma linguagem usada para acessar variáveis em ações e escrever código no Flow. A plataforma usa uma variante do Liquid que é mais próxima da biblioteca de código aberto. Já os temas da Shopify usam outra, que é específica e inclui muito mais filtros e tags do que o permitido pelo Flow, além de uma sintaxe diferente para acessar variáveis.

Variáveis do Liquid

É possível incluir variáveis em campos de texto que contenham o link Add variable ("Adicionar variável"). Clique nesse link, logo abaixo do campo relevante, e escolha uma opção da lista.

imagem mostrando os campos que aceitam o Liquid

As variáveis da lista Add a variable ("Adicionar uma variável") são filtradas, ou seja, você só vê o retorno dos itens por etapas antes da etapa atual, como acionadores. O acionador Order created ("Pedido criado"), por exemplo, oferece recursos para pedidos e lojas que permitem usar variáveis relacionadas às configurações do pedido ou da loja acessíveis na API GraphQL Admin. Depois de escolher um item na lista, ele é formatado e adicionado à caixa de texto para você.

Também é possível 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 GraphQL 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

Nesses casos, as tags são bem úteis.

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):

O Flow também é compatível com estas tags de iteração do Liquid:

Filtros

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.

Gerar um valor de metacampo

Você quer mostrar o valor de um metacampo do pedido em um e-mail. É uma string com um namespace custom, uma chave hold_note e o valor Please wait to deliver this order until April 1.. Nesse caso, é preciso criar um fluxo de trabalho com o acionador Order created ("Pedido criado") e usar 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 mostrar um metacampo do pedido
Entrada Saída
{% assign hold_note = order.metafields | where: "namespace", "custom" | where: "key", "hold_note" | first %}
O pedido tem a seguinte observação: {{ hold_note.value }}
O pedido tem a seguinte observação: Aguarde a entrega do pedido até 1º de abril.

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.
Entrada Saída
{% capture mf_value %}
{%- for tags_item in product.tags -%}
{%- if tags_item contains "color:" -%}
"{{- tags_item | remove_first: "color:" | strip -}}",
{%- endif -%}
{%- endfor -%}
{% endcapture -%}
[{{mf_value | remove_last: ","}}]
["vermelho", "laranja"]

Escrever uma mensagem de e-mail dinâmico para um pedido

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

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

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:

{{ order.name }}
{{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }}
{{ order.email }}

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

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

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

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

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.

Tudo pronto para começar a vender com a Shopify?

Experimente de graça