Panduan ini menjelaskan cara menggunakan Layanan Customer Match Loyalitas di Merchant API. Layanan ini memungkinkan penjual dan penyedia program loyalitas pihak ketiga yang bertindak atas nama penjual untuk mengelola data loyalitas pelanggan, seperti ID pengguna dan informasi tingkat, untuk personalisasi organik di Google Penelusuran, tanpa memerlukan akun Google Ads yang aktif.
Ringkasan
Gunakan Layanan Customer Match Program Loyalitas untuk mengupload data loyalitas, yang kemudian
digunakan untuk menyediakan fitur personalisasi loyalitas organik di Google Penelusuran, seperti
menampilkan harga khusus anggota. Anda menggunakan metode kustom ManageLoyaltyCustomerMatch
untuk mengaitkan pelanggan dengan tingkat program loyalitas, sehingga Anda dapat menyisipkan, memperbarui, atau menghapus status loyalitas mereka berdasarkan ID pengguna.
Konsep utama
- Antarmuka terpadu: Endpoint unik untuk menambahkan, memperbarui, atau menghapus detail tingkat loyalitas pelanggan.
- Desain yang mengutamakan privasi: Untuk melindungi privasi pengguna dan mencegah penyelidikan akun yang tidak sah, API tidak mendukung operasi GET atau LIST, sehingga memastikan bahwa data dikelola tanpa pengambilan atau audit.
- Identifikasi yang fleksibel: Cocokkan pengguna menggunakan minimal satu ID yang valid, seperti alamat email, alamat fisik, atau nomor telepon.
- Pemrosesan berbasis izin: Layanan menyimpan dan menggunakan data pelanggan hanya jika pengguna akhir telah memberikan izin yang diperlukan kepada Google. Untuk melindungi dan mencegah penyelidikan keberadaan akun atau status izin, layanan akan menampilkan keberhasilan senyap jika tidak ada kecocokan atau izin tidak diberikan.
Prasyarat
Ikuti persyaratan berikut untuk menggunakan Layanan Customer Match Loyalitas:
- Penyiapan akun: Pastikan Anda memiliki akun Merchant Center yang aktif (atau akses yang diizinkan ke akun penjual jika Anda adalah penyedia program loyalitas pihak ketiga). Anda tidak perlu membuat akun Google Ads untuk menggunakan Layanan Customer Match Loyalitas.
- Konfigurasi program loyalitas: Aktifkan program loyalitas di akun Merchant Center Anda, dan pastikan Anda telah menentukan tingkatan loyalitas.
- Urutan tingkat: Perhatikan urutan tingkat loyalitas Anda ditetapkan di UI Merchant Center. API menggunakan urutan persis ini untuk pemetaan enum-nya.
Metode: ManageLoyaltyCustomerMatch
Metode ManageLoyaltyCustomerMatch berfungsi sebagai antarmuka pusat untuk
mengelola asosiasi loyalitas pelanggan. Berdasarkan input yang diberikan, layanan akan otomatis menentukan apakah akan menyisipkan, memperbarui, atau menghapus status tingkat loyalitas pelanggan. Operasi bersifat
idempotent: permintaan identik yang berulang
memiliki efek yang sama dengan satu permintaan.
Permintaan berikut menunjukkan cara mengelola asosiasi loyalitas pelanggan melalui API:
POST https://merchantapi.googleapis.com/{API_VERSION}/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage
Permintaan ini menentukan parameter jalur wajib berikut:
API_VERSION: Versi API seperti v1.ACCOUNT_ID: ID akun Merchant Center.
Sertakan objek loyaltyCustomer dalam isi permintaan.
{
"userIdentifier": {
"emailAddress": "string",
"address": {
"addressLines": ["string"],
"locality": "string",
"administrativeArea": "string",
"postalCode": "string",
"regionCode": "string"
},
"phoneNumber": "string"
},
"loyaltyTier": "LoyaltyTier",
"pointBalance": "integer"
}
Kolom loyaltyCustomer
- userIdentifier: Kumpulan ID yang digunakan untuk mencocokkan pelanggan. Setidaknya satu kolom dalam userIdentifier harus diberikan dan valid.
- loyaltyTier: Tingkat loyalitas yang dikaitkan dengan pelanggan. Dipetakan ke urutan tingkat di penyiapan Merchant Center.
Untuk mengetahui detailnya, lihat
Memahami pemetaan
loyaltyTier. Gunakan NON_MEMBER untuk menghapus pengaitan yang ada. - pointBalance: Saldo poin pelanggan saat ini.
Kolom userIdentifier
Berikan setidaknya salah satu kolom berikut:
- emailAddress: Alamat email pelanggan.
- address: Alamat fisik pelanggan. PostalCode wajib diisi.
- phoneNumber: Nomor telepon pelanggan. Format E.164 direkomendasikan.
Memahami pemetaan loyaltyTier
API tidak menggunakan nama kustom. Nilai enum loyaltyTier (TIER1
hingga TIER7) adalah label semantik. Mereka tidak menggunakan nama kustom (misalnya, "Penghargaan Emas") atau label kustom (misalnya, "tingkat_emas") yang Anda tetapkan di UI Merchant Center. Sebagai gantinya, tingkat ini dipetakan secara ketat ke urutan saat Anda menentukan tingkat di setelan program loyalitas di Merchant Center:
TIER1: Sesuai dengan tingkat pertama yang tercantum dalam konfigurasi program loyalitas Merchant Center Anda.TIER2: Sesuai dengan tingkat kedua yang tercantum dalam konfigurasi program loyalitas Merchant Center Anda.TIER3hinggaTIER7: Sesuai dengan tingkat ketiga hingga ketujuh yang tercantum dalam konfigurasi program loyalitas Merchant Center Anda.
Contoh:
Jika program loyalitas Merchant Center Anda memiliki tingkat yang ditentukan dalam urutan ini:
- Nama Tingkatan: "Silver Status", Label Tingkatan: "silver"
- Nama Tingkat: "Gold Member", Label Tingkat: "gold"
- Nama Tingkat: "Platinum Elite", Label Tingkat: "platinum"
Kemudian, di panggilan API accounts.loyaltyCustomers.manage:
- Untuk menetapkan pelanggan ke "Status Perak", Anda harus menggunakan
loyaltyTier: TIER1. - Untuk menetapkan pelanggan ke "Anggota Gold", Anda harus menggunakan
loyaltyTier: TIER2. - Untuk menetapkan pelanggan ke "Platinum Elite", Anda harus menggunakan
loyaltyTier: TIER3.
Nilai enum LoyaltyTier
TIER1TIER2TIER3TIER4TIER5TIER6TIER7NON_MEMBER(Digunakan untuk menandakan penghapusan asosiasi loyalitas pelanggan)
Memahami isi respons ManageLoyaltyCustomerMatch
Metode ManageLoyaltyCustomerMatch menampilkan objek
ManageLoyaltyCustomerMatchResponse:
{
"loyaltyCustomer": {
// loyaltyCustomer object from the request
}
}
Pertimbangan penting untuk respons
Upsert berhasil (data disimpan): Agar berhasil menyimpan atau memperbarui asosiasi tingkat loyalitas pelanggan, penuhi kondisi berikut:
- Anda mencocokkan pengguna Google dengan
userIdentifieryang diberikan - Anda menetapkan
loyaltyTierdalam permintaan ke nilai valid selainNON_MEMBER - pengguna yang dicocokkan telah memberikan izin untuk penggunaan data loyalitas
- Anda mencocokkan pengguna Google dengan
Respons berisi objek loyaltyCustomer dari permintaan Anda, yang menunjukkan
bahwa layanan berhasil memproses dan menyimpan data:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}
}
- Penghapusan berhasil: Agar berhasil menghapus semua asosiasi loyalitas yang ada untuk pelanggan dengan penjual ini, kondisi berikut harus dipenuhi:
- Anda mencocokkan pengguna Google dengan
userIdentifieryang diberikan - Anda menetapkan
loyaltyTierdalam permintaan keNON_MEMBER
- Anda mencocokkan pengguna Google dengan
Responsnya adalah objek JSON kosong:
{}
- Tidak ada kecocokan / tidak ada izin (berhasil tanpa pemberitahuan): Jika
userIdentifieryang diberikan tidak cocok dengan Akun Google, atau jika pengguna yang cocok belum memberikan izin untuk penggunaan data program loyalitas, API akan menampilkan status HTTP 200 OK dengan objek JSON kosong:{}. Hal ini terjadi untuk upaya upsert dan penghapusan.
Contoh
TIER1 sesuai dengan tingkat yang ditentukan pertama (misalnya, 'Basic'), dan TIER2 sesuai dengan tingkat kedua (misalnya, 'Premium').
Untuk menambahkan pelanggan ke TIER2 atau memperbarui statusnya menggunakan alamat email, kirim permintaan berikut:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage"
-d '{
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}'
Jika pengguna berhasil dicocokkan dan telah memberikan izin, API akan menampilkan respons berikut:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}
}
Jika tidak ada kecocokan atau pengguna belum memberikan izin, API akan menampilkan respons berikut:
{}
Untuk menghapus hubungan loyalitas pelanggan menggunakan nomor telepon, kirim permintaan berikut:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage" \
-d '{
"userIdentifier": {
"phoneNumber": "+18005550132"
},
"loyaltyTier": "NON_MEMBER"
}'
Terlepas dari apakah ada data, API akan menampilkan respons berhasil berikut:
{}
Untuk menambahkan atau memperbarui pelanggan menggunakan beberapa ID, kirim permintaan berikut:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage" \
-d '{
"userIdentifier": {
"emailAddress": "user@example.com",
"address": {
"postalCode": "94043",
"regionCode": "US"
}
},
"loyaltyTier": "TIER1"
}'
Responsnya mirip dengan contoh pertama, bergantung pada kecocokan dan izin.
Penanganan error
API menggunakan kode HTTP standar. String error umum meliputi:
| Kode HTTP | Error String | Deskripsi |
| 400 | INVALID_ARGUMENT | user_identifier atau loyalty_tier tidak ada, atau ID kosong. |
| 401 | TIDAK DIAUTENTIKASI | Kredensial tidak valid atau tidak ada. |
| 403 | PERMISSION_DENIED | Pengguna yang diautentikasi tidak memiliki akses ke akun Merchant Center yang ditentukan. |
| 404 | NOT_FOUND | Label tingkat loyalitas yang ditentukan tidak ada dalam konfigurasi Anda. |
| 412 | FAILED_PRECONDITION | Anda belum mengonfigurasi program loyalitas di akun Anda. |
| 429 | RESOURCE_EXHAUSTED | Batas kuota tercapai. |
Contoh error
Contoh untuk 404 NOT_FOUND:
Permintaan valid apa pun ke ID akun yang tidak memiliki program loyalitas yang dikonfigurasi.
API menampilkan respons error berikut:
{
"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"
}
}
]
}
}
Alasan: Akun penjual di jalur tidak memiliki program loyalitas aktif.
Contoh 400 INVALID_ARGUMENT:
Error terjadi jika permintaan berisi nilai yang tidak valid untuk kolom loyaltyTier:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER11",
"pointBalance": 100
}
}
API menampilkan respons error berikut:
{
"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\""
}
]
}
]
}
}
Alasan: TIER11 bukan nilai enum yang valid untuk loyaltyTier. Error yang sama dapat terjadi saat Anda mencoba menentukan TIER2 padahal hanya ada satu tingkat yang tersedia.
Error akan terjadi jika kolom loyaltyTier yang wajib diisi tidak ada dalam isi permintaan:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"pointBalance": 100
}
}
API menampilkan respons error berikut:
{
"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"
}
}
]
}
}
Alasan: Kolom loyaltyTier wajib diisi.
Error terjadi jika ID alamat tidak lengkap, seperti saat kolom postalCode tidak ada:
{
"loyaltyCustomer": {
"userIdentifier": {
"address": {
"locality": "Sunnyvale",
"administrativeArea": "CA",
"regionCode": "US"
}
},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
API menampilkan respons error berikut:
{
"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"
}
}
]
}
}
Alasan: Alamat diberikan, tetapi tidak memiliki kolom postalCode
yang wajib diisi, sehingga tidak dianggap sebagai ID yang valid.
Error akan terjadi jika Anda meminta indeks tingkat yang berada di luar batas untuk program yang dikonfigurasi:
Skenario: Penjual hanya mengonfigurasi satu tingkat di Merchant Center.
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 100
}
}
API menampilkan respons error berikut:
{
"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"
}
}
]
}
}
Alasan: TIER2 diminta, tetapi program loyalitas yang ditautkan ke akun tidak memiliki tingkat kedua yang ditentukan.
Error terjadi jika permintaan berisi emailAddress yang salah format:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@google"
},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
API menampilkan respons error berikut:
{
"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"
}
}
]
}
}
Alasan: Format alamat email tidak valid.
Error akan terjadi jika objek userIdentifier kosong:
{
"loyaltyCustomer": {
"userIdentifier": {},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
API menampilkan respons error berikut:
{
"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"
}
}
]
}
}
Alasan: Objek userIdentifier ada, tetapi tidak berisi kolom ID yang sebenarnya.
Catatan: Validasi ID.:
- API melakukan pemeriksaan format dasar pada ID (misalnya,
struktur email, keberadaan
postalCodedalam alamat). - Namun, beberapa ID yang lulus pemeriksaan awal mungkin tidak cocok dengan akun pengguna Google mana pun atau mungkin tidak dalam format yang dikenali oleh sistem pencocokan backend. Dalam kasus tersebut, Anda akan menerima respons kosong keberhasilan tanpa pemberitahuan
{}dengan status HTTP200 OK.
Praktik terbaik
Ikuti praktik terbaik berikut untuk mengoptimalkan integrasi Anda.
Untuk integrasi skala besar: Karena API beroperasi berdasarkan per permintaan, paralelisme sisi klien diperlukan untuk mencapai throughput yang diperlukan untuk set data besar. Anda harus mendesain integrasi untuk mengelola beberapa permintaan serentak. Untuk mendapatkan panduan tentang cara menyusun implementasi Anda untuk menangani volume yang lebih tinggi melalui paralelisme, lihat panduan kami tentang cara mengirim beberapa permintaan.
Pengelolaan kuota: Kuota default adalah 1.000.000 permintaan/hari dan 10.000 permintaan/menit. Untuk melihat cara memantau dan memeriksa kuota, lihat Kuota dan batas.
Prioritaskan alamat email: Jika memungkinkan, sertakan
emailAddresspelanggan dalamuserIdentifier. Alamat email umumnya merupakan ID yang paling akurat dan andal untuk mencocokkan pengguna dengan Akun Google mereka.Tangani respons kosong: Desain aplikasi Anda untuk menafsirkan respons
{}kosong dengan benar sebagai keberhasilan, dengan memahami bahwa hal itu berarti data tidak disimpan karena alasan privasi (tidak ada kecocokan atau tidak ada izin). Jangan coba lagi permintaan.Verifikasi urutan tingkat: Selalu konfirmasi urutan tingkat loyalitas Anda di UI Merchant Center untuk memastikan Anda menggunakan nilai enum
TIER1hinggaTIER7yang benar dalam panggilan API. Pemetaan ini didasarkan pada urutan yang ditentukan di UI, bukan namanya.Pantau error: Catat dan pantau respons API, dengan memperhatikan error
4xxuntuk mendeteksi masalah integrasi, terutama error404yang mungkin menunjukkan ketidakcocokan dalam pemahaman tingkat.