SHOPIFY PRODUCT CREATE - Criar Produto no Shopify
O que é este Node?
O SHOPIFY PRODUCT CREATE é o node responsável por criar novos produtos na sua loja Shopify, incluindo título, descrição, preço, estoque, variantes e imagens.
Por que este Node existe?
Gerenciar produtos manualmente é trabalhoso. O SHOPIFY PRODUCT CREATE existe para:
- Automação de catálogo: Criar produtos automaticamente via flows
- Integração com sistemas: Sincronizar produtos de ERPs, planilhas ou outros sistemas
- Criação em massa: Adicionar múltiplos produtos rapidamente
- Atualização de estoque: Criar produtos quando novos itens chegam ao inventário
Como funciona internamente?
Quando o SHOPIFY PRODUCT CREATE é executado, o sistema:
- Valida credenciais (shopName e accessToken)
- Prepara dados do produto (título, descrição, preço, etc.)
- Envia requisição POST para API Shopify
/admin/api/{version}/products.json - Recebe resposta com dados do produto criado (incluindo ID)
- Salva resultado na variável especificada
- Continua flow para próximo node
Código interno (shopify.executor.ts:27-32):
case 'create': {
const product = JSON.parse(this.replaceVariables(JSON.stringify(node.data.product), context.variables));
const response = await axios.post(`${baseUrl}/products.json`, { product }, { headers });
result = response.data;
break;
}
Quando você DEVE usar este Node?
Use SHOPIFY PRODUCT CREATE quando precisar adicionar produtos programaticamente:
Casos de uso:
- Importação de catálogo: "Carregar produtos de planilha Excel para Shopify"
- Sincronização ERP: "Criar produtos no Shopify quando cadastrados no ERP"
- Dropshipping: "Adicionar produtos de fornecedor automaticamente"
- Marketplace: "Permitir vendedores criarem produtos via WhatsApp"
- Produtos sazonais: "Criar coleção de produtos para Black Friday"
Quando NÃO usar:
- Atualizar produto existente: Use SHOPIFY PRODUCT UPDATE
- Buscar produto: Use SHOPIFY PRODUCT GET
- Listar produtos: Use SHOPIFY PRODUCT LIST
Parâmetros Detalhados
config.shopName (string, obrigatório)
O que é: Nome da sua loja Shopify (o prefixo antes de .myshopify.com).
Exemplo: Se sua loja é minhaloja.myshopify.com, use apenas "minhaloja".
Flow completo para testar:
{
"name": "Teste Shopify - Shop Name",
"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": "Config Shopify",
"parameters": {
"assignments": [
{ "variable": "shopName", "value": "minhaloja" },
{ "variable": "accessToken", "value": "shpat_xxxxx" }
]
}
}
},
{
"id": "shopify_1",
"type": "shopify",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Criar Produto Teste",
"operation": "create",
"resource": "products",
"config": {
"shopName": "{{shopName}}",
"accessToken": "{{accessToken}}",
"apiVersion": "2025-01"
},
"product": {
"title": "Produto Teste",
"body_html": "<strong>Descrição do produto</strong>",
"vendor": "Minha Marca",
"product_type": "Eletrônicos",
"status": "draft"
},
"responseVariable": "productCreated"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Produto criado! ID: {{productCreated.product.id}}"
}
}
},
{
"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" }
]
}
Teste: Execute o flow e verifique se o produto aparece como rascunho no Shopify Admin.
config.accessToken (string, obrigatório)
O que é: Token de acesso privado da API Shopify (Private App Access Token).
Como obter:
1. Acesse Shopify Admin → Apps → Develop apps
2. Crie uma Private App ou Custom App
3. Copie o Admin API access token (começa com shpat_)
Permissões necessárias:
- write_products (para criar produtos)
- read_products (para ler dados)
product.title (string, obrigatório)
O que é: Nome/título do produto que aparecerá na loja.
Flow completo para testar:
{
"name": "Criar Produto com Título",
"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": "Nome do Produto",
"parameters": {
"message": "Qual o nome do produto?",
"variable": "productName"
}
}
},
{
"id": "shopify_1",
"type": "shopify",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Criar Produto",
"operation": "create",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxx",
"apiVersion": "2025-01"
},
"product": {
"title": "{{productName}}",
"body_html": "<p>Produto criado via Lumina Flow</p>",
"status": "active"
},
"responseVariable": "newProduct"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Produto '{{productName}}' criado com sucesso! ID: {{newProduct.product.id}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "shopify_1" },
{ "source": "shopify_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite "Camiseta Premium" - produto será criado com esse título.
product.body_html (string, opcional)
O que é: Descrição detalhada do produto em HTML.
Exemplo: "<p>Camiseta 100% algodão</p><ul><li>Tamanhos: P, M, G</li><li>Cores: Branco, Preto</li></ul>"
product.vendor (string, opcional)
O que é: Fabricante/fornecedor do produto.
Exemplo: "Nike", "Minha Marca", "Fornecedor ABC"
product.product_type (string, opcional)
O que é: Categoria/tipo do produto para organização.
Exemplo: "Roupas", "Eletrônicos", "Alimentos"
product.status (string, opcional)
O que é: Status inicial do produto.
Valores possíveis:
- "active" - Produto visível na loja
- "draft" - Rascunho (não visível)
- "archived" - Arquivado
Padrão: "draft"
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) |
| product.title | string | Sim | Título do produto |
| product.body_html | string | Não | Descrição HTML |
| product.vendor | string | Não | Fabricante/marca |
| product.product_type | string | Não | Categoria do produto |
| product.status | string | Não | Status (active/draft/archived) |
| product.tags | string | Não | Tags separadas por vírgula |
| product.variants | array | Não | Array de variantes (preço, SKU, etc.) |
| product.images | array | Não | Array de URLs de imagens |
| responseVariable | string | Não | Nome da variável (padrão: shopifyResult) |
Exemplo 1: Criar Produto Simples
Objetivo: Criar um produto básico com título, preço e estoque.
JSON para Importar
{
"name": "Shopify - Criar Produto Simples",
"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": "Criar Produto",
"operation": "create",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"product": {
"title": "Camiseta Básica Preta",
"body_html": "<p>Camiseta 100% algodão, confortável e durável.</p>",
"vendor": "Minha Marca",
"product_type": "Roupas",
"tags": "camiseta, algodão, básica",
"status": "active",
"variants": [
{
"price": "49.90",
"sku": "CAM-BASIC-P",
"inventory_quantity": 50
}
]
},
"responseVariable": "productResult"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Produto criado!\n\nID: {{productResult.product.id}}\nTítulo: {{productResult.product.title}}\nPreço: R$ {{productResult.product.variants[0].price}}\nEstoque: {{productResult.product.variants[0].inventory_quantity}} unidades"
}
}
},
{
"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: Produto criado!
ID: 8234567890123
Título: Camiseta Básica Preta
Preço: R$ 49.90
Estoque: 50 unidades
Exemplo 2: Criar Produto com Variantes (Tamanhos)
Objetivo: Criar produto com múltiplas variantes (P, M, G).
JSON para Importar
{
"name": "Shopify - Produto com Variantes",
"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": "Criar Produto",
"operation": "create",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"product": {
"title": "Camiseta Premium",
"body_html": "<p>Camiseta premium com várias opções de tamanho</p>",
"vendor": "Fashion Brand",
"product_type": "Roupas",
"status": "active",
"options": [
{
"name": "Tamanho",
"values": ["P", "M", "G", "GG"]
}
],
"variants": [
{
"option1": "P",
"price": "59.90",
"sku": "PREM-P",
"inventory_quantity": 20
},
{
"option1": "M",
"price": "59.90",
"sku": "PREM-M",
"inventory_quantity": 30
},
{
"option1": "G",
"price": "59.90",
"sku": "PREM-G",
"inventory_quantity": 25
},
{
"option1": "GG",
"price": "64.90",
"sku": "PREM-GG",
"inventory_quantity": 15
}
]
},
"responseVariable": "productWithVariants"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Produto criado com 4 variantes!\n\nID: {{productWithVariants.product.id}}\nTamanhos disponíveis: P, M, G, GG"
}
}
},
{
"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: Produto criado com 4 variantes!
ID: 8234567890456
Tamanhos disponíveis: P, M, G, GG
Exemplo 3: Criar Produto via Input do Usuário
Objetivo: Permitir usuário criar produto informando dados via WhatsApp.
JSON para Importar
{
"name": "Shopify - Criar Produto por WhatsApp",
"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": "Vamos criar um novo produto na sua loja Shopify!"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Nome",
"parameters": {
"message": "Qual o nome do produto?",
"variable": "productName"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Descrição",
"parameters": {
"message": "Descreva o produto:",
"variable": "productDesc"
}
}
},
{
"id": "number_1",
"type": "number",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Preço",
"parameters": {
"message": "Qual o preço? (exemplo: 99.90)",
"variable": "productPrice",
"min": 0.01,
"decimals": 2
}
}
},
{
"id": "number_2",
"type": "number",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Estoque",
"parameters": {
"message": "Quantidade em estoque?",
"variable": "productStock",
"min": 0,
"decimals": 0
}
}
},
{
"id": "shopify_1",
"type": "shopify",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Criar no Shopify",
"operation": "create",
"resource": "products",
"config": {
"shopName": "minhaloja",
"accessToken": "shpat_xxxxxxxxxxxxx",
"apiVersion": "2025-01"
},
"product": {
"title": "{{productName}}",
"body_html": "<p>{{productDesc}}</p>",
"vendor": "Minha Loja",
"status": "active",
"variants": [
{
"price": "{{productPrice}}",
"inventory_quantity": "{{productStock}}"
}
]
},
"responseVariable": "createdProduct"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1500, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Produto criado com sucesso!\n\nNome: {{productName}}\nPreço: R$ {{productPrice}}\nEstoque: {{productStock}} unidades\n\nID no Shopify: {{createdProduct.product.id}}\n\nO produto já está ativo na sua loja!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "number_1" },
{ "source": "number_1", "target": "number_2" },
{ "source": "number_2", "target": "shopify_1" },
{ "source": "shopify_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Vamos criar um novo produto na sua loja Shopify!
Sistema: Qual o nome do produto?
Usuário: Tênis Esportivo Nike
Sistema: Descreva o produto:
Usuário: Tênis para corrida, confortável e leve
Sistema: Qual o preço? (exemplo: 99.90)
Usuário: 299.90
Sistema: Quantidade em estoque?
Usuário: 25
Sistema: Produto criado com sucesso!
Nome: Tênis Esportivo Nike
Preço: R$ 299.90
Estoque: 25 unidades
ID no Shopify: 8234567890789
O produto já está ativo na sua loja!
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,
"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": []
}
}
Boas Práticas
SIM: - Sempre crie produtos como "draft" primeiro, revise e depois mude para "active" - Use SKUs únicos e organizados (ex: PROD-CAT-001) - Preencha vendor e product_type para melhor organização - Use tags para facilitar busca e filtros - Valide dados do usuário antes de criar produto - Salve o ID do produto criado para futuras atualizações
NÃO: - Não crie produtos duplicados - verifique se já existe antes - Não deixe campos importantes vazios (descrição, preço) - Não use preços com mais de 2 casas decimais - Não esqueça de definir inventory_quantity (estoque) - Não exponha seu accessToken em logs ou mensagens
Dicas
Dica 1 - Validação: Sempre valide os dados antes de enviar para o Shopify para evitar erros.
Dica 2 - Variantes: Se seu produto tem cores/tamanhos, use variantes ao invés de criar produtos separados.
Dica 3 - Imagens: Adicione imagens no campo images com array de objetos { src: "https://..." }.
Dica 4 - SEO: Use o campo metafields para adicionar informações de SEO (title, description).
Dica 5 - Status Draft: Sempre crie como "draft" para revisar antes de publicar automaticamente.
Dica 6 - Testes: Use uma loja de desenvolvimento/teste do Shopify antes de integrar com produção.
Próximo Node
→ SHOPIFY PRODUCT GET - Buscar dados de um produto → SHOPIFY PRODUCT UPDATE - Atualizar produto existente → SHOPIFY PRODUCT LIST - Listar todos os produtos