Por qué Shopify Flow no puede comparar fechas (y qué funciona realmente)

Por qué Shopify Flow no puede comparar fechas (y qué funciona realmente)

Si has pasado una tarde intentando que Shopify Flow compare una fecha de metacampo con la fecha de hoy, no lo estás haciendo mal. Flow, de verdad, no puede hacerlo limpiamente, y vale la pena entender los motivos antes de gastar otra hora en soluciones alternativas. Esta es la respuesta larga, más el camino corto para esquivar el problema.

El problema, dicho con claridad

Quieres algo que suena sencillo. Comprobar si el metacampo expiry_date de un producto ha pasado y, en ese caso, pasar el producto a borrador. O comprobar si hoy es la launch_date de un producto y, en ese caso, publicarlo. O disparar una etiqueta dos semanas antes de que empiece una promoción. Estas son las reglas de producto basadas en fechas que cualquier tienda Shopify mínimamente real acaba necesitando, y la clase de regla que Shopify Flow parece poder gestionar.

Salvo que Flow no funciona así. Hay tres muros distintos con los que te toparás. La mayoría de los comerciantes choca con los tres antes de rendirse.

Muro 1: los campos de condición de Flow no aceptan Liquid

Cuando construyes una condición de Flow, comparas un valor con una cadena fija. Puedes decir «etiqueta de producto igual a on-sale», o «estado del producto igual a Activo». Lo que no puedes decir es «la fecha del metacampo del producto es menor que hoy», porque «hoy» no es un valor fijo que puedas teclear. Cambia cada día.

La solución intuitiva es Liquid. Ya usas Liquid en tu tema, has visto Liquid en las acciones de correo de Flow, así que pruebas lo obvio:

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

Y no funciona. Liquid está soportado en los campos de acción de Flow (el cuerpo de un correo, el valor pasado a una petición HTTP), pero no en los campos de condición. El sistema de condición trata tu Liquid como una cadena literal. Tu hermosa expresión compara los caracteres {{ "now" | date: "%Y-%m-%d" }} con una fecha ISO real, y nunca van a coincidir.

Esto pilla a casi todo el mundo por sorpresa, porque la asimetría no está documentada de forma destacada. La superficie del producto da a entender que Liquid es un ciudadano de primera clase en todo Flow. No lo es.

Muro 2: no puedes consultar productos por fecha de metacampo a través de la API

Quizá renuncias a Liquid y pruebas el otro enfoque obvio: un Flow programado que se ejecuta a diario y recupera los productos con una fecha caducada. ¿No son para eso los triggers programados?

Salvo que la API Admin de Shopify no admite filtrar productos por valores de fecha de metacampo. La consulta de producto admite filtrar por estado, título, proveedor, tipo de producto, etiqueta, hora de creación/actualización y un puñado más de campos de primer nivel. La comparación de fechas de metacampo no está en la lista. No hay un filtro metafield:custom.expiry_date<today.

La posición oficial de Shopify es que los metacampos son datos de extensión flexibles, no indexados para consultas baratas. Es una decisión de arquitectura razonable. También es el muro que convierte un proyecto de una tarde en uno mucho más grande.

Cualquier Flow programado que quiera actuar sobre «productos con una fecha de expiración pasada» tiene que recuperar cada producto, parsear el metacampo y filtrar en código. Lo que nos lleva al muro tres.

Muro 3: la solución alternativa con Run Code es frágil

Flow tiene una acción «Run Code» que te permite escribir JavaScript dentro de una automatización. Con suficiente esfuerzo, puedes construir un flujo que hace esto:

  1. Se dispara en una programación diaria.
  2. Run Code recupera los productos por páginas desde la API GraphQL Admin.
  3. Para cada producto, lee el metacampo custom.expiry_date.
  4. Parsea la cadena ISO a una fecha, la compara con la hora actual.
  5. Para las coincidencias, dispara una acción de cambio de estado.

Funciona. También está muy lejos de la promesa de «sin código» de Flow.

Estás manteniendo JavaScript dentro de una automatización de Shopify. Gestionas la paginación si tu catálogo es más grande que una sola página. Gestionas los metacampos que faltan. Gestionas los productos con fechas mal formadas porque alguien editó un CSV a mano. Gestionas los límites de tasa de la API a medida que crece tu catálogo. Si Shopify retira un campo en el siguiente cambio de versión de API, tu flujo puede fallar en silencio y solo lo notarás la próxima vez que un producto no se archive a tiempo.

Para un desarrollador cómodo con ese mantenimiento, está bien. Para un comerciante que solo quería que un producto se pusiera en borrador cuando caduca, esto es, sinceramente, demasiado. Y cada conversación que tengo con comerciantes que lo intentaron acaba igual: lo construyeron, funcionó durante un trimestre, luego algo se rompió en silencio y no se dieron cuenta hasta tres semanas más tarde.

💡 Para ser justos con Flow: es una herramienta verdaderamente potente para la automatización de pedidos, la segmentación de clientes, las alertas de inventario y los recorridos posventa. No está diseñada para automatización de productos programada y basada en fechas. Intentar que haga ese trabajo es ir contra la veta de cómo está construida — no es culpa de Flow, ni tuya.

Lo que sí funciona: una herramienta hecha para el trabajo

DateCue existe porque me topaba una y otra vez con este mismo muro y me cansé de recomendar Run Code a comerciantes que no se lo merecían. El modelo es sencillo: pones una fecha en un metacampo de producto, DateCue la vigila y, cuando la fecha vence, dispara la acción que has configurado. Cambio de estado, cambio de etiqueta o correo al personal.

Sin Liquid. Sin JavaScript. Sin lógica de paginación de API. Tres campos y un botón de guardar.

Aquí están los flujos de trabajo de expiración que habrían tardado horas en construirse en Flow:

Metacampo: custom.expiry_date
Temporización: Después de la fecha (0 días)
Acción: Cambiar estado del producto → Borrador
Filtro: Estado = Activo
Editor de flujos de trabajo de DateCue configurado para gestionar el escenario de expiración que Flow no puede
La configuración exacta en DateCue.

DateCue toma cada producto con un metacampo custom.expiry_date, sigue la fecha y lo pasa a borrador en el minuto siguiente al vencimiento. El filtro de estado Activo es la barrera que asegura que DateCue solo toque productos que están actualmente en vivo, así que no volverá a tocar productos que ya hayas pasado a borrador manualmente por otros motivos.

¿A qué velocidad es «en menos de un minuto», realmente?

Hay dos relojes en marcha. El ejecutor de acciones comprueba los flujos de trabajo pendientes cada minuto. La sincronización de productos que recupera los valores frescos de los metacampos desde Shopify se ejecuta cada cinco minutos. Así que si defines un metacampo a una fecha pasada ahora mismo, DateCue recoge el nuevo valor en la siguiente sincronización (hasta cinco minutos) y dispara la acción en el siguiente tick del ejecutor (hasta un minuto después).

Si necesitas que un valor totalmente nuevo se recoja más rápido — pongamos que actualizas una fecha de lanzamiento sesenta segundos antes de que se dispare — pulsa Sincronizar ahora en el panel. El metacampo se carga al momento y la acción se dispara en el siguiente tick de minuto.

Para cualquier fecha definida con antelación (que es casi todo el uso del mundo real), la acción se dispara en el mismo minuto en que pasa la fecha. Define un lanzamiento para las 10:00, el producto está en vivo a las 10:01.

El mismo modelo gestiona más que la simple expiración

Lo que Flow no puede hacer — comparar una fecha de metacampo con hoy — es exactamente la primitiva que desbloquea la mayoría de las reglas de producto basadas en fechas. Una vez que la tienes, los casos de uso se apilan:

Cada uno es un único flujos de trabajo en DateCue con temporización y acción distintas. Las cosas que son genuinamente difíciles en Flow — cálculo de fechas, consultas programadas, comparaciones de metacampos — son exactamente lo que DateCue gestiona de forma nativa.

¿Sigues necesitando Flow?

Casi con seguridad sí, y está bien. Flow es excelente en lo que fue diseñado para hacer. Etiquetar pedidos de alto valor, cribado antifraude, recorridos posventa del cliente, alertas de bajo stock a tu almacén, cualquier cosa disparada por un evento de pedido o un evento de cliente — Flow gestiona todo eso bien, y DateCue no lo intenta.

El reparto es limpio. Flow gestiona los eventos que se disparan desde el lado del pedido o del cliente. DateCue gestiona los eventos que se disparan a partir de una fecha en un producto. Coexisten sin ninguna integración, porque no se disputan los mismos triggers.

Migrar desde unos flujos de trabajo Run Code

Si ya tienes unos flujos de trabajo Run Code que gestionan la automatización de productos basada en fechas, la migración es corta. El patrón siguiente suele funcionar:

  1. Instala DateCue desde la Shopify App Store. El plan gratuito es suficiente para probar.
  2. Recrea la acción en unos flujos de trabajo de DateCue: elige el metacampo, la temporización y la acción.
  3. Desactiva los flujos de trabajo Run Code en Flow (no los borres todavía).
  4. Vigila el registro de ejecución de DateCue durante una semana. Cada acción disparada aparece con el producto, la fecha que la disparó y el resultado.
  5. Una vez confirmado que DateCue hace el trabajo, borra los antiguos flujos de trabajo Run Code.

La mayoría de las migraciones llevan menos de una hora. La parte lenta es la verificación, no la configuración.

Preguntas frecuentes

¿Por qué Shopify Flow no puede comparar fechas de forma nativa?

Los campos de condición de Flow se evalúan en el momento del trigger y solo aceptan valores estáticos. El cálculo de fechas necesita un «hoy» dinámico que cambia en cada comprobación. Liquid funciona en los campos de acción de Flow pero no en los de condición, así que no puedes meter una expresión Liquid para calcular la fecha de hoy y que Flow la respete. El sistema de triggers tampoco admite consultas programadas que filtren por fecha de metacampo.

¿Es realmente fiable la solución alternativa con Run Code en Flow?

Puede funcionar, pero requiere mantenimiento continuo. Estás escribiendo JavaScript dentro de Flow que recupera productos, gestiona la paginación para catálogos grandes, parsea cadenas de fecha de metacampos y se degrada con elegancia cuando el metacampo falta. Si los contratos de la API de Shopify cambian, puede que no lo notes hasta que un lanzamiento falle en silencio. Es viable para un desarrollador dispuesto a hacerse cargo. Es excesivo para la mayoría de los comerciantes.

¿Sigo necesitando Shopify Flow si uso DateCue?

Probablemente sí. Flow es excelente para el etiquetado de pedidos, los recorridos de cliente, las alertas de inventario y los flujos de trabajo antifraude. DateCue sustituye a Flow solo para la automatización de productos disparada por fecha: cambios de estado, cambios de etiqueta y correos al personal disparados a partir de fechas de metacampos de productos. Las dos herramientas conviven sin conflicto.

¿Qué tipos de metacampo admite DateCue?

Los tipos de metacampo date y date_time en productos, en cualquier espacio de nombres y clave. Si puedes editar el valor en el editor de metacampos de Shopify, DateCue puede vigilarlo.

¿A qué velocidad actúa DateCue una vez que pasa una fecha?

DateCue ejecuta las acciones pendientes cada minuto. Los nuevos valores de metacampo de Shopify se detectan en una ventana de sincronización de 5 minutos. Si acabas de cambiar una fecha de lanzamiento y necesitas que se recoja de inmediato, pulsa Sincronizar ahora en el panel y el nuevo valor se carga al momento.

¿Cuánto cuesta DateCue?

DateCue es gratis para siempre para hasta 100 cues de producto al mes. Los planes de pago empiezan en 9 $/mes (Starter: 10.000 cues) y escalan a 19 $/mes (Scale: 100.000 cues, más webhooks). Todos los planes de pago incluyen una prueba gratuita de 14 días.

¿Puede DateCue sustituir unos flujos de trabajo de Flow Run Code que ya he construido?

En la mayoría de los casos, sí. Si tus flujos de trabajo Run Code hacen el patrón estándar (recuperar productos, comparar fechas de metacampo, cambiar estado o etiquetas), unos flujos de trabajo de DateCue hacen lo mismo en tres campos. Mantén los flujos de trabajo de Flow archivados en lugar de borrarlos durante una o dos semanas mientras verificas que DateCue se comporta como esperas, y luego retíralos.

Matt Burrell

Matt Burrell

Fundador de Ripen Studio. Construí DateCue porque me topaba una y otra vez con este mismo muro y me cansé de recomendar Run Code a comerciantes que no se lo merecían. Más sobre Matt.

Esquiva las soluciones alternativas de Flow. Gratis para siempre.

Un flujo de trabajo, cincuenta productos, sin tarjeta requerida. Configura tu primera automatización basada en fechas en cinco minutos.

Instala gratis en Shopify

Plan gratuito: 1 flujos de trabajo, 50 productos, 100 ejecuciones/mes. Pasa a un plan superior solo si te quedas corto.