Pular para conteúdo

SHOPIFY PRODUCT LIST - Listar Produtos do Shopify

O que é este Node?

O SHOPIFY PRODUCT LIST é o node responsável por listar múltiplos produtos da loja Shopify, retornando array com informações de título, preço, estoque e status.

Por que este Node existe?

Consultar catálogo completo é essencial para gerenciamento. O SHOPIFY PRODUCT LIST existe para:

  1. Visualizar catálogo: Exibir lista de produtos ao usuário
  2. Relatórios: Gerar relatórios de estoque e preços
  3. Busca: Permitir busca de produtos por nome ou categoria
  4. Sincronização: Manter sistemas externos atualizados
  5. Auditoria: Verificar produtos ativos/inativos

Como funciona internamente?

Quando o SHOPIFY PRODUCT LIST é executado, o sistema:

  1. Valida credenciais (shopName e accessToken)
  2. Monta query string com filtros e limit
  3. Envia requisição GET para /admin/api/{version}/products.json
  4. Recebe array de produtos (até 250 por requisição)
  5. Salva resultado na variável especificada
  6. Continua flow para próximo node

Código interno (shopify.executor.ts:52-56):

case 'list': {
  const response = await axios.get(`${baseUrl}/products.json?limit=${node.data.limit || 50}`, { headers });
  result = response.data;
  break;
}

Quando você DEVE usar este Node?

Use SHOPIFY PRODUCT LIST quando precisar consultar múltiplos produtos:

Casos de uso:

  1. Exibir catálogo: "Mostrar produtos disponíveis ao cliente via WhatsApp"
  2. Relatório de estoque: "Listar produtos com estoque baixo"
  3. Busca: "Buscar produtos por categoria ou nome"
  4. Sincronização: "Atualizar sistema externo com catálogo Shopify"
  5. Auditoria: "Verificar produtos sem preço ou imagem"

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)
limit number Não Quantidade de produtos (padrão: 50, máx: 250)
responseVariable string Não Nome da variável (padrão: shopifyResult)

Exemplo 1: Listar Primeiros 10 Produtos

Objetivo: Exibir lista simples dos primeiros 10 produtos da loja.

JSON para Importar

{
  "name": "Shopify - Listar 10 Produtos",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "shopify_1",
      "type": "shopify",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Listar Produtos",
        "operation": "list",
        "resource": "products",
        "config": {
          "shopName": "minhaloja",
          "accessToken": "shpat_xxxxxxxxxxxxx",
          "apiVersion": "2025-01"
        },
        "limit": 10,
        "responseVariable": "products"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Exibir Lista",
        "parameters": {
          "message": "📦 CATÁLOGO DE PRODUTOS\n\nTotal encontrado: {{products.products.length}}\n\n1. {{products.products[0].title}} - R$ {{products.products[0].variants[0].price}}\n2. {{products.products[1].title}} - R$ {{products.products[1].variants[0].price}}\n3. {{products.products[2].title}} - R$ {{products.products[2].variants[0].price}}\n4. {{products.products[3].title}} - R$ {{products.products[3].variants[0].price}}\n5. {{products.products[4].title}} - R$ {{products.products[4].variants[0].price}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "shopify_1" },
    { "source": "shopify_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 📦 CATÁLOGO DE PRODUTOS

Total encontrado: 10

1. Camiseta Básica Preta - R$ 49.90
2. Tênis Esportivo Nike - R$ 299.90
3. Calça Jeans Slim - R$ 159.90
4. Jaqueta de Couro - R$ 499.90
5. Boné New Era - R$ 89.90

Exemplo 2: Verificar Produtos com Estoque Baixo

Objetivo: Listar produtos que precisam de reposição (estoque < 10).

JSON para Importar

{
  "name": "Shopify - Estoque Baixo",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "shopify_1",
      "type": "shopify",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Listar Todos",
        "operation": "list",
        "resource": "products",
        "config": {
          "shopName": "minhaloja",
          "accessToken": "shpat_xxxxxxxxxxxxx",
          "apiVersion": "2025-01"
        },
        "limit": 50,
        "responseVariable": "allProducts"
      }
    },
    {
      "id": "loop_1",
      "type": "loop",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Loop Produtos",
        "parameters": {
          "items": "{{allProducts.products}}",
          "itemVariable": "product",
          "indexVariable": "index"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Estoque < 10?",
        "parameters": {
          "conditions": [
            {
              "variable": "product.variants[0].inventory_quantity",
              "operator": "<",
              "value": "10"
            }
          ],
          "operator": "AND"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Alerta",
        "parameters": {
          "message": "⚠️ ESTOQUE BAIXO\n\nProduto: {{product.title}}\nEstoque atual: {{product.variants[0].inventory_quantity}} unidades\nPreço: R$ {{product.variants[0].price}}\n\nPrecisa repor!"
        }
      }
    },
    {
      "id": "accumulator_1",
      "type": "accumulator",
      "position": { "x": 1100, "y": 50 },
      "data": {
        "label": "Contar",
        "parameters": {
          "variable": "lowStockCount",
          "operation": "increment",
          "value": "1"
        }
      }
    },
    {
      "id": "merge_1",
      "type": "merge",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Continuar Loop"
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1500, "y": 100 },
      "data": {
        "label": "Resumo",
        "parameters": {
          "message": "✅ Análise concluída!\n\nTotal de produtos: {{allProducts.products.length}}\nProdutos com estoque baixo: {{lowStockCount}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "shopify_1" },
    { "source": "shopify_1", "target": "loop_1" },
    { "source": "loop_1", "target": "condition_1" },
    { "source": "condition_1", "target": "message_1", "label": "true" },
    { "source": "condition_1", "target": "merge_1", "label": "false" },
    { "source": "message_1", "target": "accumulator_1" },
    { "source": "accumulator_1", "target": "merge_1" },
    { "source": "merge_1", "target": "loop_1", "label": "next" },
    { "source": "loop_1", "target": "message_2", "label": "done" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: ⚠️ ESTOQUE BAIXO

Produto: Camiseta Premium XL
Estoque atual: 5 unidades
Preço: R$ 89.90

Precisa repor!

Sistema: ⚠️ ESTOQUE BAIXO

Produto: Tênis Running Pro
Estoque atual: 3 unidades
Preço: R$ 399.90

Precisa repor!

Sistema: ✅ Análise concluída!

Total de produtos: 50
Produtos com estoque baixo: 2

Exemplo 3: Exibir Catálogo Interativo

Objetivo: Permitir usuário navegar pelo catálogo e escolher produtos.

JSON para Importar

{
  "name": "Shopify - Catálogo Interativo",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Boas-vindas",
        "parameters": {
          "message": "Bem-vindo à nossa loja!\n\nVeja nossos produtos disponíveis:"
        }
      }
    },
    {
      "id": "shopify_1",
      "type": "shopify",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Carregar Produtos",
        "operation": "list",
        "resource": "products",
        "config": {
          "shopName": "minhaloja",
          "accessToken": "shpat_xxxxxxxxxxxxx",
          "apiVersion": "2025-01"
        },
        "limit": 20,
        "responseVariable": "catalog"
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Exibir Catálogo",
        "parameters": {
          "message": "📦 PRODUTOS DISPONÍVEIS\n\n1️⃣ {{catalog.products[0].title}}\n💰 R$ {{catalog.products[0].variants[0].price}}\n📊 Estoque: {{catalog.products[0].variants[0].inventory_quantity}}\n\n2️⃣ {{catalog.products[1].title}}\n💰 R$ {{catalog.products[1].variants[0].price}}\n📊 Estoque: {{catalog.products[1].variants[0].inventory_quantity}}\n\n3️⃣ {{catalog.products[2].title}}\n💰 R$ {{catalog.products[2].variants[0].price}}\n📊 Estoque: {{catalog.products[2].variants[0].inventory_quantity}}\n\n4️⃣ {{catalog.products[3].title}}\n💰 R$ {{catalog.products[3].variants[0].price}}\n📊 Estoque: {{catalog.products[3].variants[0].inventory_quantity}}\n\n5️⃣ {{catalog.products[4].title}}\n💰 R$ {{catalog.products[4].variants[0].price}}\n📊 Estoque: {{catalog.products[4].variants[0].inventory_quantity}}"
        }
      }
    },
    {
      "id": "number_1",
      "type": "number",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Escolher",
        "parameters": {
          "message": "Digite o número do produto desejado (1-5):",
          "variable": "choice",
          "min": 1,
          "max": 5,
          "decimals": 0
        }
      }
    },
    {
      "id": "calculator_1",
      "type": "calculator",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Índice Array",
        "parameters": {
          "expression": "{{choice}} - 1",
          "variable": "productIndex"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Salvar Escolha",
        "parameters": {
          "assignments": [
            { "variable": "selectedProduct", "value": "{{catalog.products[{{productIndex}}]}}" }
          ]
        }
      }
    },
    {
      "id": "message_3",
      "type": "message",
      "position": { "x": 1500, "y": 100 },
      "data": {
        "label": "Detalhes",
        "parameters": {
          "message": "Você escolheu:\n\n📦 {{selectedProduct.title}}\n💰 Preço: R$ {{selectedProduct.variants[0].price}}\n📊 Estoque: {{selectedProduct.variants[0].inventory_quantity}} unidades\n🏢 Marca: {{selectedProduct.vendor}}\n\n{{selectedProduct.body_html}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "shopify_1" },
    { "source": "shopify_1", "target": "message_2" },
    { "source": "message_2", "target": "number_1" },
    { "source": "number_1", "target": "calculator_1" },
    { "source": "calculator_1", "target": "variable_1" },
    { "source": "variable_1", "target": "message_3" },
    { "source": "message_3", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Bem-vindo à nossa loja!

Veja nossos produtos disponíveis:
Sistema: 📦 PRODUTOS DISPONÍVEIS

1️⃣ Camiseta Básica Preta
💰 R$ 49.90
📊 Estoque: 50

2️⃣ Tênis Esportivo Nike
💰 R$ 299.90
📊 Estoque: 25

3️⃣ Calça Jeans Slim
💰 R$ 159.90
📊 Estoque: 30

4️⃣ Jaqueta de Couro
💰 R$ 499.90
📊 Estoque: 10

5️⃣ Boné New Era
💰 R$ 89.90
📊 Estoque: 40

Sistema: Digite o número do produto desejado (1-5):
Usuário: 2
Sistema: Você escolheu:

📦 Tênis Esportivo Nike
💰 Preço: R$ 299.90
📊 Estoque: 25 unidades
🏢 Marca: Nike

<p>Tênis para corrida profissional com tecnologia Air Max</p>

Resposta do Node

{
  "products": [
    {
      "id": 8234567890123,
      "title": "Camiseta Básica Preta",
      "body_html": "<p>Camiseta 100% algodão</p>",
      "vendor": "Minha Marca",
      "product_type": "Roupas",
      "status": "active",
      "variants": [
        {
          "id": 44567890123456,
          "price": "49.90",
          "sku": "CAM-BASIC-P",
          "inventory_quantity": 50
        }
      ]
    },
    {
      "id": 8234567890456,
      "title": "Tênis Esportivo Nike",
      "body_html": "<p>Tênis para corrida</p>",
      "vendor": "Nike",
      "product_type": "Calçados",
      "status": "active",
      "variants": [
        {
          "id": 44567890456789,
          "price": "299.90",
          "sku": "TEN-NIKE-42",
          "inventory_quantity": 25
        }
      ]
    }
  ]
}

Boas Práticas

SIM: - Use limit apropriado para evitar sobrecarga (50-100 para visualização) - Implemente paginação para catálogos grandes (> 250 produtos) - Filtre produtos inativos se necessário - Cache resultados quando apropriado - Use loop para processar lista completa

NÃO: - Não solicite limite muito alto sem necessidade - Não exiba lista completa em mensagem única (use loops) - Não ignore produtos sem estoque na listagem - Não faça múltiplas requisições desnecessárias

Dicas

Dica 1 - Limite: Shopify permite até 250 produtos por requisição - use paginação para mais.

Dica 2 - Filtros: Use query params como ?status=active para filtrar produtos ativos.

Dica 3 - Performance: Para catálogos grandes, considere buscar apenas campos necessários.

Dica 4 - Arrays: Acesse produtos via products.products[index] - note o duplo "products".

Dica 5 - Loop: Use node LOOP para processar todos os produtos da lista automaticamente.

Dica 6 - Cache: Para flows executados frequentemente, considere cachear lista por alguns minutos.

Próximo Node

SHOPIFY PRODUCT GET - Buscar produto específico → SHOPIFY PRODUCT CREATE - Criar novo produto → SHOPIFY ORDER LIST - Listar pedidos