Pular para conteúdo

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:

  1. Automação de catálogo: Criar produtos automaticamente via flows
  2. Integração com sistemas: Sincronizar produtos de ERPs, planilhas ou outros sistemas
  3. Criação em massa: Adicionar múltiplos produtos rapidamente
  4. Atualização de estoque: Criar produtos quando novos itens chegam ao inventário

Como funciona internamente?

Quando o SHOPIFY PRODUCT CREATE é executado, o sistema:

  1. Valida credenciais (shopName e accessToken)
  2. Prepara dados do produto (título, descrição, preço, etc.)
  3. Envia requisição POST para API Shopify /admin/api/{version}/products.json
  4. Recebe resposta com dados do produto criado (incluindo ID)
  5. Salva resultado na variável especificada
  6. 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:

  1. Importação de catálogo: "Carregar produtos de planilha Excel para Shopify"
  2. Sincronização ERP: "Criar produtos no Shopify quando cadastrados no ERP"
  3. Dropshipping: "Adicionar produtos de fornecedor automaticamente"
  4. Marketplace: "Permitir vendedores criarem produtos via WhatsApp"
  5. Produtos sazonais: "Criar coleção de produtos para Black Friday"

Quando NÃO usar:

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