Pular para conteúdo

SHOPIFY CUSTOMER SEARCH - Buscar Cliente por Email/Nome

O que é este Node?

O SHOPIFY CUSTOMER SEARCH é o node responsável por buscar clientes usando queries (email, nome, telefone).

Por que este Node existe?

Buscar clientes sem saber o ID é necessário para atendimento e integração.

Como funciona internamente?

Código interno (shopify.executor.ts:107-111):

case 'search': {
  const query = this.replaceVariables(node.data.query, context.variables);
  const response = await axios.get(`${baseUrl}/customers/search.json?query=${encodeURIComponent(query)}`, { headers });
  result = response.data;
  break;
}

Parâmetros

Campo Tipo Obrigatório Descrição
config.shopName string Sim Nome da loja
config.accessToken string Sim Token de acesso
query string Sim Busca (email, nome, telefone)
responseVariable string Não Variável (padrão: shopifyResult)

Queries Suportadas

Query Exemplo Descrição
Email email:joao@example.com Busca por email exato
Nome first_name:João Busca por nome
Telefone phone:+5511999999999 Busca por telefone
Qualquer João Silva Busca em todos os campos

Exemplo: Buscar Cliente por Email

{
  "name": "Shopify - Buscar por Email",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "email_1",
      "type": "email",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Email",
        "parameters": {
          "message": "Digite o email do cliente:",
          "variable": "customerEmail"
        }
      }
    },
    {
      "id": "shopify_1",
      "type": "shopify",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Buscar",
        "operation": "search",
        "resource": "customers",
        "config": {
          "shopName": "minhaloja",
          "accessToken": "shpat_xxxxxxxxxxxxx"
        },
        "query": "email:{{customerEmail}}",
        "responseVariable": "searchResult"
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Encontrou?",
        "parameters": {
          "conditions": [
            {
              "variable": "searchResult.customers.length",
              "operator": ">",
              "value": "0"
            }
          ],
          "operator": "AND"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Encontrado",
        "parameters": {
          "message": "✅ Cliente encontrado!\n\nNome: {{searchResult.customers[0].first_name}} {{searchResult.customers[0].last_name}}\nEmail: {{searchResult.customers[0].email}}\nID: {{searchResult.customers[0].id}}\nPedidos: {{searchResult.customers[0].orders_count}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Não Encontrado",
        "parameters": {
          "message": "❌ Cliente não encontrado!\n\nEmail: {{customerEmail}}\n\nCadastre-se para continuar."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "email_1" },
    { "source": "email_1", "target": "shopify_1" },
    { "source": "shopify_1", "target": "condition_1" },
    { "source": "condition_1", "target": "message_1", "label": "true" },
    { "source": "condition_1", "target": "message_2", "label": "false" },
    { "source": "message_1", "target": "end_1" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Resposta do Node

{
  "customers": [
    {
      "id": 6234567890123,
      "email": "joao@example.com",
      "first_name": "João",
      "last_name": "Silva",
      "phone": "+5511999999999",
      "orders_count": 5,
      "total_spent": "1249.50"
    }
  ]
}

Boas Práticas

SIM: - Sempre verifique se customers.length > 0 antes de acessar dados - Use email: prefix para busca exata por email - Trate caso de múltiplos resultados - Salve ID do cliente encontrado para operações futuras

NÃO: - Não assuma que sempre haverá resultado - Não acesse customers[0] sem verificar se array existe - Não ignore múltiplos resultados (clientes com nomes similares)

Dicas

Dica 1: Busca retorna array customers - pode ter 0, 1 ou múltiplos resultados.

Dica 2: Use email: para busca precisa, evitando falsos positivos.

Dica 3: Para busca em qualquer campo, omita o prefix (ex: João).

Dica 4: Resultados vêm ordenados por relevância.

Dica 5: Campos retornados são os mesmos de GET customer.

Próximo Node

SHOPIFY CUSTOMER GET - Buscar por ID depois de search → SHOPIFY CUSTOMER CREATE - Criar se não encontrou → SHOPIFY CUSTOMER UPDATE - Atualizar depois de encontrar