SHOPIFY PRODUCT UPDATE - Atualizar Produto do Shopify
O que é este Node?
O SHOPIFY PRODUCT UPDATE é o node responsável por atualizar informações de produtos existentes no Shopify, como título, descrição, preço, estoque e status.
Por que este Node existe?
Manter produtos atualizados é essencial para e-commerce. O SHOPIFY PRODUCT UPDATE existe para:
- Atualizar preços: Aplicar promoções e ajustes de preço automaticamente
- Controlar estoque: Sincronizar quantidade disponível com sistemas externos
- Modificar status: Ativar, desativar ou arquivar produtos
- Atualizar descrições: Corrigir ou melhorar informações do produto
- Gerenciar variantes: Adicionar ou modificar opções de tamanho/cor
Como funciona internamente?
Quando o SHOPIFY PRODUCT UPDATE é executado, o sistema:
- Valida credenciais e productId
- Prepara dados para atualização (apenas campos enviados serão alterados)
- Envia requisição PUT para
/admin/api/{version}/products/{productId}.json - Recebe produto atualizado como resposta
- Salva resultado na variável especificada
- Continua flow para próximo node
Código interno (shopify.executor.ts:39-44):
case 'update': {
const productId = this.replaceVariables(node.data.productId, context.variables);
const product = JSON.parse(this.replaceVariables(JSON.stringify(node.data.product), context.variables));
const response = await axios.put(`${baseUrl}/products/${productId}.json`, { product }, { headers });
result = response.data;
break;
}
Quando você DEVE usar este Node?
Use SHOPIFY PRODUCT UPDATE quando precisar modificar produtos existentes:
Casos de uso:
- Aplicar desconto: "Reduzir preço de produto em promoção"
- Atualizar estoque: "Sincronizar estoque após venda ou reposição"
- Mudar status: "Desativar produto esgotado"
- Corrigir informações: "Atualizar descrição ou título do produto"
- Gerenciar promoções: "Ativar/desativar produtos sazonais"
Quando NÃO usar:
- Criar produto novo: Use SHOPIFY PRODUCT CREATE
- Buscar produto: Use SHOPIFY PRODUCT GET
- Deletar produto: Use SHOPIFY PRODUCT DELETE
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| config.shopName | string | Sim | Nome da loja (sem .myshopify.com) |
| config.accessToken | string | Sim | Token de acesso da API |
| config.apiVersion | string | Não | Versão da API (padrão: 2025-01) |
| productId | string/number | Sim | ID do produto a atualizar |
| product | object | Sim | Campos a atualizar (apenas os enviados) |
| responseVariable | string | Não | Nome da variável (padrão: shopifyResult) |
Exemplo 1: Aplicar Desconto em Produto
Objetivo: Reduzir preço de produto específico aplicando desconto.
JSON para Importar
{
"name": "Shopify - Aplicar Desconto",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "ID do Produto",
"parameters": {
"message": "Digite o ID do produto para aplicar desconto:",
"variable": "productId"
}
}
},
{
"id": "shopify_1",
"type": "shopify",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Produto",
"operation": "get",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"productId": "{{productId}}",
"responseVariable": "currentProduct"
}
},
{
"id": "number_1",
"type": "number",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Porcentagem",
"parameters": {
"message": "Produto: {{currentProduct.product.title}}\nPreço atual: R$ {{currentProduct.product.variants[0].price}}\n\nDigite % de desconto (ex: 20):",
"variable": "discountPercent",
"min": 1,
"max": 99,
"decimals": 0
}
}
},
{
"id": "calculator_1",
"type": "calculator",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Calcular Novo Preço",
"parameters": {
"expression": "{{currentProduct.product.variants[0].price}} * (1 - {{discountPercent}} / 100)",
"variable": "newPrice"
}
}
},
{
"id": "shopify_2",
"type": "shopify",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Atualizar Preço",
"operation": "update",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"productId": "{{productId}}",
"product": {
"variants": [
{
"id": "{{currentProduct.product.variants[0].id}}",
"price": "{{newPrice}}"
}
]
},
"responseVariable": "updatedProduct"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Desconto aplicado com sucesso!\n\n📦 Produto: {{currentProduct.product.title}}\n💰 Preço anterior: R$ {{currentProduct.product.variants[0].price}}\n🎁 Desconto: {{discountPercent}}%\n✅ Novo preço: R$ {{newPrice}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "shopify_1" },
{ "source": "shopify_1", "target": "number_1" },
{ "source": "number_1", "target": "calculator_1" },
{ "source": "calculator_1", "target": "shopify_2" },
{ "source": "shopify_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Digite o ID do produto para aplicar desconto:
Usuário: 8234567890123
Sistema: Produto: Camiseta Básica Preta
Preço atual: R$ 49.90
Digite % de desconto (ex: 20):
Usuário: 20
Sistema: Desconto aplicado com sucesso!
📦 Produto: Camiseta Básica Preta
💰 Preço anterior: R$ 49.90
🎁 Desconto: 20%
✅ Novo preço: R$ 39.92
Exemplo 2: Atualizar Estoque após Venda
Objetivo: Reduzir estoque de produto após venda confirmada.
JSON para Importar
{
"name": "Shopify - Atualizar Estoque",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Dados da Venda",
"parameters": {
"assignments": [
{ "variable": "productId", "value": "8234567890123" },
{ "variable": "quantitySold", "value": "3" }
]
}
}
},
{
"id": "shopify_1",
"type": "shopify",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Estoque Atual",
"operation": "get",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"productId": "{{productId}}",
"responseVariable": "product"
}
},
{
"id": "calculator_1",
"type": "calculator",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Novo Estoque",
"parameters": {
"expression": "{{product.product.variants[0].inventory_quantity}} - {{quantitySold}}",
"variable": "newStock"
}
}
},
{
"id": "shopify_2",
"type": "shopify",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Atualizar Estoque",
"operation": "update",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"productId": "{{productId}}",
"product": {
"variants": [
{
"id": "{{product.product.variants[0].id}}",
"inventory_quantity": "{{newStock}}"
}
]
},
"responseVariable": "updated"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Estoque atualizado!\n\n📦 Produto: {{product.product.title}}\n📊 Estoque anterior: {{product.product.variants[0].inventory_quantity}}\n🛒 Quantidade vendida: {{quantitySold}}\n✅ Novo estoque: {{newStock}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "shopify_1" },
{ "source": "shopify_1", "target": "calculator_1" },
{ "source": "calculator_1", "target": "shopify_2" },
{ "source": "shopify_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Estoque atualizado!
📦 Produto: Camiseta Básica Preta
📊 Estoque anterior: 50
🛒 Quantidade vendida: 3
✅ Novo estoque: 47
Exemplo 3: Alterar Status do Produto
Objetivo: Desativar produtos esgotados automaticamente.
JSON para Importar
{
"name": "Shopify - Desativar Produto Esgotado",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "ID do Produto",
"parameters": {
"message": "Digite o ID do produto:",
"variable": "productId"
}
}
},
{
"id": "shopify_1",
"type": "shopify",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Produto",
"operation": "get",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"productId": "{{productId}}",
"responseVariable": "product"
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Estoque Zero?",
"parameters": {
"conditions": [
{
"variable": "product.product.variants[0].inventory_quantity",
"operator": "<=",
"value": "0"
}
],
"operator": "AND"
}
}
},
{
"id": "shopify_2",
"type": "shopify",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Desativar",
"operation": "update",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"productId": "{{productId}}",
"product": {
"status": "draft"
},
"responseVariable": "deactivated"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1100, "y": 50 },
"data": {
"label": "Desativado",
"parameters": {
"message": "Produto desativado por falta de estoque!\n\n📦 {{product.product.title}}\n📊 Estoque: 0\n❌ Status: Desativado"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Tem Estoque",
"parameters": {
"message": "Produto tem estoque disponível!\n\n📦 {{product.product.title}}\n📊 Estoque: {{product.product.variants[0].inventory_quantity}}\n✅ Status: Ativo"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "shopify_1" },
{ "source": "shopify_1", "target": "condition_1" },
{ "source": "condition_1", "target": "shopify_2", "label": "true" },
{ "source": "condition_1", "target": "message_2", "label": "false" },
{ "source": "shopify_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada (sem estoque):
Sistema: Digite o ID do produto:
Usuário: 8234567890123
Sistema: Produto desativado por falta de estoque!
📦 Camiseta Básica Preta
📊 Estoque: 0
❌ Status: Desativado
Resposta do Node
{
"product": {
"id": 8234567890123,
"title": "Camiseta Básica Preta",
"body_html": "<p>Camiseta 100% algodão, confortável e durável.</p>",
"vendor": "Minha Marca",
"product_type": "Roupas",
"created_at": "2025-01-15T10:30:00-03:00",
"updated_at": "2025-01-15T11:45:00-03:00",
"published_at": "2025-01-15T10:30:00-03:00",
"status": "active",
"tags": "camiseta, algodão, básica",
"variants": [
{
"id": 44567890123456,
"product_id": 8234567890123,
"title": "Default Title",
"price": "39.92",
"sku": "CAM-BASIC-P",
"position": 1,
"inventory_quantity": 47,
"updated_at": "2025-01-15T11:45:00-03:00"
}
]
}
}
Boas Práticas
SIM: - Sempre busque o produto antes de atualizar para ter dados atuais - Atualize apenas campos necessários (não envie objeto completo) - Valide dados antes de enviar (preço > 0, estoque >= 0) - Use variantes[0].id ao atualizar variantes específicas - Registre histórico de alterações em seu sistema
NÃO: - Não atualize sem validar se produto existe - Não envie preços negativos ou zerados sem intencionalidade - Não esqueça de atualizar estoque após vendas - Não faça atualizações em massa sem rate limiting - Não ignore erros de atualização
Dicas
Dica 1 - Atualização Parcial: Envie apenas os campos que deseja alterar - campos não enviados permanecem inalterados.
Dica 2 - Variantes: Para atualizar variante específica, inclua o id da variante no objeto variants.
Dica 3 - Status: Valores possíveis: active (ativo), draft (rascunho), archived (arquivado).
Dica 4 - Estoque: Use inventory_quantity para estoque absoluto. Para ajustes incrementais, use Inventory API.
Dica 5 - Tags: Tags são string separada por vírgula: "camiseta, algodão, promoção".
Dica 6 - Validação: Sempre valide resultado após atualização verificando campos atualizados.
Próximo Node
→ SHOPIFY PRODUCT GET - Buscar produto → SHOPIFY PRODUCT CREATE - Criar novo produto → SHOPIFY PRODUCT DELETE - Deletar produto