Ten przewodnik opisuje, jak korzystać z usługi kierowania na listę klientów w programie lojalnościowym w interfejsie Merchant API. Ta usługa umożliwia sprzedawcom zarządzanie danymi o programach lojalnościowych, takimi jak identyfikatory użytkowników i informacje o poziomach, na potrzeby personalizacji wyników wyszukiwania w Google bez konieczności posiadania aktywnego konta Google Ads.
Przegląd
Użyj usługi kierowania na listę klientów w programie lojalnościowym, aby przesyłać dane o lojalności, które są następnie wykorzystywane do udostępniania w wyszukiwarce Google bezpłatnych funkcji personalizacji w programie lojalnościowym, takich jak wyświetlanie cen dla uczestników programu. Za pomocą ManageLoyaltyCustomerMatchmetody niestandardowej możesz powiązać klientów z poziomami programu lojalnościowego, co umożliwia wstawianie, aktualizowanie i usuwanie ich statusu w programie lojalnościowym na podstawie identyfikatorów użytkowników.
Kluczowych pojęć
- Ujednolicony interfejs: unikalny punkt końcowy do dodawania, aktualizowania i usuwania informacji o poziomach lojalności klientów.
- Projekt skoncentrowany na ochronie prywatności: aby chronić prywatność użytkowników i zapobiegać nieautoryzowanemu sprawdzaniu kont, interfejs API nie obsługuje operacji GET ani LIST, co zapewnia zarządzanie danymi bez ich pobierania ani audytu.
- Elastyczna identyfikacja: dopasowuj użytkowników za pomocą co najmniej jednego prawidłowego identyfikatora, takiego jak adres e-mail, adres fizyczny lub numer telefonu.
- Przetwarzanie oparte na zgodzie: usługa przechowuje i wykorzystuje dane klientów tylko wtedy, gdy użytkownik udzielił Google niezbędnej zgody. Aby chronić użytkowników przed sprawdzaniem istnienia konta lub stanu zgody, usługa zwraca ciche potwierdzenie, jeśli nie znajdzie dopasowania lub nie uzyska zgody.
Wymagania wstępne
Aby korzystać z usługi kierowania na listę klientów w programie lojalnościowym, musisz spełniać te wymagania:
- Konfiguracja konta: upewnij się, że masz aktywne konto Merchant Center. Aby korzystać z usługi kierowania na listę klientów w programie lojalnościowym, nie musisz tworzyć konta Google Ads.
- Konfiguracja programu lojalnościowego: włącz program lojalnościowy na koncie Merchant Center i upewnij się, że masz zdefiniowane poziomy lojalnościowe.
- Kolejność poziomów: zwróć uwagę na kolejność, w jakiej poziomy programu lojalnościowego są zdefiniowane w interfejsie Merchant Center. Interfejs API używa tej dokładnej sekwencji do mapowania wyliczeń.
Metoda: ManageLoyaltyCustomerMatch
Metoda ManageLoyaltyCustomerMatch jest głównym interfejsem do zarządzania powiązaniami z programem lojalnościowym. Na podstawie podanych danych usługa automatycznie określa, czy wstawić, zaktualizować czy usunąć status poziomu lojalności klienta. Operacja jest idempotentna: powtarzane identyczne żądania mają taki sam efekt jak jedno żądanie.
Poniższe żądanie pokazuje, jak zarządzać powiązaniami lojalnościowymi klientów za pomocą interfejsu API:
POST https://merchantapi.googleapis.com/{api_version}/accounts/{account_id}/loyaltyCustomers:manage
To żądanie definiuje te wymagane parametry ścieżki:
api_version: wersja interfejsu API, np. v1.account_id: identyfikator konta Merchant Center.
W treści żądania umieść obiekt loyaltyCustomer.
{
"userIdentifier": {
"emailAddress": "string",
"address": {
"addressLines": ["string"],
"locality": "string",
"administrativeArea": "string",
"postalCode": "string",
"regionCode": "string"
},
"phoneNumber": "string"
},
"loyaltyTier": "LoyaltyTier",
"pointBalance": "integer"
}
pola loyaltyCustomer
- userIdentifier: zestaw identyfikatorów używanych do dopasowywania klienta. W polu userIdentifier musi być podane co najmniej 1 prawidłowe pole.
- loyaltyTier: poziom lojalności do powiązania z klientem. Odpowiada kolejności poziomu w konfiguracji Merchant Center.
Więcej informacji znajdziesz w artykule Wyjaśnienie mapowania
loyaltyTier. Aby usunąć istniejące powiązanie, użyj wartości NON_MEMBER. - pointBalance: aktualna liczba punktów klienta.
Pola userIdentifier
Musisz wypełnić co najmniej jedno z tych pól:
- emailAddress: adres e-mail klienta.
- address: fizyczny adres klienta. Wymagany jest kod pocztowy.
- phoneNumber: numer telefonu klienta. Zalecany jest format E.164.
Omówienie mapowania loyaltyTier
Interfejs API nie używa niestandardowych nazw. Wartości wyliczeniowe loyaltyTier (od TIER1 do TIER7) to etykiety semantyczne. Nie używają one niestandardowych nazw (np. „Gold Rewards”) ani niestandardowych etykiet (np. „gold_tier”), które zostały przypisane w interfejsie Merchant Center. Zamiast tego są one ściśle powiązane z kolejnością, w jakiej zdefiniowano poziomy w ustawieniach programu lojalnościowego w Merchant Center:
TIER1: odpowiada pierwszemu poziomowi wymienionemu w konfiguracji programu lojalnościowego w Merchant Center.TIER2: odpowiada drugiemu poziomowi wymienionemu w konfiguracji programu lojalnościowego w Merchant Center.TIER3–TIER7: odpowiadają poziomom od trzeciego do siódmego wymienionym w konfiguracji programu lojalnościowego w Merchant Center.
Przykład:
Jeśli Twój program lojalnościowy w Merchant Center ma zdefiniowane poziomy w tej kolejności:
- Nazwa poziomu: „Silver Status”, etykieta poziomu: „silver”
- Nazwa poziomu: „Złoty członek”, etykieta poziomu: „złoty”
- Nazwa poziomu: „Platinum Elite”, etykieta poziomu: „platinum”
Następnie w sekcji accounts.loyaltyCustomers.manage wywołania interfejsu API:
- Aby przypisać klienta do „Silver Status”, musisz użyć
loyaltyTier: TIER1. - Aby przypisać klienta do grupy „Złoty klient”, musisz użyć wartości
loyaltyTier: TIER2. - Aby przypisać klienta do poziomu „Platinum Elite”, musisz użyć wartości
loyaltyTier: TIER3.
Wartości wyliczeniowe LoyaltyTier
TIER1TIER2TIER3TIER4TIER5TIER6TIER7NON_MEMBER(sygnalizuje usunięcie powiązania klienta z programem lojalnościowym)
Opis treści odpowiedzi ManageLoyaltyCustomerMatch
Metoda ManageLoyaltyCustomerMatch zwraca obiekt ManageLoyaltyCustomerMatchResponse:
{
"loyaltyCustomer": {
// loyaltyCustomer object from the request
}
}
Ważne uwagi dotyczące możliwych odpowiedzi:
Pomyślne wstawienie lub aktualizacja (dane zapisane): aby zapisać lub zaktualizować powiązanie klienta z poziomem programu lojalnościowego, spełnij te warunki:
- dopasujesz użytkownika Google do podanego
userIdentifier. - ustawisz w żądaniu parametr
loyaltyTierna prawidłową wartość inną niżNON_MEMBER. - dopasowany użytkownik wyraził zgodę na wykorzystanie danych o programie lojalnościowym.
- dopasujesz użytkownika Google do podanego
Odpowiedź zawiera obiekt loyaltyCustomer z Twojego żądania, co oznacza, że dane zostały przetworzone i zapisane:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}
}
- Usunięcie powiązania: aby usunąć powiązanie klienta z programem lojalnościowym u tego sprzedawcy, muszą być spełnione te warunki:
- dopasujesz użytkownika Google do podanego
userIdentifier. - ustawisz w prośbie wartość
loyaltyTiernaNON_MEMBER,
- dopasujesz użytkownika Google do podanego
Odpowiedzią jest pusty obiekt JSON:
{}
- Brak dopasowania lub brak zgody (ciche powodzenie): jeśli podany
userIdentifiernie pasuje do konta Google lub jeśli dopasowany użytkownik nie wyraził zgody na używanie danych o programie lojalnościowym, interfejs API zwraca stan HTTP 200 OK z pustym obiektem JSON:{}. Dotyczy to zarówno prób wstawiania lub aktualizowania, jak i usuwania.
Przykłady
TIER1 odpowiada pierwszemu zdefiniowanemu poziomowi sprzedawcy, czyli poziomowi „Podstawowy”, a TIER2 drugiemu poziomowi, czyli „Premium”.
Aby dodać klienta do poziomu TIER2 lub zaktualizować jego stan za pomocą adresu e-mail, wyślij to żądanie:
POST
"https://merchantapi.googleapis.com/v1/accounts/{account_id}/loyaltyCustomers:manage"
-d '{
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}'
Gdy użytkownik zostanie dopasowany i wyrazi zgodę, interfejs API zwróci tę odpowiedź:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}
}
Jeśli nie ma dopasowania lub użytkownik nie wyraził zgody, interfejs API zwraca tę odpowiedź:
{}
Aby usunąć powiązanie klienta z programem lojalnościowym za pomocą numeru telefonu, wyślij to żądanie:
POST
"https://merchantapi.googleapis.com/v1/accounts/{account_id}/loyaltyCustomers:manage" \
-d '{
"userIdentifier": {
"phoneNumber": "+18005550132"
},
"loyaltyTier": "NON_MEMBER"
}'
Niezależnie od tego, czy rekord istniał, interfejs API zwraca następującą odpowiedź o sukcesie:
{}
Aby dodać lub zaktualizować klienta za pomocą wielu identyfikatorów, wyślij to żądanie:
POST
"https://merchantapi.googleapis.com/v1/accounts/{account_id}/loyaltyCustomers:manage" \
-d '{
"userIdentifier": {
"emailAddress": "user@example.com",
"address": {
"postalCode": "94043",
"regionCode": "US"
}
},
"loyaltyTier": "TIER1"
}'
Odpowiedź jest podobna do pierwszego przykładu, w zależności od dopasowania i zgody.
Obsługa błędów
Interfejs API używa standardowych kodów HTTP. Typowe ciągi błędów to:
| Kod HTTP | Error String | Opis |
| 400 | INVALID_ARGUMENT | Brak atrybutu user_identifier lub loyalty_tier albo identyfikator jest pusty. |
| 401 | UNAUTHENTICATED | Nieprawidłowe lub brakujące dane logowania. |
| 403 | PERMISSION_DENIED | Uwierzytelniony użytkownik nie ma dostępu do określonego konta Merchant Center. |
| 404 | NOT_FOUND | Podana etykieta poziomu lojalności nie istnieje w Twojej konfiguracji. |
| 412 | FAILED_PRECONDITION | Nie masz skonfigurowanego programu lojalnościowego na koncie. |
| 429 | RESOURCE_EXHAUSTED | Osiągnięto limit. |
Przykłady błędów
Przykład dla 404 NOT_FOUND:
Każde prawidłowe żądanie identyfikatora konta, na którym nie skonfigurowano programu lojalnościowego.
Interfejs API zwraca tę odpowiedź o błędzie:
{
"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"
}
}
]
}
}
Przyczyna: konto sprzedawcy w ścieżce nie ma aktywnego programu lojalnościowego.
Przykłady 400 INVALID_ARGUMENT:
Jeśli żądanie zawiera nieprawidłową wartość pola loyaltyTier, wystąpi błąd:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER11",
"pointBalance": 100
}
}
Interfejs API zwraca tę odpowiedź o błędzie:
{
"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\""
}
]
}
]
}
}
Przyczyna: TIER11 nie jest prawidłową wartością typu wyliczeniowego atrybutu loyaltyTier. Ten sam błąd może wystąpić, gdy spróbujesz określić TIER2, a dostępny jest tylko jeden poziom.
Jeśli w treści żądania brakuje wymaganego pola loyaltyTier, wystąpi błąd:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"pointBalance": 100
}
}
Interfejs API zwraca tę odpowiedź o błędzie:
{
"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"
}
}
]
}
}
Powód: pole loyaltyTier jest wymagane.
Jeśli identyfikator adresu jest niekompletny, np. brakuje pola postalCode, wystąpi błąd:
{
"loyaltyCustomer": {
"userIdentifier": {
"address": {
"locality": "Sunnyvale",
"administrativeArea": "CA",
"regionCode": "US"
}
},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
Interfejs API zwraca tę odpowiedź o błędzie:
{
"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"
}
}
]
}
}
Przyczyna: podano adres, ale brakuje w nim wymaganego pola postalCode, więc nie jest on uznawany za prawidłowy identyfikator.
Błąd występuje, jeśli poprosisz o indeks poziomu, który wykracza poza zakres skonfigurowanego programu:
Scenariusz: sprzedawca ma tylko 1 poziom skonfigurowany w Merchant Center.
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 100
}
}
Interfejs API zwraca tę odpowiedź o błędzie:
{
"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"
}
}
]
}
}
Przyczyna: żądany jest poziom TIER2, ale program lojalnościowy połączony z kontem nie ma zdefiniowanego drugiego poziomu.
Jeśli żądanie zawiera nieprawidłowy element emailAddress, wystąpi błąd:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@google"
},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
Interfejs API zwraca tę odpowiedź o błędzie:
{
"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"
}
}
]
}
}
Przyczyna: format adresu e-mail jest nieprawidłowy.
Jeśli obiekt userIdentifier jest pusty, wystąpi błąd:
{
"loyaltyCustomer": {
"userIdentifier": {},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
Interfejs API zwraca tę odpowiedź o błędzie:
{
"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"
}
}
]
}
}
Przyczyna: obiekt userIdentifier jest obecny, ale nie zawiera żadnych rzeczywistych pól identyfikatora.
Uwaga dotycząca weryfikacji identyfikatora:
- Interfejs API przeprowadza podstawowe sprawdzanie formatu identyfikatorów (np. struktury adresu e-mail, obecności znaku
postalCodew adresach). - Niektóre identyfikatory, które przejdą wstępne weryfikacje, mogą jednak nie pasować do żadnego konta użytkownika Google lub mogą nie być w formacie rozpoznawanym przez system dopasowywania backendu. W takich przypadkach otrzymasz cichą odpowiedź o powodzeniu w postaci pustego komunikatu
{}z kodem stanu HTTP200 OK.
Sprawdzone metody
Aby zoptymalizować integrację, postępuj zgodnie z tymi sprawdzonymi metodami.
W przypadku integracji na dużą skalę: ponieważ interfejs API działa na zasadzie „na żądanie”, do osiągnięcia niezbędnej przepustowości w przypadku dużych zbiorów danych wymagana jest równoległość po stronie klienta. Zaprojektuj integrację tak, aby obsługiwała wiele równoczesnych żądań. Więcej informacji o tym, jak skonfigurować implementację, aby obsługiwać większe ilości danych dzięki przetwarzaniu równoległemu, znajdziesz w naszym przewodniku na temat wysyłania wielu żądań.
Zarządzanie limitami: domyślny limit to 1 000 000 żądań dziennie i 10 000 żądań na minutę. Aby dowiedzieć się, jak monitorować i sprawdzać limity, przeczytaj artykuł Limity przydziału i limity.
Priorytet adresu e-mail: jeśli to możliwe, umieść adres e-mail klienta
emailAddresswuserIdentifier. Adresy e-mail są zwykle najdokładniejszym i najbardziej wiarygodnym identyfikatorem do dopasowywania użytkowników do ich kont Google.Obsługa pustych odpowiedzi: zaprojektuj aplikację tak, aby prawidłowo interpretowała puste odpowiedzi
{}jako sukces. Oznacza to, że dane nie zostały zapisane z powodu ochrony prywatności (brak dopasowania lub brak zgody). Nie ponawiaj żądania.Sprawdź kolejność poziomów: zawsze sprawdzaj kolejność poziomów programu lojalnościowego w interfejsie Merchant Center, aby mieć pewność, że w wywołaniach interfejsu API używasz prawidłowych wartości wyliczeniowych od
TIER1doTIER7. To mapowanie jest oparte na zdefiniowanej kolejności w interfejsie, a nie na nazwach.Monitoruj błędy: rejestruj i monitoruj odpowiedzi interfejsu API, zwracając uwagę na wszelkie błędy, aby wykrywać problemy z integracją, zwłaszcza błędy
404, które mogą wskazywać na niezgodność w zakresie zrozumienia poziomu.4xx