يوضّح هذا الدليل كيفية استخدام خدمة "مطابقة العملاء" في برنامج الولاء ضمن Merchant API. تتيح هذه الخدمة للتجّار ومقدّمي خدمات برامج الولاء التابعة لجهات خارجية الذين يعملون بالنيابة عن التجّار إدارة بيانات ولاء العملاء، مثل معرّفات المستخدمين ومعلومات الفئة، من أجل التخصيص المجاني على "بحث Google"، بدون الحاجة إلى حساب نشط على "إعلانات Google".
نظرة عامة
استخدِم خدمة "مطابقة العملاء في برنامج الولاء" لتحميل بيانات الولاء، والتي يتم استخدامها بعد ذلك لتوفير ميزات تخصيص عضوية برنامج الولاء المجانية على "بحث Google"، مثل عرض الأسعار الخاصة بالأعضاء. يمكنك استخدام طريقة ManageLoyaltyCustomerMatch
custom لربط عملائك بفئات برنامج الولاء، ما يتيح لك إدراج أو تعديل أو إزالة حالة الولاء استنادًا إلى معرّفات المستخدمين.
المفاهيم الرئيسية
- واجهة موحّدة: نقطة نهاية فريدة لإضافة تفاصيل فئة ولاء العملاء أو تعديلها أو إزالتها.
- التصميم الذي يركّز على الخصوصية أولاً: لحماية خصوصية المستخدم ومنع فحص الحسابات غير المصرّح به، لا تتيح واجهة برمجة التطبيقات عمليات GET أو LIST، ما يضمن إدارة البيانات بدون استرجاع أو تدقيق.
- تحديد الهوية بمرونة: يمكنك مطابقة المستخدمين باستخدام معرّف صالح واحد على الأقل، مثل عنوان البريد الإلكتروني أو العنوان أو رقم الهاتف.
- المعالجة المستندة إلى الموافقة: تخزّن الخدمة بيانات العملاء وتستخدمها فقط عندما يمنح المستخدم النهائي موافقته اللازمة إلى Google. لحماية حالة الموافقة ومنع التحقّق من وجود الحساب، تعرض الخدمة نجاحًا غير مرئي إذا لم يتم العثور على تطابق أو لم يتم منح الموافقة.
المتطلبات الأساسية
يجب استيفاء المتطلبات التالية لاستخدام "خدمة مطابقة العملاء" في برنامج الولاء:
- إعداد الحساب: تأكَّد من أنّ لديك حسابًا نشطًا على Merchant Center (أو إذن وصول إلى حساب التاجر إذا كنت مقدّم خدمات ولاء تابعًا لجهة خارجية). لست بحاجة إلى إنشاء حساب على "إعلانات Google" لاستخدام خدمة "مطابقة العملاء" في برنامج الولاء.
- إعداد برنامج الولاء: فعِّل برنامج الولاء في حسابك على Merchant Center، وتأكَّد من أنّك حدّدت مستويات الولاء.
- الوعي بترتيب الفئات: يجب الانتباه إلى ترتيب فئات برنامج الولاء عند تحديدها في واجهة مستخدم Merchant Center. تستخدِم واجهة برمجة التطبيقات هذا التسلسل الدقيق لربط التعدادات.
الطريقة: ManageLoyaltyCustomerMatch
تعمل الطريقة ManageLoyaltyCustomerMatch كواجهة مركزية لإدارة عمليات الربط بين العملاء وبرامج الولاء. استنادًا إلى المعلومات المقدَّمة، تحدّد الخدمة تلقائيًا ما إذا كان يجب إدراج حالة مستوى الولاء للعميل أو تعديلها أو إزالتها. العملية
متكررة: الطلبات المتطابقة المتكررة لها التأثير نفسه الذي يحدثه طلب واحد.
يوضّح الطلب التالي كيفية إدارة عمليات الربط ببرامج ولاء العملاء من خلال واجهة برمجة التطبيقات:
POST https://merchantapi.googleapis.com/{API_VERSION}/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage
يحدّد هذا الطلب مَعلمات المسار المطلوبة التالية:
-
API_VERSION: إصدار واجهة برمجة التطبيقات، مثل v1. -
ACCOUNT_ID: معرّف حساب Merchant Center.
أدرِج عنصر loyaltyCustomer في نص الطلب.
{
"userIdentifier": {
"emailAddress": "string",
"address": {
"addressLines": ["string"],
"locality": "string",
"administrativeArea": "string",
"postalCode": "string",
"regionCode": "string"
},
"phoneNumber": "string"
},
"loyaltyTier": "LoyaltyTier",
"pointBalance": "integer"
}
حقول loyaltyCustomer
- userIdentifier: مجموعة المعرّفات المستخدَمة لمطابقة العميل. يجب توفير حقل واحد على الأقل ضمن userIdentifier وأن يكون صالحًا.
- استبدِل loyaltyTier بفئة الولاء التي تريد ربطها بالعميل. تتوافق مع ترتيب المستوى في عملية الإعداد في Merchant Center.
لمزيد من التفاصيل، يُرجى الاطّلاع على التعرّف على ربط
loyaltyTier. استخدِم NON_MEMBER لإزالة عملية ربط حالية. - pointBalance: رصيد النقاط الحالي للعميل
حقول userIdentifier
يُرجى ملء حقل واحد على الأقل من الحقول التالية:
- emailAddress: عنوان البريد الإلكتروني للعميل.
- العنوان: العنوان الجغرافي للعميل. يجب إدخال الرمز البريدي.
- استبدِل phoneNumber برقم هاتف العميل. ننصحك باستخدام تنسيق E.164.
فهم عملية ربط loyaltyTier
لا تستخدم واجهة برمجة التطبيقات الأسماء المخصّصة. قيم التعداد loyaltyTier (من TIER1 إلى TIER7) هي تصنيفات دلالية. ولا تستخدم الأسماء المخصّصة (مثل "مكافآت ذهبية") أو التصنيفات المخصّصة (مثل "المستوى الذهبي") التي حدّدتها في واجهة مستخدم Merchant Center. بدلاً من ذلك، يتم ربطها بشكل صارم بترتيب تحديد مستوياتك في إعدادات برنامج الولاء في Merchant Center:
-
TIER1: تتوافق مع المستوى الأول المُدرَج في إعدادات برنامج الولاء في Merchant Center. TIER2: تتوافق مع المستوى الثاني المُدرَج في إعدادات برنامج الولاء في Merchant Center.-
TIER3إلىTIER7: تتوافق مع المستويات من الثالث إلى السابع المدرَجة في إعدادات برنامج الولاء في حسابك على Merchant Center.
مثال:
إذا كان برنامج الولاء في Merchant Center يتضمّن مستويات محدّدة بالترتيب التالي:
- اسم المستوى: "Silver Status"، تصنيف المستوى: "silver"
- اسم المستوى: "عضو ذهبي"، تصنيف المستوى: "gold"
- اسم المستوى: "Platinum Elite"، تصنيف المستوى: "platinum"
بعد ذلك، في accounts.loyaltyCustomers.manage
طلبات البيانات من واجهة برمجة التطبيقات:
- لتحديد حالة العميل على أنّها "الحالة الفضية"، يجب استخدام
loyaltyTier: TIER1. - لتصنيف أحد العملاء على أنّه "عضو ذهبي"، يجب استخدام
loyaltyTier: TIER2. - لتصنيف أحد العملاء ضمن "الفئة البلاتينية المميزة"، يجب استخدام
loyaltyTier: TIER3.
قيم تعداد LoyaltyTier
TIER1TIER2TIER3TIER4TIER5TIER6TIER7NON_MEMBER(تُستخدَم للإشارة إلى إزالة ربط العميل ببرنامج الولاء)
فهم نص الاستجابة الخاص بـ ManageLoyaltyCustomerMatch
يعرض الإجراء ManageLoyaltyCustomerMatch عنصر ManageLoyaltyCustomerMatchResponse:
{
"loyaltyCustomer": {
// loyaltyCustomer object from the request
}
}
اعتبارات مهمة بشأن الردود
عملية إدراج/تعديل ناجحة (تخزين البيانات): لتخزين أو تعديل مستوى ولاء العميل بنجاح، يجب استيفاء الشروط التالية:
- تطابق مستخدم Google مع
userIdentifierالمقدَّم - ضبطت
loyaltyTierفي الطلب على قيمة صالحة غيرNON_MEMBER - أنّ المستخدم المطابِق قد وافق على استخدام بيانات برنامج الولاء
- تطابق مستخدم Google مع
تحتوي الاستجابة على عنصر loyaltyCustomer من طلبك، ما يشير إلى أنّ الخدمة عالجت البيانات وخزّنتها بنجاح:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}
}
- الحذف الناجح: لإزالة أي ربط حالي ببرنامج الولاء لدى التاجر لهذا العميل بنجاح، يجب استيفاء الشروط التالية:
- تطابق مستخدم Google مع
userIdentifierالمقدَّم - ضبطت قيمة
loyaltyTierفي الطلب علىNON_MEMBER
- تطابق مستخدم Google مع
الردّ هو عنصر JSON فارغ:
{}
- عدم العثور على تطابق / عدم الحصول على الموافقة (نجاح بدون إشعار): إذا لم تتطابق قيمة
userIdentifierالمقدَّمة مع حساب Google، أو إذا لم يوافق المستخدم المطابِق على استخدام بيانات برنامج الولاء، ستعرض واجهة برمجة التطبيقات حالة HTTP 200 OK مع عنصر JSON فارغ:{}. ويحدث ذلك عند محاولة إدراج أو تعديل أو إزالة أي بيانات.
أمثلة
يتوافق TIER1 مع الفئة الأولى المحدّدة (على سبيل المثال، 'Basic')، ويتوافق TIER2 مع الفئة الثانية (على سبيل المثال، 'Premium').
لإضافة عميل إلى TIER2 أو تعديل حالته باستخدام عنوان بريد إلكتروني، أرسِل الطلب التالي:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage"
-d '{
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}'
عندما يتم العثور على تطابق مع مستخدم بنجاح ويوافق على المشاركة، تعرض واجهة برمجة التطبيقات الاستجابة التالية:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 1500
}
}
عندما لا يكون هناك تطابق أو لم يوافق المستخدم، تعرض واجهة برمجة التطبيقات الردّ التالي:
{}
لإزالة ربط برنامج الولاء الخاص بأحد العملاء باستخدام رقم هاتف، أرسِل الطلب التالي:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage" \
-d '{
"userIdentifier": {
"phoneNumber": "+18005550132"
},
"loyaltyTier": "NON_MEMBER"
}'
بغض النظر عمّا إذا كان هناك سجلّ، تعرض واجهة برمجة التطبيقات استجابة النجاح التالية:
{}
لإضافة عميل أو تعديله باستخدام معرّفات متعدّدة، أرسِل الطلب التالي:
POST
"https://merchantapi.googleapis.com/v1/accounts/{ACCOUNT_ID}/loyaltyCustomers:manage" \
-d '{
"userIdentifier": {
"emailAddress": "user@example.com",
"address": {
"postalCode": "94043",
"regionCode": "US"
}
},
"loyaltyTier": "TIER1"
}'
تكون الاستجابة مشابهة للمثال الأول، وذلك حسب المطابقة والموافقة.
معالجة الأخطاء
تستخدِم واجهة برمجة التطبيقات رموز HTTP العادية. تشمل سلاسل الأخطاء الشائعة ما يلي:
| رمز HTTP | Error String | الوصف |
| 400 | INVALID_ARGUMENT | user_identifier أو loyalty_tier غير متوفّرَين، أو المعرّف فارغ. |
| 401 | UNAUTHENTICATED | بيانات الاعتماد غير صالحة أو غير متوفّرة. |
| 403 | PERMISSION_DENIED | ليس لدى المستخدم الذي تمّت مصادقته إذن الوصول إلى حساب Merchant Center المحدّد. |
| 404 | NOT_FOUND | تصنيف مستوى الولاء المحدّد غير متوفّر في إعداداتك. |
| 412 | FAILED_PRECONDITION | لم يتم إعداد برنامج ولاء في حسابك. |
| 429 | RESOURCE_EXHAUSTED | تم بلوغ الحدّ الأقصى للحصة. |
أمثلة الخطأ
مثال على 404 NOT_FOUND:
أي طلب صالح لرقم تعريف حساب لم يتم ضبط برنامج ولاء له
تعرض واجهة برمجة التطبيقات استجابة الخطأ التالية:
{
"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"
}
}
]
}
}
السبب: لا يتضمّن حساب التاجر في المسار برنامج ولاء نشطًا.
أمثلة على 400 INVALID_ARGUMENT:
يحدث خطأ إذا كان الطلب يتضمّن قيمة غير صالحة للحقل loyaltyTier:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER11",
"pointBalance": 100
}
}
تعرض واجهة برمجة التطبيقات استجابة الخطأ التالية:
{
"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\""
}
]
}
]
}
}
السبب: TIER11 ليست قيمة تعداد صالحة لـ loyaltyTier. يمكن أن يحدث الخطأ نفسه عند محاولة تحديد TIER2 عندما يكون هناك مستوى واحد فقط متاح.
يحدث خطأ إذا كان الحقل loyaltyTier المطلوب غير مضمَّن في نص الطلب:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"pointBalance": 100
}
}
تعرض واجهة برمجة التطبيقات استجابة الخطأ التالية:
{
"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"
}
}
]
}
}
السبب: الحقل loyaltyTier مطلوب.
يحدث خطأ إذا كان معرّف العنوان غير مكتمل، مثلاً عند عدم توفّر الحقل postalCode:
{
"loyaltyCustomer": {
"userIdentifier": {
"address": {
"locality": "Sunnyvale",
"administrativeArea": "CA",
"regionCode": "US"
}
},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
تعرض واجهة برمجة التطبيقات استجابة الخطأ التالية:
{
"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"
}
}
]
}
}
السبب: تم تقديم عنوان، ولكنّه لا يتضمّن الحقل postalCode المطلوب، وبالتالي لا يُعتبر معرّفًا صالحًا.
يحدث خطأ إذا طلبت فهرس فئة خارج نطاق البرنامج الذي تم إعداده:
السيناريو: لدى التاجر مستوى واحد فقط تم ضبطه في Merchant Center.
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@example.com"
},
"loyaltyTier": "TIER2",
"pointBalance": 100
}
}
تعرض واجهة برمجة التطبيقات استجابة الخطأ التالية:
{
"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"
}
}
]
}
}
السبب: تم طلب TIER2، ولكن برنامج الولاء المرتبط بالحساب لا يتضمّن فئة ثانية.
يحدث خطأ إذا كان الطلب يتضمّن emailAddress غير صالح:
{
"loyaltyCustomer": {
"userIdentifier": {
"emailAddress": "customer@google"
},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
تعرض واجهة برمجة التطبيقات استجابة الخطأ التالية:
{
"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"
}
}
]
}
}
السبب: تنسيق عنوان البريد الإلكتروني غير صالح.
يحدث خطأ إذا كان العنصر userIdentifier فارغًا:
{
"loyaltyCustomer": {
"userIdentifier": {},
"loyaltyTier": "TIER1",
"pointBalance": 100
}
}
تعرض واجهة برمجة التطبيقات استجابة الخطأ التالية:
{
"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"
}
}
]
}
}
السبب: العنصر userIdentifier متوفّر ولكنّه لا يحتوي على أي حقول معرّف فعلية.
ملاحظة: التحقّق من صحة المعرّف:
- تجري واجهة برمجة التطبيقات عمليات تحقّق أساسية من التنسيق على المعرّفات (على سبيل المثال، بنية البريد الإلكتروني، وتوفّر
postalCodeفي العناوين). - ومع ذلك، قد لا تتطابق بعض المعرّفات التي تجتاز عمليات التحقّق الأولية مع أي حساب مستخدم على Google، أو قد لا تكون بالتنسيق الذي يتعرّف عليه نظام المطابقة الخلفي. في مثل هذه الحالات، ستتلقّى الردّ الناجح الصامت الفارغ
{}مع حالة HTTP200 OK.
أفضل الممارسات
اتّبِع أفضل الممارسات التالية لتحسين عملية الدمج.
لعمليات الدمج على نطاق واسع: بما أنّ واجهة برمجة التطبيقات تعمل على أساس كل طلب، يجب توفير التوازي من جهة العميل لتحقيق سرعة معالجة البيانات المطلوبة لمجموعات البيانات الكبيرة. يجب تصميم عملية الدمج لإدارة طلبات متزامنة متعددة. للحصول على إرشادات حول كيفية تنظيم عملية التنفيذ للتعامل مع أحجام أكبر من خلال التوازي، يُرجى الرجوع إلى دليلنا حول كيفية إرسال طلبات متعددة.
إدارة الحصة: الحصة التلقائية هي 1,000,000 طلب في اليوم و10,000 طلب في الدقيقة. لمعرفة كيفية مراقبة حصصك والتحقّق منها، يُرجى الاطّلاع على الحصص والحدود.
تحديد أولوية عنوان البريد الإلكتروني: متى أمكن ذلك، يجب تضمين
emailAddressالعميل فيuserIdentifier. تُعدّ عناوين البريد الإلكتروني بشكل عام المعرّف الأكثر دقة وموثوقية لمطابقة المستخدمين مع حساباتهم على Google.التعامل مع الردود الفارغة: صمِّم تطبيقك بطريقة تتيح له تفسير الردود الفارغة
{}بشكل صحيح على أنّها ناجحة، مع العلم أنّ ذلك يعني أنّه لم يتم تخزين البيانات لأسباب تتعلّق بالخصوصية (عدم العثور على تطابق أو عدم الحصول على الموافقة). لا تعِد محاولة تنفيذ الطلب.التحقّق من ترتيب فئات الولاء: احرص دائمًا على تأكيد ترتيب فئات الولاء في واجهة مستخدم Merchant Center لضمان استخدام قيم التعداد
TIER1إلىTIER7الصحيحة في طلبات البيانات من واجهة برمجة التطبيقات. ويستند هذا الربط إلى الترتيب المحدّد في واجهة المستخدم، وليس إلى الأسماء.مراقبة الأخطاء: سجِّل استجابات واجهة برمجة التطبيقات وراقِبها، مع الانتباه إلى أي أخطاء
4xxلرصد مشاكل الدمج، خاصةً أخطاء404التي قد تشير إلى عدم تطابق في فهم الفئة.