Sincronizar automaticamente os preços dos pacotes quando houver alterações nos preços das variantes
Sincronize automaticamente o preço das variantes de pacotes Shopify Bundles usando Shopify Flow quando o preço de um componente mudar.
Ao utilizar o aplicativo Shopify Bundles para criar pacotes de produtos, a alteração do preço de uma variante de um produto componente não atualiza automaticamente o preço da variante do pacote. O gatilho “Product Variant Price Changed” disponível em Workflow Trigger Extensions resolve essa questão ao detectar a alteração de preço e, automaticamente, recalcular e atualizar o preço da variante do pacote.
Vamos considerar o seguinte cenário para compreender como podemos utilizar o gatilho “Alteração no preço da variante do produto” para manter os preços dos pacotes sincronizados.
Cenário: Atualização automática do preço do pacote quando o preço de uma variante de componente é alterado
Imagine que o(a) senhor(a) tenha um produto em pacote (por exemplo, um pacote de camisetas) criado com o aplicativo “Shopify: Bundles”. O pacote contém três produtos componentes: camiseta preta, camiseta cinza e camiseta branca, cada uma com preço de € 10,00 por variante. O preço da variante do pacote é de €30,00 (a soma dos preços de todos os produtos que o compõem). Quando o senhor alterar o preço da variante de um produto que compõe o pacote, este Shopify Flow atualizará automaticamente o preço da variante correspondente do pacote.
Ative este gatilho nas configurações do aplicativo -> Variantes do produto -> Alterações no preço das variantes
Alteração no preço da variante do produto
Obtenha o produto principal do pacote, calcule os preços atualizados das variantes e atualize em massa os preços das variantes do pacote por meio da API de administração
Guia em vídeo
Você também pode acompanhar os passos visualmente neste vídeo (o vídeo não tem áudio; você pode ajustar a velocidade do vídeo de acordo com sua necessidade)
Como faremos com que Shopify Flow funcione
Compreendendo a configuração
- Temos um produto composto (por exemplo, camiseta cinza) com as variantes P, M, G, GG, XGG, cada uma com o preço de € 10,00.
- Temos um produto em pacote criado com o aplicativo “Shopify Bundles”. Ele contém três produtos agrupados (camiseta preta, camiseta cinza, camiseta branca), cada um com cinco variantes. O preço da variante do pacote é de € 30,00 (soma dos preços dos componentes: 3 × € 10,00).
Aqui, o senhor pode ver visualmente as etapas seguidas:
- No “Workflow Trigger Extensions”, abra a seção “Gatilhos”, procure por “Price” e ative a opção “Variante do produto Price Changed”. É necessário ter acesso aos dados de produtos, variantes e coleções; o aplicativo solicitará essa autorização caso ela não esteja disponível.
- Crie um novo fluxo de trabalho em branco no aplicativo Shopify Flow e selecione o gatilho “Alteração no preço da variante do produto” no aplicativo “Workflow Trigger Extensions”
- Adicione uma ação “Obter dados do produto” para recuperar o produto alterado por meio de uma consulta avançada, ordenada por “data de criação” em ordem crescente. Esta etapa busca as informações do pacote pai do produto por meio do campo
productParents. A consulta é a seguinte:id:{{productVariant.product.id | split: "gid://shopify/Product/" | last}} - Adicione uma etapa de código “Executar” para extrair o ID do produto pai do pacote a partir do resultado de
getProductData. O código extrai os IDs dos produtos pais deproductParentse cria uma stringidsConditionpara consulta.
A etapa “Executar código” utiliza a seguinte entrada GraphQL, código JavaScript e saídas para obter os IDs dos produtos pai:
Etapa “Executar código” que mostra a entrada GraphQL, o código JavaScript e a pré-visualização da saída


{
getProductData {
productParents {
id
}
}
}export default function main(input) {
const productIds = input.getProductData[0]?.productParents?.map(p => p.id) ?? [];
const productId = productIds[0] ?? null;
const idsCondition = productIds
.map(gid => "id:" + gid.split("gid://shopify/Product/").pop())
.join(" OR ");
return {
productId: productId,
productIds: productIds,
idsCondition: idsCondition,
};
}type Output {
productId: String
productIds: [String!]!
idsCondition: String!
}- Adicione uma etapa “Condição” que verifique se a saída do código de execução
productIdnão está vazia e se existe. Isso garante que só prosseguiremos quando o produto alterado fizer parte, de fato, de um pacote. - Verdadeiro → continuar atualizando o preço do pacote
- Falso → parar (o produto não é um componente do pacote)
- Se a condição for Verdadeira, adicione outra ação “Obter dados do produto (1)” para buscar os dados de variantes e preços do produto do pacote pai, utilizando a função
idsConditionda etapa “Executar código”. - Adicione uma segunda etapa “Executar código (1)” para calcular os novos preços das variantes de pacote com base nos preços atualizados dos componentes. Essa etapa gera uma matriz de tipo
variantPricescom os novos preços para cada variante de pacote.
Esta etapa “Executar código (1)” recalcula os preços das variantes do pacote com base no preço atualizado do componente. Veja o que ela faz: Primeiro, ela obtém duas informações essenciais do gatilho:
changedVariantIduna variante que acaba de ser alterada (...158920)newPriceo novo preço dessa variante (11.00). Em seguida, o sistema percorre todas as variantes do pacote e recalcula o preço total de cada uma. Cada variante do pacote possui três variantes de componentes (camiseta preta, camiseta cinza, camiseta branca). Para cada componente, verifica-se: esta é a variante que acabou de ser alterada? Se sim, utilizenewPrice(11,00) em vez do preço desatualizado ainda armazenado em Shopify (10,00). Se não, utilize o existentecomponent.productVariant.price.It soma os preços dos componentes para obter o novo preço da variante do pacote. O senhor pode ver isso em funcionamento nos seus dados de saída. Observe uma variante...088840: seus componentes incluem...158920(a variante alterada). Portanto, seu preço é 11 + 10 + 10 = 31, enquanto todas as outras variantes do pacote ainda totalizam 30, pois nenhum de seus componentes foi alterado.Essa é a principal conclusão desta etapa: oShopifyainda não atualizou o preço do componente nos dados do pacote; portanto, o código não pode simplesmente somar os preços existentes, mas precisa substituir o preço da variante alterada dinamicamente. Sem isso, todas as variantes continuariam exibindo 30. A matriz de saídavariantPricesé então alimentada no loop**For each**, que chamaproductVariantsBulkUpdatepara efetivamente gravar esses preços recalculados de volta ao produto em pacote.
{
productVariant {
id
}
priceChange {
oldPrice { amount }
newPrice { amount }
}
getProductData1 {
id
variants {
id
productVariantComponents {
productVariant {
id
price
}
}
}
}
}export default function main(input) {
const changedVariantId = input.productVariant.id;
const newPrice = parseFloat(input.priceChange.newPrice.amount);
const variantPrices = input.getProductData1.flatMap(product =>
product.variants.map(variant => ({
productId: product.id,
id: variant.id,
price: variant.productVariantComponents.reduce((sum, component) => {
const p = component.productVariant.id === changedVariantId
? newPrice
: parseFloat(component.productVariant.price);
return sum + p;
}, 0)
}))
);
return { variantPrices };
}type VariantPrice {
productId: String!
id: String!
price: Float!
}
type Output {
variantPrices: [VariantPrice!]!
}- Adicione um loop “For each” (iteração) que percorra cada item em
runCode1.variantPrices. Para cada preço de variante, ele executa a ação de solicitação da API “Send Admin” utilizando a mutação “productVariantsBulkUpdate” para atualizar o preço da variante do pacote. O senhor pode utilizar esta entrada para a Mutação:
{
"variants": [
{
"id": "{{variantPricesForeachitem.id}}",
"price": "{{variantPricesForeachitem.price}}"
}
],
"productId": "{{variantPricesForeachitem.productId}}",
"allowPartialUpdates": true
}Como tudo isso funciona em conjunto
Quando o preço de uma variante do produto é alterado (por exemplo, ao atualizar a variante “Camiseta Cinza S” de €10,00 para €15,00):
- O gatilho “Preço da variante do produto alterado” é acionado
- O Shopify Flow recupera o pacote pai do produto por meio de
productParents - A etapa “Executar código” extrai o ID do produto do pacote
- A condição verifica se este produto faz parte de um pacote
- Se sim, ele busca os dados do produto em pacote
- Uma segunda etapa de execução do código recalcula os preços das variantes dos pacotes
- O loop percorre cada variante e atualiza o preço do pacote por meio da mutação da API de administração
**productVariantsBulkUpdate**
O preço da variante “S” do pacote passaria agora de € 30,00 para € 35,00 (€ 15,00 + € 10,00 + € 10,00).
