Executar código

A ação Run code (Executar código) executa JavaScript. É possível enviar dados gerados em etapas anteriores do fluxo de trabalho como entrada na ação Run code (Executar código) e receber como saída os valores a serem usados nas etapas posteriores.

Campos

A ação Run code (Executar código) contém os campos a seguir.

Campos usados na ação "Run code" (Executar código).
CampoDescrição
EntradaObrigatório. Uma consulta GraphQL para usar dados de etapas anteriores como entrada na ação Run code (Executar código).
SaídaObrigatório. Uma representação dos dados a serem retornados pela ação, na linguagem de definição de esquema (SDL, na sigla em inglês) do GraphQL.
CódigoObrigatório. O JavaScript que a ação Run code (Executar código) vai executar.

Dados de entrada

É possível usar dados de entrada de etapas que ocorrem antes da ação Run code ("Executar código"). Para incluí-los, escreva uma consulta GraphQL no campo Definir entradas. Os dados retornados pela consulta ficarão disponíveis como o argumento input para a função marcada com export default, chamada de main por convenção.

A consulta inserida é para dados do ambiente Flow, e não para a API Shopify Admin. Por isso, não é possível inserir uma consulta da Shopify nos dados de entrada. Além disso, o Flow manipula edges e nodes na consulta, então você não precisa adicioná-los nem usar outra sintaxe de paginação.

Confira um exemplo de entrada que providencia as observações 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
}

Também é possível desestruturar as entradas na assinatura da função:

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

Metacampos

Para acessar valores de metacampo único na ação "Run code", primeiro adicione o metacampo aos dados do ambiente do Flow. Isso pode ser feito em qualquer ação ou estado que não seja "Run code". Por exemplo, você pode adicionar uma ação Saída de log e depois seguir as instruções para adicionar o metacampo.

Depois que um metacampo tiver sido adicionado ao ambiente de fluxo de trabalho, você poderá acessá-lo em "Run code". Por exemplo, suponha que você adicionou um metacampo de pedido com o alias de giftMessage. Em seguida, acesse-o na consulta de entrada:

{
  order {
    giftMessage {
      value
    }
  }
}

Dados de saída

A ação Run code ("Executar código") pode retornar dados personalizados. Para definir o tipo de dados que o código vai retornar, use o campo Definir saídas e a linguagem de definição de esquema (SDL, na sigla em inglês) do GraphQL. Os tipos de saída aceitos são String, Int, Float, Boolean e ID, que seguem a especificação SDL de como especificar campos, listas e dados personalizados necessários.

Por exemplo, para retornar uma string giftMessage e um número 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 IU do Flow. Para gerar a saída dos dados no código JavaScript, retorne um objeto que coincida com o 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 Gift que contenha uma string message e um número 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 posteriores à ação, use a variável Run code (Executar código), que será digitada de acordo com o esquema Output definido na configuração da ação Run code (Executar código). Essa variável pode ser usada em condições e em ações.

Console.log

Use o console.log para enviar dados ao log de execução do fluxo 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, 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 foi possível usar console.info, console.error ou outras funções na ação Run code (" Executar código").

Exemplo

Confira exemplos da ação "Run code" (Executar código) no repositório de exemplos do Flow.

Limitações

A ação Run code (Executar código) tem limitações, como:

  • A ação "Run code" ("Executar código") é compatível com JavaScript ECMA2020 e não aceita APIs NodeJS, CommonJS ou de importação de módulos.
  • O código não pode fazer chamadas HTTP (fetch).
  • Não é possível usar funções que dependem de aleatoriedade ou do tempo. Os dados de data, como scheduledAt ou createdAt, podem ser passados como entrada.
  • Console.log não faz login no console do navegador.
  • Não é possível adicionar alias de metacampo diretamente na ação "Run code". Veja a seção de metacampos para saber como conseguir isso.

Além disso, estes limites são aplicados:

  • A consulta de dados de entrada é limitada a 5 mil caracteres.
  • O esquema de dados de saída é limitado a 5 mil caracteres.
  • A capacidade de pagamento e a saída de Console.log são limitadas a 50 kB combinados.
  • O código não pode ter mais de 50 mil caracteres.
  • A duração total da execução é limitada a 5 segundos.
  • O uso de memória é limitado a 10 MB.

Roteiro

A equipe do Flow tem planos para adicionar funcionalidades à ação Run code (Executar código) ao longo do tempo. Confira na tabela a seguir as melhorias programadas e as estimativas para datas de entrega.

Plano para melhorias na ação "Run code" (Executar código)
MelhoriaDescriçãoEntrega prevista
RegistroUse `console.log` para exibir dados no log de execução para fins de solução de problemas.Feito.
Chamadas externas à APIUse a busca por JavaScript para chamar APIs.1º trim. de 2025

Modelos

Adicionar item gratuito (com desconto de 100%) a novos pedidos

Este modelo adiciona um item gratuito a novos pedidos, se o item estiver em estoque. Ele verifica o estoque, aplica um desconto de 100% e atualiza o pedido sem notificar o cliente. Essa automação é útil para (1) melhorar a satisfação do cliente por incluir um item gratuito surpresa em seu pedido, (2) promover produtos novos ou menos conhecidos, adicionando-os como amostras gratuitas nos pedidos ou (3) otimizar promoções, automatizando a inclusão e o desconto de itens gratuitos. Ver modelo

Cancelar devoluções inativas

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

Converter tags com um prefixo em um metacampo de produto usando a ação "Run code" ("Executar código")

Este fluxo de trabalho levará tags que começam com um prefixo como "color:" e as adicionará a uma lista de metacampos de produtos. Ele usa a ação "Run code" ("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 com produtos existentes. Ver modelo

Enviar uma notificação quando o cliente realizar o pedido de diversas variantes de um produto

Receba uma notificação por e-mail quando um cliente realizar o pedido de diversas variantes do mesmo produto. Ver modelo

Enviar uma notificação quando o pedido contiver um pacote

Este fluxo de trabalho é iniciado quando um pedido é criado e verifica se algum dos produtos foi comprado como parte de um pacote. Em caso positivo, um e-mail interno será enviado com as informações do pacote. Além disso, é possível usar este fluxo de trabalho como ponto de partida para situações em que é necessário detectar a presença de um pacote em um pedido. Ver modelo

Marcar com tag pedidos com uma campanha UTM associada

Marca com tag pedidos que contêm os nomes de campanhas UTM associadas. Ver modelo

Não encontrou as respostas que está procurando? Estamos sempre à disposição para ajudar você.