Pular para conteúdo

SHOPIFY PRODUCT GET - Buscar Produto do Shopify

O que é este Node?

O SHOPIFY PRODUCT GET é o node responsável por buscar dados de um produto específico no Shopify usando seu ID, retornando informações completas como título, preço, estoque, variantes e imagens.

Por que este Node existe?

Buscar informações de produtos é essencial para automações. O SHOPIFY PRODUCT GET existe para:

  1. Consultar estoque: Verificar quantidade disponível antes de vender
  2. Validar produto: Confirmar se produto existe antes de operações
  3. Exibir detalhes: Mostrar informações do produto ao cliente
  4. Sincronização: Manter dados atualizados entre sistemas

Como funciona internamente?

Quando o SHOPIFY PRODUCT GET é executado, o sistema:

  1. Valida credenciais (shopName e accessToken)
  2. Extrai productId do parâmetro ou variável
  3. Envia requisição GET para /admin/api/{version}/products/{productId}.json
  4. Recebe dados completos do produto
  5. Salva resultado na variável especificada
  6. Continua flow para próximo node

Código interno (shopify.executor.ts:33-37):

case 'get': {
  const productId = this.replaceVariables(node.data.productId, context.variables);
  const response = await axios.get(`${baseUrl}/products/${productId}.json`, { headers });
  result = response.data;
  break;
}

Quando você DEVE usar este Node?

Use SHOPIFY PRODUCT GET quando precisar consultar dados de produto:

Casos de uso:

  1. Verificar estoque: "Consultar se produto tem estoque antes de vender"
  2. Exibir detalhes: "Mostrar preço e descrição ao cliente via WhatsApp"
  3. Validação: "Confirmar se produto existe antes de atualizar"
  4. Comparação de preços: "Verificar preço atual antes de aplicar desconto"
  5. Status do produto: "Checar se produto está ativo ou arquivado"

Quando NÃO usar:

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 no Shopify
responseVariable string Não Nome da variável (padrão: shopifyResult)

Exemplo 1: Consultar Estoque de Produto

Objetivo: Verificar se produto tem estoque disponível antes de permitir compra.

JSON para Importar

{
  "name": "Shopify - Consultar Estoque",
  "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": "Tem Estoque?",
        "parameters": {
          "conditions": [
            {
              "variable": "product.product.variants[0].inventory_quantity",
              "operator": ">",
              "value": "0"
            }
          ],
          "operator": "AND"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Disponível",
        "parameters": {
          "message": "Produto disponível!\n\nNome: {{product.product.title}}\nPreço: R$ {{product.product.variants[0].price}}\nEstoque: {{product.product.variants[0].inventory_quantity}} unidades"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Sem Estoque",
        "parameters": {
          "message": "Produto sem estoque!\n\nNome: {{product.product.title}}\nEstoque: ESGOTADO"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "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": "message_1", "label": "true" },
    { "source": "condition_1", "target": "message_2", "label": "false" },
    { "source": "message_1", "target": "end_1" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada (com estoque):

Sistema: Digite o ID do produto:
Usuário: 8234567890123
Sistema: Produto disponível!

Nome: Camiseta Básica Preta
Preço: R$ 49.90
Estoque: 50 unidades

Saída esperada (sem estoque):

Sistema: Digite o ID do produto:
Usuário: 8234567890456
Sistema: Produto sem estoque!

Nome: Tênis Nike Air
Estoque: ESGOTADO

Exemplo 2: Exibir Detalhes Completos do Produto

Objetivo: Mostrar informações detalhadas do produto ao cliente.

JSON para Importar

{
  "name": "Shopify - Exibir Detalhes do Produto",
  "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": "ID Fixo",
        "parameters": {
          "assignments": [
            { "variable": "productId", "value": "8234567890123" }
          ]
        }
      }
    },
    {
      "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": "productData"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Detalhes",
        "parameters": {
          "message": "📦 DETALHES DO PRODUTO\n\n🏷️ Nome: {{productData.product.title}}\n💰 Preço: R$ {{productData.product.variants[0].price}}\n📊 Estoque: {{productData.product.variants[0].inventory_quantity}} unidades\n🏢 Marca: {{productData.product.vendor}}\n📁 Categoria: {{productData.product.product_type}}\n✅ Status: {{productData.product.status}}\n\n📝 Descrição:\n{{productData.product.body_html}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "shopify_1" },
    { "source": "shopify_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 📦 DETALHES DO PRODUTO

🏷️ Nome: Camiseta Básica Preta
💰 Preço: R$ 49.90
📊 Estoque: 50 unidades
🏢 Marca: Minha Marca
📁 Categoria: Roupas
✅ Status: active

📝 Descrição:
<p>Camiseta 100% algodão, confortável e durável.</p>

Exemplo 3: Validar Produto Antes de Atualizar

Objetivo: Verificar se produto existe antes de tentar atualizar.

JSON para Importar

{
  "name": "Shopify - Validar Produto",
  "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 atualizar:",
          "variable": "updateProductId"
        }
      }
    },
    {
      "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": "{{updateProductId}}",
        "responseVariable": "existingProduct"
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Produto Existe?",
        "parameters": {
          "conditions": [
            {
              "variable": "existingProduct.product.id",
              "operator": "!=",
              "value": ""
            }
          ],
          "operator": "AND"
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Novo Preço",
        "parameters": {
          "message": "Produto encontrado: {{existingProduct.product.title}}\n\nDigite o novo preço:",
          "variable": "newPrice",
          "min": 0.01,
          "decimals": 2
        }
      }
    },
    {
      "id": "shopify_2",
      "type": "shopify",
      "position": { "x": 1100, "y": 50 },
      "data": {
        "label": "Atualizar Preço",
        "operation": "update",
        "resource": "products",
        "config": {
          "shopName": "minhaloja",
          "accessToken": "shpat_xxxxxxxxxxxxx",
          "apiVersion": "2025-01"
        },
        "productId": "{{updateProductId}}",
        "product": {
          "variants": [
            {
              "id": "{{existingProduct.product.variants[0].id}}",
              "price": "{{newPrice}}"
            }
          ]
        },
        "responseVariable": "updatedProduct"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1300, "y": 50 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "Preço atualizado com sucesso!\n\nProduto: {{existingProduct.product.title}}\nPreço anterior: R$ {{existingProduct.product.variants[0].price}}\nNovo preço: R$ {{newPrice}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Erro",
        "parameters": {
          "message": "Produto não encontrado com o ID: {{updateProductId}}\n\nVerifique se o ID está correto."
        }
      }
    },
    {
      "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": "condition_1" },
    { "source": "condition_1", "target": "number_1", "label": "true" },
    { "source": "condition_1", "target": "message_2", "label": "false" },
    { "source": "number_1", "target": "shopify_2" },
    { "source": "shopify_2", "target": "message_1" },
    { "source": "message_1", "target": "end_1" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada (produto encontrado):

Sistema: Digite o ID do produto para atualizar:
Usuário: 8234567890123
Sistema: Produto encontrado: Camiseta Básica Preta

Digite o novo preço:
Usuário: 59.90
Sistema: Preço atualizado com sucesso!

Produto: Camiseta Básica Preta
Preço anterior: R$ 49.90
Novo preço: R$ 59.90

Saída esperada (produto não encontrado):

Sistema: Digite o ID do produto para atualizar:
Usuário: 99999999
Sistema: Produto não encontrado com o ID: 99999999

Verifique se o ID está correto.

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-15T10:30: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": "49.90",
        "sku": "CAM-BASIC-P",
        "position": 1,
        "inventory_quantity": 50,
        "inventory_management": "shopify",
        "created_at": "2025-01-15T10:30:00-03:00",
        "updated_at": "2025-01-15T10:30:00-03:00"
      }
    ],
    "options": [
      {
        "id": 10234567890,
        "product_id": 8234567890123,
        "name": "Title",
        "position": 1,
        "values": ["Default Title"]
      }
    ],
    "images": [
      {
        "id": 29012345678,
        "product_id": 8234567890123,
        "position": 1,
        "src": "https://cdn.shopify.com/s/files/1/0123/4567/products/camiseta.jpg",
        "width": 1200,
        "height": 1200
      }
    ]
  }
}

Boas Práticas

SIM: - Sempre valide se o produto existe antes de operações - Armazene o resultado em variável para uso posterior - Trate erros quando produto não for encontrado - Use IDs de produtos corretos (números grandes) - Verifique estoque antes de permitir compras

NÃO: - Não assuma que produto sempre existirá - Não ignore erros de busca - Não faça buscas desnecessárias (cache quando possível) - Não exponha dados sensíveis em logs

Dicas

Dica 1 - Validação: Sempre verifique se product.product.id existe na resposta antes de acessar outros campos.

Dica 2 - Variantes: Para produtos com variantes, acesse via product.product.variants[0] para a primeira variante.

Dica 3 - Imagens: As imagens estão em product.product.images como array de objetos com campo src.

Dica 4 - Estoque: O estoque de cada variante está em variants[X].inventory_quantity.

Dica 5 - Cache: Em flows com múltiplas consultas ao mesmo produto, salve o resultado em variável global.

Dica 6 - Erro 404: Se produto não existir, a API retorna erro 404 - trate isso com try/catch ou condition.

Próximo Node

SHOPIFY PRODUCT CREATE - Criar novo produto → SHOPIFY PRODUCT UPDATE - Atualizar produto existente → SHOPIFY PRODUCT LIST - Listar todos os produtos