v1 artımlı envanter güncellemeleri

Bu bölümde, feed'lerinizin zamana duyarlı güncellemelerini Google'a nasıl gönderebileceğiniz açıklanmaktadır. Artımlı Güncellemeler API'si, feed'lerinizdeki öğeleri neredeyse gerçek zamanlı olarak güncellemenize ve silmenize olanak tanır.

Bu işlev, acil durum kapanışları gibi önceden tahmin edemeyeceğiniz güncellemeler için tasarlanmıştır. Kural olarak, Artımlı Güncellemeler API'si aracılığıyla gönderilen tüm değişiklikler en fazla bir hafta içinde yayınlanmalıdır. Değişikliklerinizin hemen yansıtılması gerekmiyorsa bunun yerine toplu güncelleme kullanabilirsiniz. Artımlı güncellemeler en fazla beş dakikada işlenir.

Kurulum

Artımlı güncellemeleri uygulamak için aşağıdakileri yapın:

  1. Proje oluşturmak için Proje oluşturma ve ayarlama başlıklı makalede açıklanan adımları uygulayın.
  2. Hizmet hesabı oluşturmak için Hizmet hesabı oluşturma başlıklı makalede açıklanan adımları uygulayın. Hizmet hesabı için "Düzenleyici" rolü eklemek üzere projenin "Sahibi" olmanız gerektiğini unutmayın.
  3. (İsteğe bağlı ancak önerilir) API'yi çağırırken OAuth 2.0'u kullanmayı kolaylaştırmak için Google istemci kitaplığını tercih ettiğiniz dilde yükleyin. Aşağıda verilen kod örnekleri bu kitaplıkları kullanır. Aksi takdirde, jeton değişimlerini Google API'lerine Erişmek için OAuth 2.0'ı Kullanma bölümünde açıklandığı gibi manuel olarak yapmanız gerekir.

Uç nokta

Google'ı bir güncelleme hakkında bilgilendirmek için IncrementalUpdates API'ye bir HTTP POST isteği gönderin ve güncelleme ve eklemeler içeren bir yük ekleyin. Kullandığınız envanter şeması, isteğinizin hangi uç noktaya gönderileceğini belirler:

v2 envanteri

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID:push

v1 envanteri

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/ENTITY_ID:push

Bir öğeyi kaldırmak için, kullandığınız envanter şemasına karşılık gelen aşağıdaki uç noktaya bir HTTP DELETE isteği gönderin:

v2 envanteri

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME

v1 envanteri

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME

Yukarıdaki isteklerde aşağıdakileri değiştirin:

  • PROJECT_ID: Proje oluşturma ve ayarlama bölümünde oluşturduğunuz projeyle ilişkili Google Cloud proje kimliği.
  • TYPE (yalnızca v2 envanter şeması): Veri feed'inizde güncellemek istediğiniz nesnenin varlık türü (@type mülkü).
  • ENTITY_ID: Yüke dahil edilen öğenin kimliği. Varlık kimliğinizi URL kodladığınızdan emin olun.
  • DELETE_TIME (yalnızca silme uç noktası): Öğenin sistemlerinizde silindiği zamanı belirtmek için kullanılan isteğe bağlı alan (varsayılan olarak istek alındığında). Zaman değeri gelecekte olmamalıdır. Öğe sürümlendirme, bir öğeyi artımlı çağrıyla gönderirken silme çağrısı durumunda delete_time alanını da kullanır. Bu değeri yyyy-mm-ddTHH:mm:ssZ olarak biçimlendir

Örneğin, "delivery-provider-id" kimliğine sahip ve v2 envanter şemasını kullanan bir projeniz var. "MenuSection" restoran öğesi türüne ve "menuSection_122" öğe kimliğine sahip restoranda değişiklik yapmak istiyorsunuz. Verilerinizdeki güncellemelerin uç noktası aşağıdaki gibidir:

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122:push

Aynı öğeyi kaldırmak için şu HTTP DELETE API çağrısını yaparsınız:

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122?entity.vertical=FOODORDERING

Korumalı alan istekleri

Korumalı alan istekleri için yukarıdaki Uç noktası bölümündeki talimatları uygulayın ancak /v2/apps/ yerine /v2/sandbox/apps/ adresine istek gönderin. Örneğin, v2 envanter şeması için korumalı alan silme isteği aşağıdaki gibi yapılandırılır:

https://actions.googleapis.com/v2/sandbox/apps/PROJECT_ID/entities/TYPE/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME

Güncellemeler ve eklemeler

Günlük toplu feed'leriniz, bu API aracılığıyla gönderilen tüm değişiklikleri de içermelidir. Aksi takdirde toplu güncellemeleriniz, artımlı değişikliklerinizin üzerine yazılır.

Yük

Her POST isteği, envanter şemasında listelenen herhangi bir varlık türünün yapılandırılmış verilerini içeren JSON yükü ile birlikte istek parametrelerini içermelidir.

JSON, aşağıdaki farklılıklarla birlikte toplu feed'de olduğu gibi görünür:

  • Yük gövdesi boyutu 5 MB'ı aşmamalıdır. Toplu feed'lere benzer şekilde, daha fazla veri sığdırmak için boşlukları kaldırmanız önerilir.
  • Zarf aşağıdaki gibidir:
{
  "entity": {
    "data":"ENTITY_DATA",
    "vertical":"FOODORDERING"
  },
  "update_time":"UPDATE_TIMESTAMP"
}

Yukarıdaki yükte aşağıdakileri değiştirin:

  • ENTITY_DATA: JSON biçimindeki öğe, dize olarak serileştirilir. JSON-LD öğesi, data alanında dize olarak iletilmelidir.
  • UPDATE_TIMESTAMP (isteğe bağlı): Öğenin sistemlerinizde güncellendiği zaman damgası. Zaman değeri gelecekte olmamalıdır. Varsayılan zaman damgası, Google'ın isteği aldığı zamandır. Bir öğe artımlı istek aracılığıyla gönderilirken varlık sürümlendirme, ekleme/güncelleme isteği durumunda update_time alanını da kullanır.

Bir öğeyi güncelleme

Örnek 1: Restoran güncelleme

Bir restoranın telefon numarasını acil olarak güncellemeniz gerektiğini varsayalım. Güncellemeniz, restoranın tamamının JSON'unu içerir.

Aşağıdaki gibi görünen bir toplu feed'i ele alalım:

{
  "@type": "Restaurant",
  "@id": "restaurant12345",
  "name": "Some Restaurant",
  "url": "https://www.provider.com/somerestaurant",
  "telephone": "+16501234567",
  "streetAddress": "345 Spear St",
  "addressLocality": "San Francisco",
  "addressRegion": "CA",
  "postalCode": "94105",
  "addressCountry": "US",
  "latitude": 37.472842,
  "longitude": -122.217144
}

Bu durumda, HTTP POST ile artımlı güncellemeniz aşağıdaki gibi olur:

POST v2/apps/provider-project/entities/Restaurant/restaurant12345:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "entity": {
    "data": {
      "@type": "Restaurant",
      "@id": "restaurant12345",
      "name": "Some Restaurant",
      "url": "https://www.provider.com/somerestaurant",
      "telephone": "+16501235555",
      "streetAddress": "345 Spear St",
      "addressLocality": "San Francisco",
      "addressRegion": "CA",
      "postalCode": "94105",
      "addressCountry": "US",
      "latitude": 37.472842,
      "longitude": -122.217144
    },
    "vertical": "FOODORDERING"
  }
}

2. örnek: Menü öğesi fiyatını güncelleme

Bir menü öğesinin fiyatını değiştirmeniz gerektiğini varsayalım. 1. örnekte olduğu gibi, güncellemeniz üst düzey öğenin (menünün) tamamının JSON'unu içermelidir ve feed, v1 envanter şemasını kullanır.

Aşağıdaki gibi görünen bir toplu feed'i ele alalım:

{
  "@type": "MenuItemOffer",
  "@id": "menuitemoffer6680262",
  "sku": "offer-cola",
  "menuItemId": "menuitem896532",
  "price": 3.00,
  "priceCurrency": "USD"
}

Bu durumda, POST üzerinden artımlı güncellemeniz aşağıdaki gibi olur:

POST v2/apps/provider-project/entities/MenuItemOffer/menuitemoffer6680262:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "entity": {
    "data": {
      "@type": "MenuItemOffer",
      "@id": "menuitemoffer6680262",
      "sku": "offer-cola",
      "menuItemId": "menuitem896532",
      "price": 1.00,
      "priceCurrency": "USD"
    },
    "vertical": "FOODORDERING"
  }
}

Varlık ekleme

Öğe eklemek için envanter güncellemelerini kullanmaktan kaçının. Bunun yerine, v2 envanter şeması için açıklandığı gibi toplu feed'ler sürecini kullanın.

Bir öğeyi kaldırma

Üst düzey öğeleri kaldırmak için biraz değiştirilmiş bir bitiş noktası kullanır ve istekte HTTP POST yerine HTTP DELETE'yi kullanırsınız.

Üst düzey bir öğedeki alt öğeyi (ör. bir menüdeki menü öğesi) kaldırmak için HTTP DELETE'yi kullanmayın. Bunun yerine, alt öğelerin kaldırılmasını, alt öğenin ilgili listeden veya parametreden kaldırıldığı üst düzey bir öğedeki güncelleme olarak değerlendirin.

1. örnek: Üst düzey bir öğeyi silme

v1 envanter şemasını kullanan bir feed'de bir restoranı silmek istediğinizi varsayalım. Ayrıca, bu hesabın hizmetlerini ve menülerini de silmeniz gerekir.

"https://www.provider.com/restaurant/menu/nr" kimlikli bir menü öğesi için örnek uç nokta:

DELETE v2/apps/delivery-provider-id/entities/https%3A%2F%2Fwww.provider.com%2Frestaurant%2Fmenu%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com

"https://www.provider.com/restaurant/nr" kimlikli bir restoran öğesi için örnek uç nokta:

DELETE v2/apps/delivery-provider-id/entities/https%3A%2F%2Fwww.provider.com%2Frestaurant%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com

"https://www.provider.com/restaurant/service/nr" kimlikli bir hizmet öğesi için örnek uç nokta:

DELETE v2/apps/delivery-provider-id/entities/https%3A%2F%2Fwww.provider.com%2Frestaurant%2Fservice%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com
}

2. örnek: Alt öğeleri kaldırma

Bir üst düzey öğedeki alt öğeyi kaldırmak için, alt öğe ilgili alandan kaldırılmış şekilde üst düzey öğeyi gönderirsiniz. Aşağıdaki örnekte, feed'in v1 envanter şemasını kullandığı varsayılmaktadır.

Örneğin, bir hizmet bölgesini kaldırmak için hizmeti, areaServed listesinden kaldırılmış hizmet bölgesiyle güncelleyin.

POST v2/apps/delivery-provider-id/entities/https%3A%2F%2Fwww.provider.com%2Frestaurant%2Fservice%2Fnr:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "entity": {
    // Note: "data" is not serialized as a string in our example for readability.
    "data": {
      "@type": "Service",
      "provider": {
        "@type": "Restaurant",
        "@id": "https://www.provider.com/restaurant/nr"
      },
      "areaServed": [
        {
          "@type": "GeoCircle",
          "geoMidpoint": {
            "@type": "GeoCoordinates",
            "latitude": "42.362757",
            "longitude": "-71.087109"
          },
          "geoRadius": "10000"
        }
        // area2 is removed.
      ]
      ...
    },
    "vertical": "FOODORDERING"
  }
}

API yanıt kodları

Başarılı bir çağrı, feed'in geçerli veya doğru olduğu anlamına gelmez. Yalnızca API çağrısının yapıldığı anlamına gelir. Başarılı çağrılar, boş bir yanıt gövdesiyle birlikte 200 HTTP yanıt kodu alır:

{}

Başarısız işlemlerde HTTP yanıt kodu 200 olmaz ve yanıt gövdesinde hatanın ne olduğu belirtilir.

Örneğin, kullanıcı zarftaki "dikey" değerini FAKE_VERTICAL olarak ayarlarsa aşağıdaki mesajı alırsınız:

{
  "error": {
    "code": 400,
    "message": "Invalid value at 'entity.vertical' (TYPE_ENUM), \"FAKE_VERTICAL\"",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "field": "entity.vertical",
            "description": "Invalid value at 'entity.vertical' (TYPE_ENUM), \"FAKE_VERTICAL\""
          }
        ]
      }
    ]
  }
}

Kod örneği

Aşağıda, Artımlı Güncellemeler API'sinin çeşitli dillerde nasıl kullanılacağına dair bazı örnekler verilmiştir. Bu örnekler Google Kimlik Doğrulama Kitaplıkları'nı kullanır ve v1 envanter şemasını kullanan bir feed varsayılır. Alternatif çözümler için Sunucudan Sunucuya Uygulamalar için OAuth 2.0'ı Kullanma bölümüne bakın.

Varlıkları güncelleme

Node.js

Bu kodda, Node.js için Google kimlik doğrulama kitaplığı kullanılmaktadır.

const {auth} = require('google-auth-library')
const request = require('request');
// The service account client secret file downloaded from the Google Cloud Console
const serviceAccountJson = require('./service-account.json')
// entity.json is a file that contains the entity data in json format
const entity = require('./entity.json')

const ENTITY_ID = 'restaurant/http://www.provider.com/somerestaurant'
const PROJECT_ID = 'your-project-id'

/**
 * Get the authorization token using a service account.
 */
async function getAuthToken() {
  let client = auth.fromJSON(serviceAccountJson)
  client.scopes = ['https://www.googleapis.com/auth/assistant']
  const tokens = await client.authorize()
  return tokens.access_token;
}

/**
 * Send an incremental update to update or add an entity
 */
async function updateEntity(entityId, entity) {
  const token = await getAuthToken()
  request.post({
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    url: `https://actions.googleapis.com/v2/apps/${PROJECT_ID}/entities/${encodeURIComponent(entityId)}:push`,
    body: {
      entity: {
        data: JSON.stringify(entity),
        vertical: 'FOODORDERING',
      }
    },
    json: true
  },
  (err, res, body) => {
    if (err) { return console.log(err); }
    console.log(`Response: ${JSON.stringify(res)}`)
  })
}

updateEntity(ENTITY_ID, entity)

Python

Bu kod, Python için Google kimlik doğrulama kitaplığını kullanır.

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
import json
import urllib

PROJECT_ID = 'your-project-id'
ENTITY_ID = 'restaurant/http://www.provider.com/somerestaurant'
ENDPOINT = 'https://actions.googleapis.com/v2/apps/%s/entities/%s:push' % (
    PROJECT_ID, urllib.quote(ENTITY_ID, ''))

# service-account.json is the service account client secret file downloaded from the
# Google Cloud Console
credentials = service_account.Credentials.from_service_account_file(
    'service-account.json')

scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/assistant'])

authed_session = AuthorizedSession(scoped_credentials)

# Retrieving the entity
update_file = open("entity.json")  #JSON file containing entity data in json format.
data = update_file.read()

# Populating the entity with wrapper
entity = {}
entity['data'] = data #entity JSON-LD serialized as string
entity['vertical'] = 'FOODORDERING'

request = {}
request['entity'] = entity

response = authed_session.post(ENDPOINT, json=request)

print(response.text) #if successful, will be '{}'

Java

Bu kod, Java için Google kimlik doğrulama kitaplığını kullanır.

private static final String PROJECT_ID = "your-project-id";
private static final String ENTITY_ID = "http://www.provider.com/somerestaurant";

/**
 * Get the authorization token using a service account.
 */
private static String getAuthToken() {
  InputStream serviceAccountFile =
      Example.class.getClassLoader().getResourceAsStream("service-account.json");
  ServiceAccountCredentials.Builder credentialsSimpleBuilder =
      ServiceAccountCredentials.fromStream(serviceAccountFile).toBuilder();
  credentialsSimpleBuilder.setScopes(ImmutableList.of("https://www.googleapis.com/auth/assistant"));
  AccessToken accessToken = credentialsSimpleBuilder.build().refreshAccessToken();
  return accessToken.getTokenValue();
}

/**
 * Send an incremental update to update or add an entity.
 * @param entityId The id of the entity to update.
 * @param entity the json of the entity to be updated.
 */
public void updateEntity(String entityId, JSONObject entity) {
  String authToken = getAuthToken();
  String endpoint = String.format(
      "https://actions.googleapis.com/v2/apps/%s/entities/%s:push",
      PROJECT_ID, URLEncoder.encode(entityId, "UTF-8"));
  JSONObject data = new JSONObject();
  data.put("data", entity.toString());
  data.put("vertical", "FOODORDERING");
  JSONObject jsonBody = new JSONObject();
  jsonBody.put("entity", data);
  // Execute POST request
  executePostRequest(endpoint, authToken, jsonBody);
}

Öğeleri kaldırma

Node.js

Bu kodda, Node.js için Google kimlik doğrulama kitaplığı kullanılmaktadır.

const {auth} = require('google-auth-library')
const request = require('request');
// The service account client secret file downloaded from the Google Cloud Console
const serviceAccountJson = require('./service-account.json')
// entity.json is a file that contains the entity data in json format
const entity = require('./entity.json')

const ENTITY_ID = 'restaurant/http://www.provider.com/somerestaurant'
const PROJECT_ID = 'your-project-id'

/**
 * Get the authorization token using a service account.
 */
async function getAuthToken() {
  let client = auth.fromJSON(serviceAccountJson)
  client.scopes = ['https://www.googleapis.com/auth/assistant']
  const tokens = await client.authorize()
  return tokens.access_token;
}

/**
 * Send an incremental update to delete an entity
 */
async function deleteEntity(entityId) {
  const token = await getAuthToken()
  request.delete({
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    },
    url: `https://actions.googleapis.com/v2/apps/${PROJECT_ID}/entities/${encodeURIComponent(entityId)}?entity.vertical=FOODORDERING`,
    body: {},
    json: true
  },
  (err, res, body) => {
    if (err) { return console.log(err); }
    console.log(`Response: ${JSON.stringify(res)}`)
  })
}

deleteEntity(ENTITY_ID)

Python

Bu kod, Python için Google kimlik doğrulama kitaplığını kullanır.

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession
import json
import urllib

# Service config
PROJECT_ID = 'your-project-id'
ENTITY_ID = 'restaurant/http://www.provider.com/somerestaurant'
DELETE_TIME = '2018-04-07T14:30:00-07:00'
ENDPOINT = 'https://actions.googleapis.com/v2/apps/%s/entities/%s?entity.vertical=FOODORDERING&delete_time=%s' % (
    PROJECT_ID, urllib.quote(ENTITY_ID, ''), urllib.quote(DELETE_TIME, ''))

# service-account.json is the service account client secret file downloaded from the
# Google Cloud Console
credentials = service_account.Credentials.from_service_account_file(
    'service-account.json')

scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/assistant'])

authed_session = AuthorizedSession(scoped_credentials)
response = authed_session.delete(ENDPOINT)

print(response.text) #if successful, will be '{}'

Java

Bu kod, Java için Google kimlik doğrulama kitaplığını kullanır.

private static final String PROJECT_ID = "your-project-id";
private static final String ENTITY_ID = "restaurant/http://www.provider.com/somerestaurant";

/**
 * Get the authorization token using a service account.
 */
private static String getAuthToken() {
  InputStream serviceAccountFile = Example.class.getClassLoader().getResourceAsStream("service-account.json");
  ServiceAccountCredentials.Builder credentialsSimpleBuilder =
      ServiceAccountCredentials.fromStream(serviceAccountFile).toBuilder();
  credentialsSimpleBuilder.setScopes(ImmutableList.of("https://www.googleapis.com/auth/assistant"));
  AccessToken accessToken = credentialsSimpleBuilder.build().refreshAccessToken();
  return accessToken.getTokenValue();
}

/**
 * Send an incremental update to delete an entity.
 * @param entityId The id of the entity to delete.
 */
public void deleteEntity(String entityId) {
  String authToken = getAuthToken();
  String endpoint = String.format(
      "https://actions.googleapis.com/v2/apps/%s/entities/%s?entity.vertical=FOODORDERING",
      PROJECT_ID, URLEncoder.encode(entityId, "UTF-8"));
  // Execute DELETE request
  System.out.println(executeDeleteRequest(endpoint, authToken));
}

Kullanım alanları

Aşağıdaki kullanım alanları, kademeli güncellemelere, tam feed güncellemelerine ve API çağrısında yüksek düzeyde içeriğe örnektir:

Senaryo Üst düzey öğe Açıklama ve etkiler
Bir hizmeti devre dışı bırakma DisabledService

Bir hizmeti beklenmedik bir nedenle devre dışı bırakmanız gerekir.

Artımlı güncellemeler: Söz konusu Service öğesini, @type değerinin DisabledService olarak değiştirildiği şekilde gönderin ancak diğer özellikleri aynı tutun.

Tam feed'ler: Google'ın bir sonraki getirme işleminden önce @type değerinin DisabledService olarak ayarlanması için öğeyi tam feed'lerden güncellediğinizden emin olun. Aksi takdirde öğe yeniden etkinleştirilir.

Belirli bir öğe stokta yok Menu Artımlı güncellemeler: Kapsayan Menu öğesini, belirli bir MenuItem için offer.inventoryLevel'ın 0 olarak ayarlandığı ve diğer tüm verilerin değişmediği şekilde gönderin.
Menü öğesi fiyat değişikliği Menu Artımlı güncellemeler: Kapsülleme Menu öğesini, offer.price parametresi belirli bir MenuItem için güncellenmiş fiyata ayarlanmış ve diğer tüm veriler değişmeden gönderin.

Yeni üst düzey öğe ekleme

Yalnızca Menu, Restaurant ve Service türünde öğeler için geçerlidir.

Menu, Restaurant, Service

Örneğin, bir restorana yeni bir menü eklemeniz gerekiyor.

Artımlı güncellemeler: Yeni menü öğesini, hasMenu alanı uygun şekilde güncellenmiş restoran öğesiyle birlikte gönderin.

Üst düzey öğeyi kalıcı olarak silme

Yalnızca Menu, Restaurant ve Service türünde öğeler için geçerlidir.

Menu, Restaurant, Service

Artımlı güncellemeler: Açık silme gönderin.

Tam feed'ler: Google'ın bir sonraki getirme işleminden önce öğeyi tam feed'lerden kaldırdığınızdan emin olun. Aksi takdirde öğe yeniden eklenir.

Belirli bir Service'ye yeni teslimat bölgesi ekleme Service Artımlı feed'ler: Söz konusu Service öğesini, tüm alanlarıyla birlikte, normalde tam feed'lerde yaptığınız gibi gönderin. Service öğesinin areaServed alanında yeni yayın alanı belirtilmelidir.
Service için tahmini teslimat varış saatini güncelleme Service Artımlı feed'ler: hoursAvailable.deliveryHours'ın buna göre güncellenmesi dışında, Service feed'lerdekiyle aynı şekilde gönderilir.
Service'te teslimat fiyatlarını güncelleme Service Artımlı feed'ler: offers.priceSpecification.price güncellenmiş şekilde tam Service gönderin.
Service'te teslimat veya paket servisi çalışma saatlerini güncelleme Service Artımlı feed'ler: hoursAvailable'ın buna göre güncellenmesi dışında Service, feed'lerdekiyle aynı şekilde gönderilir.
Service (minimum sipariş tutarını değiştirin) Service Artımlı feed'ler: Service.offers.priceSpecification.eligibleTransactionVolume ile güncellenmiş tam Service gönderin
MenuItem etkinliğini kalıcı olarak sil Menu Artımlı feed'ler: Menu öğesini feed'lerde olduğu gibi gönderin ancak bu MenuItem öğesini hasMenuItems listesinden kaldırın.

Toplu işler ve artımlı güncellemeler için işlem süresiyle ilgili hizmet düzeyi hedefi

Toplu veya artımlı güncelleme aracılığıyla eklenen bir öğe 1-2 gün içinde işlenir. Bir toplu işlem aracılığıyla güncellenen veya silinen bir öğe 2 saat içinde işlenirken, artımlı güncelleme aracılığıyla güncellenen bir öğe 5 dakikada işlenir. Eski öğeler 7 gün içinde silinir.

Google'a şu bilgileri gönderebilirsiniz:

  • Envanterinizi güncel tutmak için günde birden fazla toplu iş VEYA
  • Envanterinizi güncel tutmak için günde bir toplu iş ve artımlı API'ler.