Bağlılık Müşteri Eşleştirme Hizmetine Genel Bakış

Bu kılavuzda, Merchant API'de Loyalty Customer Match Service'in nasıl kullanılacağı açıklanmaktadır. Bu hizmet, satıcıların Google Arama'da organik kişiselleştirme için kullanıcı tanımlayıcıları ve katman bilgileri gibi müşteri bağlılığı verilerini etkin bir Google Ads hesabı gerektirmeden yönetmelerini sağlar.

Genel Bakış

Bağlılık verilerini yüklemek için Bağlılık Müşteri Eşleştirme Hizmeti'ni kullanın. Bu veriler daha sonra Google Arama'da üyelere özel fiyatlandırma gösterme gibi organik bağlılık kişiselleştirme özellikleri sağlamak için kullanılır. Müşterilerinizi bağlılık programı düzeyleriyle ilişkilendirmek için ManageLoyaltyCustomerMatch özel yöntemini kullanırsınız. Bu sayede, kullanıcı kimliklerine göre bağlılık durumlarını ekleyebilir, güncelleyebilir veya kaldırabilirsiniz.

Temel kavramlar

  • Birleştirilmiş arayüz: Müşteri bağlılığı katmanı ayrıntılarını eklemek, güncellemek veya kaldırmak için kullanılan benzersiz bir uç nokta.
  • Gizlilik öncelikli tasarım: API, kullanıcı gizliliğini korumak ve yetkisiz hesap incelemelerini önlemek için GET veya LIST işlemlerini desteklemez. Bu sayede verilerin, alınmadan veya denetlenmeden yönetilmesi sağlanır.
  • Esnek tanımlama: Kullanıcıları e-posta adresi, açık adres veya telefon numarası gibi en az bir geçerli tanımlayıcı kullanarak eşleştirin.
  • İzne dayalı işleme: Hizmet, müşteri verilerini yalnızca son kullanıcı Google'a gerekli izni verdiğinde saklar ve kullanır. Hizmet, hesap varlığı yoklamasını veya izin durumunu korumak ve önlemek için eşleşme yapılmazsa ya da izin verilmezse sessiz bir başarı döndürür.

Ön koşullar

Bağlılık programı Müşteri Eşleştirme Hizmeti'ni kullanmak için aşağıdaki koşulları karşılamanız gerekir:

  • Hesap kurulumu: Etkin bir Merchant Center hesabınız olduğundan emin olun. Loyalty Customer Match Service'i kullanmak için Google Ads hesabı oluşturmanız gerekmez.
  • Bağlılık programı yapılandırması: Merchant Center hesabınızda bağlılık programını etkinleştirin ve bağlılık katmanlarını tanımladığınızdan emin olun.
  • Katman sırası farkındalığı: Bağlılık katmanlarınızın Merchant Center kullanıcı arayüzünde tanımlandığı sıranın farkında olun. API, enum eşlemesi için bu sırayı kullanır.

Yöntem: ManageLoyaltyCustomerMatch

ManageLoyaltyCustomerMatch yöntemi, müşteri bağlılığı ilişkilendirmelerini yönetmek için merkezi arayüz olarak kullanılır. Sağlanan girişe göre hizmet, müşterinin bağlılık programı katmanı durumunu ekleme, güncelleme veya kaldırma konusunda otomatik olarak karar verir. İşlem idempotent'tir: Tekrarlanan aynı istekler, tek bir istekle aynı etkiye sahiptir.

Aşağıdaki istekte, API aracılığıyla müşteri bağlılığı ilişkilendirmelerinin nasıl yönetileceği gösterilmektedir:

POST https://merchantapi.googleapis.com/{api_version}/accounts/{account_id}/loyaltyCustomers:manage

Bu istekte aşağıdaki zorunlu yol parametreleri tanımlanır:

  • api_version: v1 gibi API sürümü.
  • account_id: Merchant Center hesabı kimliği.

İstek metnine bir loyaltyCustomer nesnesi ekleyin.

{
    "userIdentifier": {
      "emailAddress": "string",
      "address": {
        "addressLines": ["string"],
        "locality": "string",
        "administrativeArea": "string",
        "postalCode": "string",
        "regionCode": "string"
      },
      "phoneNumber": "string"
    },
    "loyaltyTier": "LoyaltyTier",
    "pointBalance": "integer"
  }

loyaltyCustomer alanları

  • userIdentifier: Müşteriyi eşleştirmek için kullanılan tanımlayıcılar grubu. userIdentifier içinde en az bir alan sağlanmalı ve geçerli olmalıdır.
  • loyaltyTier: Müşteriyle ilişkilendirilecek bağlılık kademesi. Merchant Center kurulumundaki katman sırasıyla eşleşir. Ayrıntılar için loyaltyTier eşlemeyi anlama başlıklı makaleyi inceleyin. Mevcut bir ilişkilendirmeyi kaldırmak için NON_MEMBER değerini kullanın.
  • pointBalance: Müşterinin mevcut puan bakiyesi.

userIdentifier alanları

Aşağıdaki alanlardan en az biri sağlanmalıdır:

  • emailAddress: Müşterinin e-posta adresi.
  • address: Müşterinin fiziksel adresi. PostalCode gereklidir.
  • phoneNumber: Müşterinin telefon numarası. E.164 biçimi önerilir.

loyaltyTier eşlemeyi anlama

API, özel adları kullanmaz. loyaltyTier enum değerleri (TIER1 ile TIER7 arası) semantik etiketlerdir. Merchant Center kullanıcı arayüzünüzde atadığınız özel adları (ör. "Altın Ödüller") veya özel etiketleri (ör. "gold_tier") kullanmazlar. Bunun yerine, Merchant Center'daki bağlılık programı ayarlarında katmanlarınızı tanımladığınız sırayla eşlenirler:

  • TIER1: Merchant Center bağlılık programı yapılandırmanızda listelenen ilk katmana karşılık gelir.
  • TIER2: Merchant Center bağlılık programı yapılandırmanızda listelenen ikinci katmana karşılık gelir.
  • TIER3 - TIER7: Merchant Center bağlılık programı yapılandırmanızda listelenen üçüncü ila yedinci katmanlara karşılık gelir.

Örnek:

Merchant Center bağlılık programınızda katmanlar şu sırayla tanımlanmışsa:

  1. Katman adı: "Gümüş Statü", Katman etiketi: �"silver"
  2. Katman adı: "Altın Üye", Katman etiketi: "gold"
  3. Katman adı: "Platinum Elite", Katman etiketi: "platinum"

Ardından, accounts.loyaltyCustomers.manage API çağrıları bölümünde:

  • Bir müşteriyi "Gümüş Durumu"'na atamak için loyaltyTier: TIER1 kullanmanız gerekir.
  • Bir müşteriyi "Altın Üye" olarak atamak için loyaltyTier: TIER2 kullanmanız gerekir.
  • Bir müşteriyi "Platinum Elite"'e atamak için loyaltyTier: TIER3 kullanmanız gerekir.

LoyaltyTier enum değerleri

  • TIER1
  • TIER2
  • TIER3
  • TIER4
  • TIER5
  • TIER6
  • TIER7
  • NON_MEMBER (Müşterinin bağlılık ilişkisinin kaldırıldığını belirtmek için kullanılır)

ManageLoyaltyCustomerMatch yanıt gövdesini anlama

ManageLoyaltyCustomerMatch yöntemi bir ManageLoyaltyCustomerMatchResponse nesnesi döndürür:

{
  "loyaltyCustomer": {
    // loyaltyCustomer object from the request
  }
}

Olası yanıtlarla ilgili önemli noktalar:

  • Başarılı upsert (veriler depolandı): Bir müşterinin bağlılık programı katmanı ilişkilendirmesini başarıyla depolamak veya güncellemek için aşağıdaki koşulları karşılayın:

    • bir Google kullanıcısını sağlanan userIdentifier ile eşleştirirseniz
    • İsteklerdeki loyaltyTier değerini NON_MEMBER dışında geçerli bir değere ayarladıysanız
    • Eşleşen kullanıcının, bağlılık programı verilerinin kullanımına izin vermiş olması

Yanıt, isteğinizdeki loyaltyCustomer nesnesini içerir. Bu, verilerin başarıyla işlendiğini ve depolandığını gösterir:

{
  "loyaltyCustomer": {
    "userIdentifier": {
     "emailAddress": "customer@example.com"
    },
    "loyaltyTier": "TIER2",
    "pointBalance": 1500
    }
}
  • Başarılı silme: Müşterinin bu satıcıyla mevcut tüm bağlılık ilişkilerini başarıyla kaldırmak için aşağıdaki koşulların karşılanması gerekir:
    • sağlanan ile userIdentifier bir Google kullanıcısını eşleştirirseniz
    • İstekteki loyaltyTier değerini NON_MEMBER olarak ayarladıysanız

Yanıt boş bir JSON nesnesi olur:

{}
  • Eşleşme yok / izin yok (sessiz başarı): Sağlanan userIdentifier, bir Google Hesabı ile eşleşmiyorsa veya eşleşen kullanıcı, bağlılık programı verilerinin kullanımına izin vermediyse API, boş bir JSON nesnesiyle HTTP 200 OK durumunu döndürür: {}. Bu durum, hem ekleme/güncelleme hem de kaldırma denemelerinde görülür.

Örnekler

TIER1, satıcının tanımlanan ilk katmanına ("Temel") ve TIER2 ise ikinci katmanına ("Premium") karşılık gelir.

Bir müşteriyi TIER2'ye eklemek veya durumunu e-posta adresini kullanarak güncellemek için aşağıdaki isteği gönderin:

POST
"https://merchantapi.googleapis.com/v1/accounts/{account_id}/loyaltyCustomers:manage"
  -d '{
      "userIdentifier": {
        "emailAddress": "customer@example.com"
      },
      "loyaltyTier": "TIER2",
      "pointBalance": 1500
  }'

Bir kullanıcı başarıyla eşleştirilip izin verdiğinde API aşağıdaki yanıtı döndürür:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@example.com"
    },
    "loyaltyTier": "TIER2",
    "pointBalance": 1500
  }
}

Eşleşme olmadığında veya kullanıcı izin vermediğinde API aşağıdaki yanıtı döndürür:

{}

Bir müşterinin bağlılık programı üyeliğini telefon numarası kullanarak kaldırmak için aşağıdaki isteği gönderin:

POST
"https://merchantapi.googleapis.com/v1/accounts/{account_id}/loyaltyCustomers:manage" \
  -d '{
      "userIdentifier": {
        "phoneNumber": "+18005550132"
      },
      "loyaltyTier": "NON_MEMBER"
  }'

Kayıt olup olmadığına bakılmaksızın API aşağıdaki başarılı yanıtı döndürür:

{}

Birden fazla tanımlayıcı kullanarak müşteri eklemek veya güncellemek için aşağıdaki isteği gönderin:

POST
"https://merchantapi.googleapis.com/v1/accounts/{account_id}/loyaltyCustomers:manage" \
  -d '{
      "userIdentifier": {
        "emailAddress": "user@example.com",
        "address": {
          "postalCode": "94043",
          "regionCode": "US"
        }
      },
      "loyaltyTier": "TIER1"
  }'

Eşleşmeye ve izne bağlı olarak yanıt, ilk örneğe benzer.

Hata işleme

API, standart HTTP kodlarını kullanır. Sık karşılaşılan hata dizeleri şunlardır:

HTTP kodu Hata dizesi Açıklama
400 INVALID_ARGUMENT user_identifier veya loyalty_tier eksik ya da tanımlayıcı boş.
401 UNAUTHENTICATED Geçersiz veya eksik kimlik bilgileri.
403 PERMISSION_DENIED Kimliği doğrulanmış kullanıcının, belirtilen Merchant Center hesabına erişimi yok.
404 NOT_FOUND Belirtilen bağlılık katmanı etiketi, yapılandırmanızda mevcut değil.
412 FAILED_PRECONDITION Hesabınızda bağlılık programı yapılandırmadınız.
429 RESOURCE_EXHAUSTED Kota sınırına ulaşıldı.

Hata örnekleri

404 NOT_FOUND: için örnek

Bağlılık programı yapılandırılmamış bir hesap kimliğine yapılan tüm geçerli istekler.

API, aşağıdaki hata yanıtını döndürür:

{
  "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"
        }
      }
    ]
  }
}

Nedeni: Yoldaki satıcı hesabında etkin bir bağlılık programı yok.

400 INVALID_ARGUMENT örnekleri:

İstek, loyaltyTier alanı için geçersiz bir değer içeriyorsa hata oluşur:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@example.com"
    },
    "loyaltyTier": "TIER11",
    "pointBalance": 100
  }
}

API, aşağıdaki hata yanıtını döndürür:

{
  "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\""
          }
        ]
      }
    ]
  }
}

Neden: TIER11, loyaltyTier için geçerli bir enum değeri değil. Aynı hata, yalnızca bir katman varken TIER2'yi belirtmeye çalıştığınızda da oluşabilir.

İstek gövdesinde zorunlu loyaltyTier alanı eksikse hata oluşur:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@example.com"
    },
    "pointBalance": 100
  }
}

API, aşağıdaki hata yanıtını döndürür:

{
  "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"
        }
      }
    ]
  }
}

Neden: loyaltyTier alanı zorunludur.

Bir adres tanımlayıcısı eksikse (ör. posta kodu alanı eksikse) hata oluşur:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "address": {
        "locality": "Sunnyvale",
        "administrativeArea": "CA",
        "regionCode": "US"
      }
    },
    "loyaltyTier": "TIER1",
    "pointBalance": 100
  }
}

API, aşağıdaki hata yanıtını döndürür:

{
  "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"
        }
      }
    ]
  }
}

Nedeni: Bir adres sağlanıyor ancak gerekli postalCode alanı eksik olduğu için geçerli bir tanımlayıcı olarak kabul edilmiyor.

Yapılandırılmış program için sınırların dışında bir katman dizini isterseniz hata oluşur:

Senaryo: Satıcının Merchant Center'da yalnızca bir katmanı yapılandırılmış.

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@example.com"
    },
    "loyaltyTier": "TIER2",
    "pointBalance": 100
  }
}

API, aşağıdaki hata yanıtını döndürür:

{
  "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"
        }
      }
    ]
  }
}

Neden: TIER2 isteniyor ancak hesaba bağlı bağlılık programında ikinci bir kademe tanımlanmamış.

İstek hatalı biçimlendirilmiş bir emailAddress içeriyorsa hata oluşur:

{
  "loyaltyCustomer": {
    "userIdentifier": {
      "emailAddress": "customer@google"
    },
    "loyaltyTier": "TIER1",
    "pointBalance": 100
  }
}

API, aşağıdaki hata yanıtını döndürür:

{
  "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"
        }
      }
    ]
  }
}

Nedeni: E-posta adresi biçimi geçersiz.

userIdentifier nesnesi boşsa hata oluşur:

{
  "loyaltyCustomer": {
    "userIdentifier": {},
    "loyaltyTier": "TIER1",
    "pointBalance": 100
  }
}

API, aşağıdaki hata yanıtını döndürür:

{
  "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"
        }
      }
    ]
  }
}

Nedeni: userIdentifier nesnesi mevcut ancak gerçek tanımlayıcı alanlar içermiyor.

Tanımlayıcı doğrulama hakkında not:

  • API, tanımlayıcılar üzerinde temel biçim kontrolleri gerçekleştirir (ör. e-posta yapısı, adreslerde postalCode karakterinin bulunması).
  • Ancak ilk kontrolleri geçen bazı tanımlayıcılar herhangi bir Google kullanıcı hesabıyla eşleşmeyebilir veya arka uç eşleştirme sistemi tarafından tanınan bir biçimde olmayabilir. Bu gibi durumlarda, HTTP durumu 200 OK olan sessiz başarılı boş yanıt {} alırsınız.

En iyi uygulamalar

Entegrasyonunuzu optimize etmek için aşağıdaki en iyi uygulamalardan yararlanın.

  • Büyük ölçekli entegrasyon için: API, istek başına çalıştığından büyük veri kümeleri için gerekli işleme hızını elde etmek üzere istemci tarafında paralellik gerekir. Entegrasyonunuzu, eşzamanlı olarak gönderilen birden fazla isteği yönetecek şekilde tasarlamanız gerekir. Paralelleştirme yoluyla daha yüksek hacimleri işlemek için uygulamanızı nasıl yapılandıracağınızla ilgili rehberlik için Birden fazla istek gönderme hakkındaki kılavuzumuza bakın.

  • Kota yönetimi: Varsayılan kota 1.000.000 istek/gün ve 10.000 istek/dakika'dır. Kotalarınızı nasıl izleyip kontrol edebileceğinizi öğrenmek için Kotalar ve sınırlar bölümüne bakın.

  • E-posta adresine öncelik verin: Mümkün olduğunda müşterinin emailAddress adresini userIdentifier içine ekleyin. E-posta adresleri, kullanıcıları Google Hesaplarıyla eşleştirmek için genellikle en doğru ve güvenilir tanımlayıcıdır.

  • Boş yanıtları işleme: Uygulamanızı, boş {} yanıtları başarı olarak doğru şekilde yorumlayacak şekilde tasarlayın. Bunun, gizlilik nedenleriyle (eşleşme yok veya izin yok) verilerin depolanmadığı anlamına geldiğini unutmayın. İsteği yeniden göndermeyin.

  • Katman sırasını doğrulayın: API çağrılarınızda doğru TIER1 ile TIER7 enum değerlerini kullandığınızdan emin olmak için Merchant Center kullanıcı arayüzünde her zaman bağlılık programı katmanlarınızın sırasını onaylayın. Bu eşleme, adlarına değil, kullanıcı arayüzünde tanımlanan sıraya göre yapılır.

  • Hataları izleme: API yanıtlarını kaydedin ve izleyin. Özellikle 404 hataları olmak üzere, entegrasyon sorunlarını yakalamak için 4xx hatalarına dikkat edin. Bu hatalar, katman anlayışında bir uyuşmazlık olduğunu gösterebilir.