Este guia descreve como usar o serviço de segmentação por lista de clientes de fidelidade na API Merchant. Esse serviço permite que comerciantes e provedores de fidelidade terceirizados que atuam em nome dos comerciantes gerenciem dados de fidelidade do cliente, como identificadores de usuário e informações de nível, para personalização orgânica na Pesquisa Google, sem exigir uma conta ativa do Google Ads.
Visão geral
Use o serviço de Segmentação por lista de clientes de fidelidade para fazer upload de dados de fidelidade, que são usados para oferecer recursos de personalização orgânica de fidelidade na Pesquisa Google, como mostrar preços específicos para membros. Você usa o método personalizado ManageLoyaltyCustomerMatch para associar seus clientes a níveis do programa de fidelidade, permitindo inserir, atualizar ou remover o status de fidelidade com base nos identificadores de usuário.
Principais conceitos
- Interface unificada:um endpoint exclusivo para adicionar, atualizar ou remover detalhes do nível de fidelidade do cliente.
- Design com foco na privacidade:para proteger a privacidade do usuário e evitar sondagens não autorizadas de contas, a API não oferece suporte a operações GET ou LIST, garantindo que os dados sejam gerenciados sem recuperação ou auditoria.
- Identificação flexível:faça a correspondência de usuários usando pelo menos um identificador válido, como um endereço de e-mail, endereço físico ou número de telefone.
- Tratamento com base em consentimento:o serviço armazena e usa dados do cliente somente quando o usuário final concedeu o consentimento necessário ao Google. Para proteger e evitar a sondagem da existência da conta ou do status de consentimento, o serviço retorna um sucesso silencioso se uma correspondência não for feita ou o consentimento não for concedido.
Pré-requisitos
Siga estes requisitos para usar o serviço de Segmentação por lista de clientes de fidelidade:
- Configuração da conta:verifique se você tem uma conta ativa do Merchant Center ou acesso autorizado à conta do comerciante, caso seja um provedor de fidelidade terceirizado. Não é necessário criar uma conta do Google Ads para usar o serviço de segmentação por lista de clientes de fidelidade.
- Configuração do programa de fidelidade:ative o programa de fidelidade na sua conta do Merchant Center e defina níveis de fidelidade.
- Ordem dos níveis:saiba a ordem em que os níveis de fidelidade são definidos na interface do Merchant Center. A API usa essa sequência exata para o mapeamento de enumeração.
Método: ManageLoyaltyCustomerMatch
O método ManageLoyaltyCustomerMatch serve como a interface central para
gerenciar associações de fidelidade do cliente. Com base na entrada fornecida, o serviço
determina automaticamente se é necessário inserir, atualizar ou remover o status
de um cliente no nível de fidelidade. A operação é idempotente: solicitações idênticas repetidas têm o mesmo efeito que uma única solicitação.
A solicitação a seguir demonstra como gerenciar associações de fidelidade do cliente pela API:
POST https://merchantapi.googleapis.com/{API_VERSION}/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage
Essa solicitação define os seguintes parâmetros de caminho obrigatórios:
API_VERSION: a versão da API, como v1.ACCOUNT_ID: o ID da conta do Merchant Center.
Inclua um objeto loyaltyCustomer no corpo da solicitação.
{
"userIdentifier": {
"emailAddress": "string",
"address": {
"addressLines": ["string"],
"locality": "string",
"administrativeArea": "string",
"postalCode": "string",
"regionCode": "string"
},
"phoneNumber": "string"
},
"loyaltyTier": "LoyaltyTier",
"pointBalance": "integer"
}
Campos loyaltyCustomer
- userIdentifier: o conjunto de identificadores usados para corresponder ao cliente. Pelo menos um campo em userIdentifier precisa ser fornecido e válido.
- loyaltyTier: o nível de fidelidade a ser associado ao cliente. Corresponde à ordem do nível na configuração do Merchant Center.
Para mais detalhes, consulte
Noções básicas sobre o mapeamento do
loyaltyTier. Use NON_MEMBER para remover uma associação. - pointBalance: o saldo de pontos atual do cliente.
Campos userIdentifier
Forneça pelo menos um dos seguintes campos:
- emailAddress: o endereço de e-mail do cliente.
- address: o endereço físico do cliente. PostalCode é obrigatório.
- phoneNumber: número de telefone do cliente. O formato E.164 é recomendado.
Entender o mapeamento loyaltyTier
A API não usa os nomes personalizados. Os valores de enumeração loyaltyTier (TIER1 a TIER7) são rótulos semânticos. Eles não usam os nomes personalizados (por exemplo, "Recompensas Ouro") ou os rótulos personalizados (por exemplo, "nível_ouro") que você atribuiu na interface do Merchant Center. Em vez disso, eles são mapeados estritamente para a ordem em que você definiu os níveis nas configurações do programa de fidelidade no Merchant Center:
TIER1: corresponde ao primeiro nível listado na configuração do programa de fidelidade do Merchant Center.TIER2: corresponde ao segundo nível listado na configuração do programa de fidelidade do Merchant Center.TIER3aTIER7: correspondem aos níveis do terceiro ao sétimo listados na configuração do programa de fidelidade do Merchant Center.
Exemplo:
Se o programa de fidelidade do Merchant Center tiver níveis definidos nesta ordem:
- Nome do nível: "Silver Status", Rótulo do nível: "silver"
- Nome do nível: "Membro Gold", rótulo do nível: "gold"
- Nome do nível: "Platinum Elite", Rótulo do nível: "platinum"
Em seguida, em chamadas de API accounts.loyaltyCustomers.manage:
- Para atribuir um cliente ao "Status Silver", use
loyaltyTier: TIER1. - Para atribuir um cliente a "Membro Gold", use
loyaltyTier: TIER2. - Para atribuir um cliente ao "Platinum Elite", use
loyaltyTier: TIER3.
Valores de enumeração LoyaltyTier
TIER1TIER2TIER3TIER4TIER5TIER6TIER7NON_MEMBER(usado para sinalizar a remoção da associação de fidelidade do cliente)
Entender o corpo da resposta ManageLoyaltyCustomerMatch
O método ManageLoyaltyCustomerMatch retorna um
objeto ManageLoyaltyCustomerMatchResponse:
{
"loyaltyCustomer": {
// loyaltyCustomer object from the request
}
}
Considerações importantes sobre as respostas
Upsert bem-sucedido (dados armazenados): para armazenar ou atualizar com êxito uma associação de nível de fidelidade de um cliente, atenda às seguintes condições:
- você corresponde a um usuário do Google com o
userIdentifierfornecido - você define o
loyaltyTierna solicitação com um valor válido diferente deNON_MEMBER - o usuário correspondente deu consentimento para o uso de dados de fidelidade
- você corresponde a um usuário do Google com o
A resposta contém o objeto loyaltyCustomer da sua solicitação, indicando
que o serviço processou e armazenou os dados:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}
}
- Exclusão bem-sucedida:para remover uma associação de fidelidade
existente do cliente com o comerciante, as seguintes condições
precisam ser atendidas:
- você corresponde a um usuário do Google com o
userIdentifierfornecido - você define o
loyaltyTierna solicitação comoNON_MEMBER
- você corresponde a um usuário do Google com o
A resposta é um objeto JSON vazio:
{}
- Nenhuma correspondência / nenhum consentimento (sucesso silencioso): se o
userIdentifierfornecido não corresponder a uma Conta do Google ou se o usuário correspondente não tiver consentido com o uso de dados de fidelidade, a API vai retornar um status HTTP 200 OK com um objeto JSON vazio:{}. Isso acontece nas tentativas de upsert e remoção.
Exemplos
TIER1 corresponde ao primeiro nível definido (por exemplo, "Basic"), e TIER2 corresponde ao segundo nível (por exemplo, "Premium").
Para adicionar um cliente ao TIER2 ou atualizar o status dele usando um endereço de e-mail, envie a seguinte solicitação:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage"
-d '{
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}'
Quando um usuário é correspondido e dá consentimento, a API retorna a seguinte resposta:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}
}
Quando não há correspondência ou o usuário não deu consentimento, a API retorna a seguinte resposta:
{}
Para remover a associação de fidelidade de um cliente usando um número de telefone, envie a seguinte solicitação:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage" \
-d '{
"userIdentifier": {
"phoneNumber": "+18005550132"
},
"loyaltyTier": "NON_MEMBER"
}'
Independente de um registro ter existido ou não, a API retorna a seguinte resposta de sucesso:
{}
Para adicionar ou atualizar um cliente usando vários identificadores, envie a seguinte solicitação:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage" \
-d '{
"userIdentifier": {
"emailAddress": "user@example.com",
"address": {
"postalCode": "94043",
"regionCode": "US"
}
},
"loyaltyTier": "TIER1"
}'
A resposta é semelhante ao primeiro exemplo, dependendo da correspondência e do consentimento.
Tratamento de erros
A API usa códigos HTTP padrão. Algumas strings de erro comuns incluem:
| Código HTTP | Error String | Descrição |
| 400 | INVALID_ARGUMENT | O user_identifier ou loyalty_tier está ausente, ou o identificador está vazio. |
| 401 | UNAUTHENTICATED | Credenciais inválidas ou ausentes. |
| 403 | PERMISSION_DENIED | O usuário autenticado não tem acesso à conta especificada do Merchant Center. |
| 404 | NOT_FOUND | O rótulo do nível de fidelidade especificado não existe na sua configuração. |
| 412 | FAILED_PRECONDITION | Você não configurou um programa de fidelidade na sua conta. |
| 429 | RESOURCE_EXHAUSTED | Limite de cota atingido. |
Exemplos de erro
Exemplo para 404 NOT_FOUND:
Qualquer solicitação válida para um ID de conta que não tenha um programa de fidelidade configurado.
A API retorna a seguinte resposta de erro:
{
"error": {
"code": 404,
"message": "The loyalty program is not found for account: {ACCOUNT_ID}.",
"status": "NOT_FOUND",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "notFound",
"domain": "merchantapi.googleapis.com",
"metadata": {
"ACCOUNT_ID": "{ACCOUNT_ID}",
"REASON": "NOT_FOUND_LOYALTY_PROGRAM"
}
}
]
}
}
Motivo:a conta do comerciante no caminho não tem um programa de fidelidade ativo.
Exemplos de 400 INVALID_ARGUMENT:
Um erro ocorre se a solicitação contiver um valor inválido para o campo loyaltyTier:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER11",
"pointBalance": 100
}
}
A API retorna a seguinte resposta de erro:
{
"error": {
"code": 400,
"message": "Invalid value at 'loyalty_customer.loyalty_tier' (type.googleapis.com/google.shopping.merchant.loyaltycustomers.v1.LoyaltyCustomer.LoyaltyTier), \"TIER11\"",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "loyalty_customer.loyalty_tier",
"description": "Invalid value at 'loyalty_customer.loyalty_tier' (type.googleapis.com/google.shopping.merchant.loyaltycustomers.v1.LoyaltyCustomer.LoyaltyTier), \"TIER11\""
}
]
}
]
}
}
Motivo:TIER11 não é um valor de enum válido para loyaltyTier. O mesmo erro pode acontecer quando você tenta especificar TIER2 quando há apenas um nível disponível.
Um erro vai ocorrer se o campo obrigatório loyaltyTier estiver faltando no corpo da solicitação:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"pointBalance": 100
}
}
A API retorna a seguinte resposta de erro:
{
"error": {
"code": 400,
"message": "[loyalty_customer.loyalty_tier] Required field not provided: loyalty_customer.loyalty_tier",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "required",
"domain": "merchantapi.googleapis.com",
"metadata": {
"FIELD_LOCATION": "loyalty_customer.loyalty_tier",
"REASON": "MISSING_REQUIRED_FIELD"
}
}
]
}
}
Motivo:o campo loyaltyTier é obrigatório.
Um erro vai ocorrer se um identificador de endereço estiver incompleto, por exemplo, quando o campo "postalCode" estiver faltando:
{
"loyaltyCustomer": {
"userIdentifier": {
"address": {
"locality": "Sunnyvale",
"administrativeArea": "CA",
"regionCode": "US"
}
},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
A API retorna a seguinte resposta de erro:
{
"error": {
"code": 400,
"message": "[loyalty_customer.user_identifier] The format of loyalty_customer.user_identifier does not match the expected format ... Value: at least one valid user identifier should be provided.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "invalid",
"domain": "merchantapi.googleapis.com",
"metadata": {
"FIELD_NAME": "loyalty_customer.user_identifier",
"REASON": "INVALID_VALUE"
}
}
]
}
}
Motivo:um endereço foi fornecido, mas não tem o campo obrigatório postalCode
e, portanto, não é considerado um identificador válido.
Um erro vai ocorrer se você solicitar um índice de nível fora dos limites do programa configurado:
Cenário:o comerciante tem apenas um nível configurado no Merchant Center.
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 100
}
}
A API retorna a seguinte resposta de erro:
{
"error": {
"code": 400,
"message": "[loyalty_customer.loyalty_tier] The format of loyalty_customer.loyalty_tier does not match the expected format `valid LoyaltyTier`. Value: TIER2.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "invalid",
"domain": "merchantapi.googleapis.com",
"metadata": {
"FIELD_NAME": "loyalty_customer.loyalty_tier",
"PATTERN": "valid LoyaltyTier",
"FIELD_VALUE": "TIER2",
"REASON": "INVALID_VALUE"
}
}
]
}
}
Motivo:TIER2 foi solicitado, mas o programa de fidelidade vinculado à conta não tem um segundo nível definido.
Um erro ocorre se a solicitação contiver um emailAddress malformado:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@google"
},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
A API retorna a seguinte resposta de erro:
{
"error": {
"code": 400,
"message": "[loyalty_customer.user_identifier] The format of loyalty_customer.user_identifier does not match the expected format `email_address: \t \"customer@google\"\n`. Value: at least one valid user identifier should be provided.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "invalid",
"domain": "merchantapi.googleapis.com",
"metadata": {
"FIELD_NAME": "loyalty_customer.user_identifier",
"REASON": "INVALID_VALUE"
}
}
]
}
}
Motivo:o formato do endereço de e-mail é inválido.
Um erro vai ocorrer se o objeto userIdentifier estiver vazio:
{
"loyaltyCustomer": {
"userIdentifier": {},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
A API retorna a seguinte resposta de erro:
{
"error": {
"code": 400,
"message": "[loyalty_customer.user_identifier] Required field not provided: loyalty_customer.user_identifier",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "required",
"domain": "merchantapi.googleapis.com",
"metadata": {
"FIELD_LOCATION": "loyalty_customer.user_identifier",
"REASON": "MISSING_REQUIRED_FIELD"
}
}
]
}
}
Motivo:o objeto userIdentifier está presente, mas não contém campos de identificador reais.
Observação: validação de identificador.
- A API realiza verificações básicas de formato em identificadores (por exemplo, estrutura de e-mail, presença de
postalCodeem endereços). - No entanto, alguns identificadores que passam nas verificações iniciais podem não corresponder a nenhuma conta de usuário do Google ou podem não estar em um formato reconhecido pelo sistema de correspondência de back-end. Nesses casos, você vai receber a resposta vazia de sucesso silencioso
{}com o status HTTP200 OK.
Práticas recomendadas
Siga estas práticas recomendadas para otimizar sua integração.
Para integração em grande escala:como a API opera por solicitação, o paralelismo do lado do cliente é necessário para alcançar a capacidade de processamento necessária para grandes conjuntos de dados. Projete sua integração para gerenciar várias solicitações simultâneas. Para orientações sobre como estruturar sua implementação para lidar com volumes maiores por paralelização, consulte nosso guia sobre como enviar várias solicitações.
Gerenciamento de cotas:a cota padrão é de 1.000.000 de solicitações por dia e 10.000 solicitações por minuto. Para saber como monitorar e verificar suas cotas, consulte Cotas e limites.
Priorize o endereço de e-mail:sempre que possível, inclua o
emailAddressdo cliente nouserIdentifier. Os endereços de e-mail geralmente são o identificador mais preciso e confiável para associar usuários às contas do Google.Lide com respostas vazias:crie seu aplicativo para interpretar corretamente respostas
{}vazias como um sucesso, entendendo que isso significa que os dados não foram armazenados por motivos de privacidade (sem correspondência ou sem consentimento). Não tente de novo.Verifique a ordem dos níveis:sempre confirme a ordem dos níveis de fidelidade na interface do Merchant Center para garantir que você está usando os valores de enumeração
TIER1aTIER7corretos nas suas chamadas de API. Esse mapeamento é baseado na ordem definida na interface, não nos nomes.Monitore erros:registre e monitore as respostas da API, prestando atenção a erros
4xxpara detectar problemas de integração, principalmente erros404, que podem indicar uma incompatibilidade no entendimento do nível.