SHOPIFY ORDER LIST - Listar Pedidos do Shopify
O que é este Node?
O SHOPIFY ORDER LIST é o node responsável por listar múltiplos pedidos da loja Shopify, retornando array com informações de pedidos filtrados por status.
Por que este Node existe?
Consultar lista de pedidos é essencial para gestão. O SHOPIFY ORDER LIST existe para:
- Relatórios: Gerar relatórios de vendas por período
- Gestão: Listar pedidos pendentes de envio
- Atendimento: Buscar pedidos de cliente específico
- Integração: Sincronizar pedidos com ERP/logística
- Análise: Monitorar performance de vendas
Como funciona internamente?
Quando o SHOPIFY ORDER LIST é executado, o sistema:
- Valida credenciais (shopName e accessToken)
- Monta query com filtros (status, limit)
- Envia requisição GET para
/admin/api/{version}/orders.json - Recebe array de pedidos
- Salva resultado na variável especificada
- Continua flow para próximo node
Código interno (shopify.executor.ts:66-70):
case 'list': {
const status = node.data.status || 'any';
const response = await axios.get(`${baseUrl}/orders.json?status=${status}&limit=${node.data.limit || 50}`, { headers });
result = response.data;
break;
}
Quando você DEVE usar este Node?
Use SHOPIFY ORDER LIST quando precisar consultar múltiplos pedidos:
Casos de uso:
- Pedidos pendentes: "Listar pedidos aguardando envio"
- Relatório de vendas: "Vendas do dia/mês"
- Busca de cliente: "Todos os pedidos de cliente X"
- Integração: "Sincronizar pedidos com sistema de entrega"
- Análise: "Pedidos cancelados no último mês"
Quando NÃO usar:
- Buscar pedido específico: Use SHOPIFY ORDER GET
- Cancelar pedido: Use SHOPIFY ORDER CANCEL
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) |
| status | string | Não | Status dos pedidos (any/open/closed/cancelled) |
| limit | number | Não | Quantidade (padrão: 50, máx: 250) |
| responseVariable | string | Não | Nome da variável (padrão: shopifyResult) |
Status de Pedidos
| Status | Descrição |
|---|---|
| any | Todos os pedidos (padrão) |
| open | Pedidos abertos (não enviados/cancelados) |
| closed | Pedidos fechados (entregues) |
| cancelled | Pedidos cancelados |
Exemplo 1: Listar Pedidos Pendentes de Envio
Objetivo: Exibir pedidos pagos aguardando envio.
JSON para Importar
{
"name": "Shopify - Pedidos Pendentes",
"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 Pedidos",
"operation": "list",
"resource": "orders",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"status": "open",
"limit": 50,
"responseVariable": "orders"
}
},
{
"id": "loop_1",
"type": "loop",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Loop Pedidos",
"parameters": {
"items": "{{orders.orders}}",
"itemVariable": "order",
"indexVariable": "i"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Pago e Não Enviado?",
"parameters": {
"conditions": [
{
"variable": "order.financial_status",
"operator": "==",
"value": "paid"
},
{
"variable": "order.fulfillment_status",
"operator": "==",
"value": "null"
}
],
"operator": "AND"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Pedido Pendente",
"parameters": {
"message": "⚠️ PENDENTE DE ENVIO\n\nPedido #{{order.order_number}}\nCliente: {{order.customer.first_name}}\nValor: R$ {{order.total_price}}\nData: {{order.created_at}}"
}
}
},
{
"id": "merge_1",
"type": "merge",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Próximo" }
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Resumo",
"parameters": {
"message": "✅ Análise concluída!\n\nTotal de pedidos abertos: {{orders.orders.length}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "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": "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: ⚠️ PENDENTE DE ENVIO
Pedido #1234
Cliente: João
Valor: R$ 349.80
Data: 2025-01-10T14:30:00-03:00
Sistema: ⚠️ PENDENTE DE ENVIO
Pedido #1235
Cliente: Maria
Valor: R$ 199.90
Data: 2025-01-10T15:20:00-03:00
Sistema: ✅ Análise concluída!
Total de pedidos abertos: 15
Exemplo 2: Relatório de Vendas do Dia
Objetivo: Gerar relatório com total de vendas e quantidade de pedidos.
JSON para Importar
{
"name": "Shopify - Vendas do Dia",
"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 Pedidos",
"operation": "list",
"resource": "orders",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"status": "any",
"limit": 250,
"responseVariable": "allOrders"
}
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Inicializar Contadores",
"parameters": {
"assignments": [
{ "variable": "totalSales", "value": "0" },
{ "variable": "orderCount", "value": "0" }
]
}
}
},
{
"id": "loop_1",
"type": "loop",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Loop Pedidos",
"parameters": {
"items": "{{allOrders.orders}}",
"itemVariable": "order",
"indexVariable": "i"
}
}
},
{
"id": "calculator_1",
"type": "calculator",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Somar Vendas",
"parameters": {
"expression": "{{totalSales}} + {{order.total_price}}",
"variable": "totalSales"
}
}
},
{
"id": "accumulator_1",
"type": "accumulator",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Contar Pedidos",
"parameters": {
"variable": "orderCount",
"operation": "increment",
"value": "1"
}
}
},
{
"id": "merge_1",
"type": "merge",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Próximo" }
},
{
"id": "calculator_2",
"type": "calculator",
"position": { "x": 1500, "y": 100 },
"data": {
"label": "Ticket Médio",
"parameters": {
"expression": "{{totalSales}} / {{orderCount}}",
"variable": "avgTicket"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1700, "y": 100 },
"data": {
"label": "Relatório",
"parameters": {
"message": "📊 RELATÓRIO DE VENDAS\n\n🛍️ Pedidos: {{orderCount}}\n💰 Faturamento: R$ {{totalSales}}\n📈 Ticket Médio: R$ {{avgTicket}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "shopify_1" },
{ "source": "shopify_1", "target": "variable_1" },
{ "source": "variable_1", "target": "loop_1" },
{ "source": "loop_1", "target": "calculator_1" },
{ "source": "calculator_1", "target": "accumulator_1" },
{ "source": "accumulator_1", "target": "merge_1" },
{ "source": "merge_1", "target": "loop_1", "label": "next" },
{ "source": "loop_1", "target": "calculator_2", "label": "done" },
{ "source": "calculator_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: 📊 RELATÓRIO DE VENDAS
🛍️ Pedidos: 45
💰 Faturamento: R$ 15.789,50
📈 Ticket Médio: R$ 350,88
Resposta do Node
{
"orders": [
{
"id": 5234567890123,
"order_number": 1234,
"email": "joao@example.com",
"created_at": "2025-01-10T14:30:00-03:00",
"total_price": "349.80",
"financial_status": "paid",
"fulfillment_status": null,
"customer": {
"first_name": "João",
"last_name": "Silva"
}
},
{
"id": 5234567890456,
"order_number": 1235,
"email": "maria@example.com",
"created_at": "2025-01-10T15:20:00-03:00",
"total_price": "199.90",
"financial_status": "paid",
"fulfillment_status": "fulfilled",
"customer": {
"first_name": "Maria",
"last_name": "Santos"
}
}
]
}
Boas Práticas
SIM: - Use status apropriado para filtrar pedidos relevantes - Implemente paginação para listas grandes (> 250) - Use loops para processar todos os pedidos - Filtre por financial_status e fulfillment_status quando necessário - Cache resultados para relatórios que não mudam frequentemente
NÃO: - Não solicite mais pedidos que necessário (use limit) - Não assuma que todos terão fulfillment_status - Não ignore tratamento de lista vazia - Não faça múltiplas requisições desnecessárias
Dicas
Dica 1 - Filtros: Use status=open para pedidos ativos, closed para finalizados.
Dica 2 - Limit: Máximo 250 pedidos por requisição - use paginação para mais.
Dica 3 - Ordenação: Pedidos vêm ordenados por data de criação (mais recente primeiro).
Dica 4 - Performance: Para análises pesadas, considere executar em horários de baixo movimento.
Dica 5 - Campos: Resposta vem com campos principais - use GET para detalhes completos.
Próximo Node
→ SHOPIFY ORDER GET - Buscar pedido específico → SHOPIFY ORDER CANCEL - Cancelar pedido → SHOPIFY ORDER FULFILL - Marcar como enviado