Ejecutar código

La acción Ejecutar código ejecuta JavaScript. Puedes pasar datos de pasos anteriores del flujo de trabajo como entrada a la acción Ejecutar código y devolver valores para usarlos en los pasos siguientes.

Campos

La acción Ejecutar código incluye los siguientes campos.

Campos usados en la acción Ejecutar código.
CampoDescripción
EntradaObligatorio. Una consulta de GraphQL para usar datos de pasos anteriores como entrada de la acción Ejecutar código.
SalidaObligatoria. Una representación de los datos que devolverá la acción, definida en el lenguaje de definición de esquemas (SDL) de GraphQL.
CódigoObligatorio. El JavaScript que ejecutará la acción Ejecutar código.

Datos de entrada

Los datos de entrada pueden provenir de los pasos anteriores a la acción Ejecutar código. Para incluir estos datos, puedes escribir una consulta GraphQL en el campo Entrada. Los datos que devuelve la consulta estarán disponibles como el argumento input de la función marcada con export default, llamada main por convención.

La consulta de entrada es una consulta de los datos del entorno de Flow, no una consulta al Shopify Admin API. Por lo tanto, no puedes insertar una consulta de Shopify en los datos de entrada. Además, Flow gestiona los edges y nodes de la consulta, así que no necesitas añadirlos ni usar otra sintaxis de paginación.

Ejemplo de entrada que obtiene la nota del pedido y el título de una línea de pedido:

{
  order {
    note
    lineItems {
      title
    }
  }
}

Estos datos se convierten en una variable input que se puede usar en el código:

export default function main(input) {
  // input.order.note
  // input.order.lineItems[0].title
}

Las entradas también se pueden desestructurar en la firma de la función:

export default function main({order}) {
  // order.note
  // order.lineItems[0].title
}

Metacampos

Para acceder a valores individuales de un metacampo en Ejecutar código, primero debes añadir el metacampo a los datos del entorno de Flow. Esto se puede hacer en cualquier acción o condición que no sea Ejecutar código. Por ejemplo, puedes añadir una acción Registrar salida y luego seguir las instrucciones para añadir el metacampo.

Después de añadir un metacampo al entorno del flujo de trabajo, puedes acceder a él en Ejecutar código. Por ejemplo, supongamos que añadiste un metacampo de pedido con el alias giftMessage. Luego puedes acceder a él en tu consulta de entrada:

{
  order {
    giftMessage {
      value
    }
  }
}

Datos de salida

La acción Ejecutar código puede devolver datos personalizados. Para definir el tipo de datos que devolverá el código, usa el campo Output y el lenguaje de definición de esquemas (SDL) de GraphQL. Los tipos de salida admitidos son String, Int, Float, Boolean e ID, que siguen la especificación de SDL para indicar campos obligatorios, listas y datos personalizados.

Por ejemplo, para devolver una cadena llamada giftMessage y un número llamado totalGifts:

type Output {
  "The message to include in the gift"
  giftMessage: String!
  "The total number of gifts"
  totalGifts: Int!
}

Los comentarios son opcionales, pero se usarán para describir los datos en la interfaz de Flow. Para generar esta salida en el código JavaScript, devuelve un objeto que coincida con el tipo:

export default function main(input) {
  // your code
  return {
    giftMessage: 'Hello',
    totalGifts: 1,
  };
}

También puedes definir un tipo personalizado para devolver datos más complejos. Por ejemplo, para devolver un tipo llamado Gift que contenga una cadena llamada message y un número llamado amount:

type Output {
  "The gift to send"
  gifts: [Gift!]!
}

type Gift {
  "The message to include in the gift"
  message: String!
  "The total number of gifts"
  amount: Int!
}

Para acceder a estos datos en los pasos que siguen a esta acción, usa la variable llamada Ejecutar código, que tendrá el tipo según el esquema de Output que definas en la configuración de la acción Ejecutar código. Puedes usar esta variable tanto en condiciones como en acciones.

Console.log

Puedes usar console.log para enviar datos al registro de ejecuciones del flujo de trabajo de Flow con fines de resolución de problemas. La salida será visible en el registro de ejecuciones del flujo de trabajo. Por ejemplo, los siguientes son válidos:

export default function main(input) {
  console.log('Hello, world!');
  //Hello, world!
  console.log(input);
  // { order: { note: 'Hello', lineItems: [ { title: 'World' } ] } }
  console.log(input.order, 'is the order');
  // { note: 'Hello', lineItems: [ { title: 'World' } ] }
  // is the order

  return {
    giftMessage: 'Hello',
    totalGifts: 1,
  };
}

No puedes usar console.info, console.error ni otras funciones en la acción Ejecutar código.

Ejemplo

Los ejemplos para la acción Ejecutar código se encuentran en el repositorio de ejemplos de Flow.

Limitaciones

La acción Ejecutar código tiene las siguientes limitaciones:

  • La acción Ejecutar código es compatible con JavaScript ECMA2020. No es compatible con las API de NodeJS ni de CommonJS, ni con la importación de módulos.
  • El código no puede hacer llamadas HTTP (fetch).
  • No se pueden usar funciones aleatorias ni basadas en el reloj. Se pueden pasar datos de fecha, como scheduledAt o createdAt, como entrada.
  • Console.log no escribe en la consola del navegador.
  • Para reducir el tamaño de la carga, la salida de datos solo devuelve las variables que se usan en los pasos posteriores.
  • No puedes agregar un alias de metacampo directamente en la acción Ejecutar código. Para hacerlo, revisa la sección Metacampos de esta página.

Además, se aplican los siguientes límites:

  • La consulta de datos de entrada está limitada a 5.000 caracteres.
  • El esquema de datos de salida está limitado a 5.000 caracteres.
  • La carga de datos de salida y la salida de Console.log están limitadas a un total combinado de 50 KB.
  • El código no puede superar los 50.000 caracteres.
  • La duración total de la ejecución está limitada a 5 segundos.
  • El uso de memoria está limitado a 10 MB.

Plantillas

Agregar un artículo gratis (descuento del 100 %) a los pedidos nuevos

Esta plantilla agrega un artículo gratis a los pedidos nuevos cuando el artículo está en existencias. Verifica el inventario, aplica un descuento del 100 % y actualiza el pedido sin notificar a la clientela. Este flujo de trabajo puede ayudar a automatizar los siguientes escenarios:

  • Mejorar la satisfacción de la clientela mediante la inclusión de un artículo sorpresa gratis en el pedido.
  • Promocionar productos nuevos o menos conocidos mediante su inclusión como muestras gratuitas en los pedidos.
  • Optimizar las promociones mediante la automatización de la inclusión y el descuento de artículos gratuitos.

Ver plantilla

Cancelar devoluciones inactivas

Cancela automáticamente una devolución que no se haya reembolsado ni repuesto en inventario dentro de un periodo determinado. Ver plantilla

Convertir etiquetas con un prefijo en un metacampo de producto con la acción Ejecutar código

Este flujo de trabajo toma etiquetas que comienzan con un prefijo como 'color:' y las agrega a una lista de metacampos de producto. Usa la acción Ejecutar código para analizar las etiquetas y los elementos existentes en la lista de metacampos. El flujo de trabajo se ejecuta cuando se crea un producto, pero se puede ejecutar manualmente en productos existentes. Ver plantilla

Enviar notificación cuando un pedido incluya varias variantes de un producto

Recibir una notificación por correo electrónico cuando un pedido incluya varias variantes de un mismo producto. Ver plantilla

Enviar notificación cuando un pedido incluya un paquete

Este flujo de trabajo se inicia cuando se crea un pedido y verifica si alguno de los productos se compró como parte de un paquete. Si se detecta un paquete, se envía un correo electrónico interno con los detalles. Además, puedes usar este flujo de trabajo como punto de partida para cualquier caso de uso que deba detectar la presencia de un paquete dentro de un pedido. Ver plantilla

Etiquetar pedidos con la campaña UTM asociada

Agrega etiquetas a los pedidos que contienen los nombres de cualquier campaña UTM asociada. Ver plantilla