Por que o Shopify Flow não consegue comparar datas (e o que realmente funciona)

Por que o Shopify Flow não consegue comparar datas (e o que realmente funciona)

Se você passou uma tarde tentando fazer o Shopify Flow comparar uma data de metacampo com a data de hoje, não está fazendo errado. O Flow genuinamente não consegue fazer isso de forma limpa, e vale a pena entender os motivos antes de gastar mais uma hora com gambiarras. Esta é a resposta longa, mais o caminho curto para contorná-la.

O problema, dito claramente

Você quer algo que parece simples. Verificar se o metacampo expiry_date de um produto passou e, em caso afirmativo, mover o produto para rascunho. Ou verificar se hoje é a launch_date de um produto e, em caso afirmativo, publicá-lo. Ou disparar uma tag duas semanas antes de uma promoção começar. Essas são as regras de produto baseadas em data de que qualquer loja Shopify suficientemente real eventualmente precisa, e o tipo que o Shopify Flow parece que deveria conseguir resolver.

Só que o Flow não funciona desse jeito. Há três muros distintos que você vai encontrar. A maioria dos comerciantes encontra os três antes de desistir.

Muro 1: Os campos de condição do Flow não aceitam Liquid

Quando você cria uma condição do Flow, compara um valor com uma string fixa. Você pode dizer "tag de produto é igual a on-sale", ou "status do produto é igual a Ativo". O que você não pode dizer é "data do metacampo do produto é menor que hoje", porque "hoje" não é um valor fixo que você possa digitar. Ele muda todos os dias.

A solução intuitiva é o Liquid. Você já usa Liquid no seu tema, viu Liquid nas ações de e-mail do Flow, então tenta o óbvio:

{{ "now" | date: "%Y-%m-%d" }}

E não funciona. Liquid é suportado nos campos de ação do Flow (o corpo de um e-mail, o valor passado a uma requisição HTTP), mas não nos campos de condição. O sistema de condição trata seu Liquid como uma string literal. Sua bela expressão compara os caracteres {{ "now" | date: "%Y-%m-%d" }} com uma data ISO real, o que nunca vai casar.

Isso pega quase todo mundo de surpresa, porque a assimetria não está documentada de forma visível. A superfície do produto sugere que Liquid é cidadão de primeira classe em todo o Flow. Não é.

Muro 2: Você não pode consultar produtos por data de metacampo via API

Talvez você desista do Liquid e tente a outra abordagem óbvia: um Flow agendado que roda diariamente e busca produtos com uma data vencida. É para isso que servem os gatilhos agendados, certo?

Só que a API Admin do Shopify não suporta filtrar produtos por valores de data de metacampo. A consulta de produto suporta filtrar por status, título, fornecedor, tipo de produto, tag, tempo de criação/atualização e um punhado de outros campos de nível superior. Comparação de data de metacampo não está na lista. Não há filtro metafield:custom.expiry_date<today.

A posição oficial do Shopify é que metacampos são dados de extensão flexíveis, não indexados para consultas baratas. Essa é uma decisão arquitetural razoável. Também é o muro que transforma um projeto de uma noite em um muito maior.

Qualquer Flow agendado que queira agir em "produtos com data de validade passada" precisa buscar cada produto, fazer parse do metacampo e filtrar em código. O que nos leva ao muro três.

Muro 3: A solução alternativa Run Code é frágil

O Flow tem uma ação "Run Code" que permite escrever JavaScript dentro de uma automação. Com esforço suficiente, você pode construir um fluxo que faz isto:

  1. Dispara em um agendamento diário.
  2. O Run Code busca produtos em páginas da API Admin GraphQL.
  3. Para cada produto, lê o metacampo custom.expiry_date.
  4. Faz parse da string ISO para uma data, compara com o tempo atual.
  5. Para casos que casam, dispara uma ação de alteração de status.

Funciona. Também está bem distante da promessa "sem código" do Flow.

Você está mantendo JavaScript dentro de uma automação Shopify. Você trata paginação se seu catálogo for maior que uma única página. Você trata metacampos ausentes. Você trata produtos com datas mal formatadas porque alguém editou um CSV à mão. Você trata limites de taxa da API conforme seu catálogo cresce. Se o Shopify depreciar um campo na próxima atualização de versão da API, seu fluxo pode falhar silenciosamente e você só vai perceber da próxima vez que um produto não for arquivado no prazo.

Para um desenvolvedor confortável com essa manutenção, tudo bem. Para um comerciante que só queria que um produto fosse para rascunho quando vencesse, isso é genuinamente demais. E toda conversa que tenho com comerciantes que tentaram termina da mesma forma: construíram, funcionou por um trimestre e depois algo quebrou em silêncio, e eles não perceberam por três semanas.

💡 Para ser justo com o Flow: ele é uma ferramenta genuinamente poderosa para automação de pedidos, segmentação de clientes, alertas de estoque e jornadas pós-compra. Ele não foi projetado para automação de produtos agendada e baseada em data. Tentar fazê-lo cumprir esse papel é ir contra o sentido de como ele foi construído — não é culpa do Flow nem sua.

O que realmente funciona: uma ferramenta feita para o trabalho

O DateCue existe porque eu continuava batendo nesse mesmo muro e me cansei de recomendar Run Code para comerciantes que não mereciam isso. O modelo é direto: você coloca uma data em um metacampo de produto, o DateCue a monitora e, quando a data chega, ele dispara a ação que você configurou. Alteração de status, alteração de tag ou e-mail para a equipe.

Sem Liquid. Sem JavaScript. Sem lógica de paginação de API. Três campos e um botão de salvar.

Aqui está o fluxo de trabalho de vencimento que teria levado horas para construir no Flow:

Metacampo: custom.expiry_date
Gatilho: Depois da data (0 dia)
Ação: Alterar status do produto → Rascunho
Filtro: Status = Ativo
Editor de fluxo de trabalho do DateCue configurado para lidar com o cenário de vencimento que o Flow não consegue
A configuração exata no DateCue.

O DateCue capta cada produto com um metacampo custom.expiry_date, monitora a data e move o produto para rascunho dentro de um minuto após a data passar. O filtro de status Ativo é o guarda-corpo que garante que o DateCue toque apenas em produtos atualmente no ar, então ele não vai re-tocar produtos que você já moveu manualmente para rascunho por outros motivos.

Quão rápido é "em até um minuto", de verdade?

Duas clocks estão rodando. O executor de ações verifica os fluxos de trabalho devidos a cada minuto. A sincronização de produtos que puxa valores frescos de metacampos do Shopify roda a cada cinco minutos. Então, se você definir um metacampo para uma data no passado agora, o DateCue capta o novo valor na próxima sincronização (até cinco minutos) e dispara a ação no próximo tick do executor (até um minuto depois).

Se você precisa que um valor totalmente novo seja captado mais rápido — digamos, está atualizando uma data de lançamento sessenta segundos antes de ela disparar — clique em Sincronizar agora no painel. O metacampo é carregado imediatamente e a ação dispara no próximo tick de minuto.

Para qualquer data definida com antecedência (o que cobre quase todos os usos reais), a ação dispara dentro do mesmo minuto em que a data passa. Defina um lançamento para 10h00 e o produto está no ar até 10h01.

O mesmo modelo cobre mais do que apenas vencimento

A coisa que o Flow não consegue fazer — comparar uma data de metacampo com hoje — é exatamente a primitiva que desbloqueia a maioria das regras de produto baseadas em data. Uma vez que você a tem, os casos de uso se acumulam:

Cada um é um único fluxo de trabalho no DateCue com gatilho e ação diferentes. As coisas que são genuinamente difíceis no Flow — matemática de datas, consultas agendadas, comparações de metacampos — são exatamente o que o DateCue lida nativamente.

Você ainda precisa do Flow?

Quase certamente sim, e tudo bem. O Flow é excelente para as coisas para as quais foi projetado. Marcar pedidos de alto valor, triagem antifraude, jornadas do cliente pós-compra, alertas de estoque baixo para seu armazém, qualquer coisa disparada por um evento de pedido ou de cliente — o Flow lida com tudo isso bem, e o DateCue não tenta.

A divisão é limpa. O Flow trata de eventos que disparam pelo lado do pedido ou do cliente. O DateCue trata de eventos que disparam a partir de uma data em um produto. Eles coexistem sem nenhuma integração, porque não disputam os mesmos gatilhos.

Migrando de um fluxo de trabalho Run Code

Se você já tem um fluxo de trabalho Run Code que cuida da automação de produtos baseada em data, a migração é curta. O padrão abaixo costuma funcionar:

  1. Instale o DateCue na Shopify App Store. O plano gratuito basta para testar.
  2. Recrie a ação em um fluxo de trabalho do DateCue: escolha o metacampo, o gatilho e a ação.
  3. Desative o fluxo de trabalho Run Code no Flow (não o exclua ainda).
  4. Acompanhe o registro de execução do DateCue por uma semana. Cada ação disparada aparece com o produto, a data que a disparou e o resultado.
  5. Depois de confirmar que o DateCue está fazendo o trabalho, exclua o antigo fluxo de trabalho Run Code.

A maioria das migrações leva menos de uma hora. A parte lenta é a verificação, não a configuração.

Perguntas frequentes

Por que o Shopify Flow não consegue comparar datas nativamente?

Os campos de condição do Flow são avaliados no momento do gatilho e aceitam apenas valores estáticos. Cálculos de data precisam de um "hoje" dinâmico que muda a cada verificação. O Liquid funciona nos campos de ação do Flow, mas não nos campos de condição, então você não pode inserir uma expressão Liquid para calcular a data de hoje e fazer o Flow respeitá-la. O sistema de gatilhos também não suporta consultas agendadas filtradas por data de metacampo.

A solução alternativa Run Code no Flow é realmente confiável?

Pode funcionar, mas requer manutenção contínua. Você está escrevendo JavaScript dentro do Flow que busca produtos, trata paginação para catálogos grandes, faz parsing de strings de data de metacampos e cai com elegância quando o metacampo está ausente. Se os contratos de API do Shopify mudarem, talvez você só perceba quando um lançamento falhar silenciosamente. É viável para um desenvolvedor preparado para mantê-lo. É superdimensionado para a maioria dos comerciantes.

Ainda preciso do Shopify Flow se eu usar o DateCue?

Provavelmente sim. O Flow é excelente para marcação de pedidos, jornadas do cliente, alertas de estoque e fluxos de trabalho antifraude. O DateCue substitui o Flow apenas para automação de produtos disparada por data: alterações de status, alterações de tags e e-mails para a equipe disparados a partir de datas de metacampos de produtos. As duas ferramentas convivem lado a lado sem conflito.

Quais tipos de metacampo o DateCue suporta?

Os tipos de metacampo date e date_time em produtos, em qualquer namespace e chave. Se você consegue editar o valor no editor de metacampos do Shopify, o DateCue consegue monitorá-lo.

Quão rápido o DateCue age depois que uma data passa?

O DateCue executa as ações devidas a cada minuto. Novos valores de metacampos do Shopify são detectados dentro de uma janela de sincronização de 5 minutos. Se você acabou de alterar uma data de lançamento e precisa que ela seja captada imediatamente, clique em Sincronizar agora no painel e o novo valor é carregado na hora.

Quanto custa o DateCue?

O DateCue é gratuito para sempre para até 100 cues de produto por mês. Os planos pagos começam em US$ 9/mês (Starter: 10.000 cues) e vão até US$ 19/mês (Scale: 100.000 cues, além de webhooks). Todos os planos pagos incluem uma avaliação gratuita de 14 dias.

O DateCue pode substituir um fluxo de trabalho Flow Run Code que já criei?

Na maioria dos casos, sim. Se seu fluxo de trabalho Run Code segue o padrão padrão (buscar produtos, comparar datas de metacampos, alterar status ou tags), um fluxo de trabalho do DateCue faz a mesma coisa em três campos. Mantenha o fluxo de trabalho do Flow arquivado em vez de excluído por uma ou duas semanas enquanto verifica se o DateCue se comporta como esperado e depois aposente-o.

Matt Burrell

Matt Burrell

Fundador da Ripen Studio. Construí o DateCue porque continuava esbarrando neste mesmo muro e me cansei de recomendar Run Code para comerciantes que não mereciam isso. Saiba mais sobre o Matt.

Pule as gambiarras do Flow. Grátis para sempre.

Um fluxo de trabalho, cinquenta produtos, sem cartão. Configure sua primeira automação baseada em data em cinco minutos.

Instalar grátis no Shopify

Plano gratuito: 1 fluxo de trabalho, 50 produtos, 100 cues/mês. Faça upgrade apenas se ultrapassar.