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: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