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:
- Visualizar catálogo: Exibir lista de produtos ao usuário
- Relatórios: Gerar relatórios de estoque e preços
- Busca: Permitir busca de produtos por nome ou categoria
- Sincronização: Manter sistemas externos atualizados
- Auditoria: Verificar produtos ativos/inativos
Como funciona internamente?
Quando o SHOPIFY PRODUCT LIST é executado, o sistema:
- Valida credenciais (shopName e accessToken)
- Monta query string com filtros e limit
- Envia requisição GET para
/admin/api/{version}/products.json - Recebe array de produtos (até 250 por requisição)
- Salva resultado na variável especificada
- 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:
- Exibir catálogo: "Mostrar produtos disponíveis ao cliente via WhatsApp"
- Relatório de estoque: "Listar produtos com estoque baixo"
- Busca: "Buscar produtos por categoria ou nome"
- Sincronização: "Atualizar sistema externo com catálogo Shopify"
- Auditoria: "Verificar produtos sem preço ou imagem"
Quando NÃO usar:
- Buscar produto específico: Use SHOPIFY PRODUCT GET com ID
- Atualizar produtos: Use SHOPIFY PRODUCT UPDATE
- Criar produto: Use SHOPIFY PRODUCT CREATE
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