Manual do usuárioFluxos de trabalhoImportar dados de produtos

Importar dados de produtos para o Vecta Desk

Sincronize, de forma agendada, os dados do catálogo de produtos do seu armazém de dados para o seu CRM.

Use este padrão para manter o Vecta Desk sincronizado com os dados de produtos do seu armazém de dados (por exemplo, Snowflake, BigQuery, PostgreSQL).

Estrutura do fluxo de trabalho

  1. Gatilho: agendamento.
  2. Código: consultar seu armazém de dados.
  3. Código (opcional): formatar os dados como array.
  4. Iterador: percorrer cada produto.
  5. Inserir/atualizar registro: criar ou atualizar no Vecta Desk.

Etapa 1: agendar o gatilho

Defina o fluxo de trabalho para executar em uma frequência que atenda às suas necessidades de atualização dos dados:

  • A cada 5 minutos para sincronização quase em tempo real.
  • A cada hora para dados menos críticos.
  • Diariamente para atualizações em lote.

Etapa 2: consultar seu armazém de dados

Adicione uma ação de Código para buscar dados recentes:

export const main = async () => {
  const intervalMinutes = 10; // Igual à frequência do seu agendamento
  const cutoffTime = new Date(Date.now() - intervalMinutes * 60 * 1000).toISOString();
 
  // Substitua pela conexão real do seu armazém de dados
  const response = await fetch("https://seu-armazem-api.com/query", {
    method: "POST",
    headers: {
      "Authorization": "Bearer SUA_API_KEY",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      query: `
        SELECT id, name, sku, price, stock_quantity, updated_at
        FROM products
        WHERE updated_at >= '${cutoffTime}'
      `
    })
  });
 
  const data = await response.json();
  return { products: data.results };
};

Filtre por updated_at >= últimos X minutos para recuperar apenas registros alterados recentemente. Isso mantém a sincronização eficiente.

Etapa 3: formatar os dados (opcional)

Se o seu armazém de dados retornar dados em um formato que precise de transformação, adicione outra ação de Código. Transformações comuns incluem conversões de tipo, renomeação de campos e limpeza de dados.

Exemplo: dados de produto com conversões de tipo

export const main = async (params: { products: any }) => {
  const products = typeof params.products === "string"
    ? JSON.parse(params.products)
    : params.products;
 
  return {
    products: products.map(product => ({
      externalId: product.id,
      name: product.name,
      sku: product.sku,
      price: parseFloat(product.price),        // String → Número
      stockQuantity: parseInt(product.stock_quantity),
      isActive: product.status === "active"    // String → Booleano
    }))
  };
};

Exemplo: formatação de data e moeda

export const main = async (params: { deals: any }) => {
  const deals = typeof params.deals === "string"
    ? JSON.parse(params.deals)
    : params.deals;
 
  return {
    deals: deals.map(deal => ({
      ...deal,
      // Converte timestamp Unix em data ISO
      closedAt: deal.closed_timestamp
        ? new Date(deal.closed_timestamp * 1000).toISOString()
        : null,
      // Garante que o valor seja um número (remove símbolos de moeda)
      amount: parseFloat(String(deal.amount).replace(/[^0-9.-]/g, "")),
      // Normaliza nomes de etapa
      stage: deal.stage?.toLowerCase().replace(/_/g, " ")
    }))
  };
};

Transformações comuns

Formato de origemFormato de destinoCódigo
"true" / "false"true / falsev === true || v === "true"
"123.45"123.45parseFloat(value)
"active""ACTIVE"value.toUpperCase()
1704067200 (Unix)Data ISOnew Date(v * 1000).toISOString()
"R$ 1.234,56"1234.56parseFloat(v.replace(/[^0-9.-]/g, ""))
null / undefined""value || ""

Etapa 4: iterar pelos produtos

Adicione uma ação de Iterador:

  • Entrada: {{code.products}}

Isso percorre cada produto no array.

Etapa 5: inserir/atualizar cada registro

Dentro do iterador, adicione uma ação de Inserir/atualizar registro:

ConfiguraçãoValor
ObjetoSeu objeto Produto personalizado
Correspondência porID externo ou SKU (identificador único)
Nome{{iterator.item.name}}
SKU{{iterator.item.sku}}
Preço{{iterator.item.price}}

Use inserir/atualizar (atualizar ou criar) em vez de construir ramificações separadas para criação vs. atualização. É mais rápido de construir e mais fácil de depurar.

Casos de uso de exemplo

FonteDados
Sistema ERPCatálogo de produtos, preços, inventário
Plataforma de e-commercePedidos, clientes, atualizações de produtos
Armazém de dadosMétricas agregadas, dados enriquecidos
Sistema de inventárioNíveis de estoque, alertas de reposição

Relacionados