Executar código

A ação Executar código executa um código JavaScript. É possível transmitir dados de etapas anteriores no fluxo de trabalho como entrada para a ação Executar código e retornar valores para serem usados nas etapas seguintes.

Campos

A ação Executar código contém os seguintes campos.

Campos usados na ação Executar código.
CampoDescrição
EntradaObrigatório. Uma consulta GraphQL para usar os dados de etapas anteriores como entrada para a ação Executar código.
SaídaObrigatório. Uma representação dos dados a serem retornados pela ação, definida na SDL (linguagem de definição de schema) do GraphQL.
CódigoObrigatório. O código JavaScript que a ação Executar código executará.

Dados de entrada

É possível transmitir dados de entrada de etapas que ocorrem antes da ação Executar código. Para incluir esses dados, escreva uma consulta GraphQL no campo Entrada. Os dados retornados da consulta estarão disponíveis como o argumento input para a função marcada com export default, chamada de main por convenção.

A consulta de entrada é uma consulta de dados do ambiente do Flow, e não da Shopify Admin API. Portanto, não é possível inserir uma consulta da Shopify nos dados de entrada. Além disso, o Flow processa os edges e nodes na consulta, então não é necessário adicionar esses ou outros tipos de sintaxe de paginação à consulta.

Um exemplo de entrada que obtém uma observação do pedido e o título de um item de linha:

{
  order {
    note
    lineItems {
      title
    }
  }
}

Esses dados são convertidos em uma variável input que pode ser usada no código:

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

As entradas também podem ser desestruturadas na assinatura da função:

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

Metacampos

Para acessar valores de metacampo únicos em Executar código, primeiro adicione o metacampo aos dados de ambiente do Flow. Isso pode ser feito em qualquer ação ou condição, exceto Executar código. Por exemplo, você pode adicionar uma ação Registrar saída e seguir as instruções para adicionar o metacampo.

Depois que um metacampo é adicionado ao ambiente do fluxo de trabalho, é possível acessá-lo em Executar código. Por exemplo, suponha que você adicionou um metacampo de pedido com o nome de alias giftMessage. Em seguida, é possível acessá-lo na consulta de entrada:

{
  order {
    giftMessage {
      value
    }
  }
}

Dados de saída

A ação Executar código pode retornar dados personalizados. Para definir o tipo dos dados que o código retornará, use o campo Saída e a linguagem de definição de esquema (SDL) do GraphQL. Os tipos de saída compatíveis são String, Int, Float, Boolean e ID, que seguem a especificação da SDL sobre como especificar campos obrigatórios, listas e dados personalizados.

Por exemplo, para retornar uma string chamada giftMessage e um número chamado totalGifts:

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

Os comentários são opcionais, mas serão usados para descrever os dados na interface do Flow. Para gerar esses dados no código JavaScript, retorne um objeto que corresponda ao tipo:

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

Também é possível definir um tipo personalizado para retornar dados mais complexos. Por exemplo, para retornar um tipo chamado Gift que contém uma string chamada message e um número chamado 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 acessar esses dados nas etapas seguintes a esta ação, use a variável chamada Executar código, que será tipada de acordo com o esquema de Saída definido na configuração da ação Executar código. Você pode usar essa variável em condições e ações.

Console.log

É possível usar o console.log para gerar dados no log de execução de fluxos de trabalho do Flow para fins de solução de problemas. A saída ficará visível no log de execução do fluxo de trabalho. Por exemplo, os seguintes são 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,
  };
}

Não é possível usar console.info, console.error ou outras funções na ação Executar código.

Exemplo

Exemplos da ação de código podem ser encontrados no repositório de exemplos do Flow.

Limitações

A ação Executar código tem as seguintes limitações:

  • A ação Executar código é compatível com JavaScript ECMA2020. Ela não é compatível com as APIs do NodeJS ou do CommonJS nem com a importação de módulos.
  • O código não pode fazer chamadas HTTP (fetch).
  • Não é possível usar funções aleatórias ou baseadas em relógio. Dados de data, como scheduledAt ou createdAt, podem ser transmitidos como entrada.
  • O Console.log não registra no console do navegador.
  • Para economizar no tamanho do payload, o payload de dados de saída retorna apenas as variáveis usadas nas etapas posteriores.
  • Não é possível adicionar um apelido de metacampo diretamente na ação Executar código. Para fazer isso, consulte a seção Metacampos desta página.

Além disso, os seguintes limites são aplicados:

  • A consulta de dados de entrada é limitada a 5.000 caracteres.
  • O esquema de dados de saída é limitado a 5.000 caracteres.
  • O payload de dados de saída e a saída do Console.log são limitados a um total combinado de 50 KB.
  • O código não pode ter mais de 50.000 caracteres.
  • A duração total da execução é limitada a 5 segundos.
  • O uso de memória é limitado a 10 MB.

Modelos

Adicionar item grátis (com 100% de desconto) a novos pedidos

Este modelo adiciona um item grátis com desconto a novos pedidos quando o item está em estoque. Ele verifica o estoque, aplica um desconto de 100% e atualiza o pedido sem notificar o cliente. Esse fluxo de trabalho pode ajudar a adicionar automação aos seguintes cenários:

  • Aumentar a satisfação do cliente com a inclusão de um item grátis surpresa no pedido.
  • Promover produtos novos ou menos conhecidos adicionando-os como amostras grátis aos pedidos.
  • Agilizar as promoções com a automação da inclusão e do desconto de itens grátis.

Ver modelo

Cancelar devoluções inativas

Cancelar automaticamente uma devolução que não foi reembolsada ou reabastecida em um determinado período. Ver modelo

Converter tags com prefixo em um metacampo de produto com a ação Executar código

Este fluxo de trabalho usa tags que começam com um prefixo, como 'color:', e as adiciona a uma lista de metacampos de produto. Ele usa a ação Executar código para analisar as tags e os itens existentes na lista de metacampos. O fluxo de trabalho é executado quando um produto é criado, mas pode ser executado manualmente em produtos existentes. Ver modelo

Enviar notificação quando um cliente pede várias variantes de um produto

Receber uma notificação por e-mail quando um cliente pede várias variantes do mesmo produto. Ver modelo

Enviar notificação quando o pedido contiver um pacote

Este fluxo de trabalho começa quando um pedido é criado e verifica se algum dos produtos no pedido foi comprado como parte de um pacote. Em caso positivo, um e-mail interno é enviado com os detalhes do pacote. Além disso, é possível usar este fluxo de trabalho como ponto de partida para qualquer caso de uso que precise detectar a presença de um pacote em um pedido. Ver modelo

Marcar pedidos com a tag da campanha UTM associada

Adiciona tags a pedidos que contêm os nomes de quaisquer campanhas UTM associadas. Ver modelo