v1 به روز رسانی موجودی افزایشی

این بخش نحوه ارسال به‌روزرسانی‌های حساس به زمان فیدهای خود را به Google توضیح می‌دهد. Incremental Updates API به شما این امکان را می دهد که موجودیت های موجود در فیدهای خود را تقریباً در زمان واقعی به روز رسانی و حذف کنید.

این عملکرد در درجه اول برای به‌روزرسانی‌هایی است که نمی‌توانید پیش‌بینی کنید، مانند بسته شدن اضطراری. به عنوان یک قاعده، هر تغییری که از طریق Incremental Updates API ارسال می‌شود، باید تغییری باشد که نباید بیش از یک هفته دیگر فعال شود. اگر تغییر شما نیازی به نمایش فوری ندارد، می توانید به جای آن از یک به روز رسانی دسته ای استفاده کنید. به روز رسانی های افزایشی در کمتر از پنج دقیقه پردازش می شوند.

برپایی

برای پیاده سازی به روز رسانی های افزایشی، موارد زیر را انجام دهید:

  1. مراحل ذکر شده در Create را دنبال کنید و یک پروژه را برای ایجاد یک پروژه تنظیم کنید .
  2. برای ایجاد یک حساب سرویس، مراحل ذکر شده در تنظیم یک حساب سرویس را دنبال کنید. توجه داشته باشید که برای افزودن نقش "ویرایشگر" برای حساب سرویس باید "مالک" پروژه باشید
  3. (اختیاری، اما توصیه می شود) برای تسهیل استفاده از OAuth 2.0 هنگام فراخوانی API، کتابخانه Google Client را به زبان انتخابی خود نصب کنید. نمونه کدهای موجود در زیر از این کتابخانه ها استفاده می کنند. در غیر این صورت، باید مطابق با استفاده از OAuth 2.0 برای دسترسی به Google API، مبادلات رمز را به صورت دستی انجام دهید.

نقطه پایانی

برای اطلاع دادن به Google در مورد به‌روزرسانی، یک درخواست HTTP POST به Incremental Updates API ارسال کنید و مجموعه‌ای از به‌روزرسانی‌ها و موارد اضافی را اضافه کنید. طرح موجودی که استفاده می کنید تعیین می کند که درخواست خود را به کدام نقطه پایانی ارسال کنید:

موجودی v2

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

موجودی v1

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

برای حذف یک موجودیت، یک درخواست HTTP DELETE به نقطه پایانی زیر که مطابق با طرح موجودی مورد استفاده شما است، ارسال کنید:

موجودی v2

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

موجودی v1

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

در درخواست های بالا، موارد زیر را جایگزین کنید:

  • PROJECT_ID : شناسه پروژه Google Cloud مرتبط با پروژه ای که در ایجاد و راه اندازی یک پروژه ایجاد کرده اید.
  • TYPE (فقط طرح موجودی v2): نوع موجودیت ( خاصیت @type ) شی در فید داده شما که می‌خواهید به‌روزرسانی کنید.
  • ENTITY_ID : شناسه نهاد موجود در محموله. مطمئن شوید که URL شناسه نهاد شما را رمزگذاری کرده است.
  • DELETE_TIME (فقط حذف نقطه پایانی): فیلد اختیاری برای نشان دادن زمان حذف موجودیت در سیستم‌های شما (پیش‌فرض زمانی است که درخواست دریافت می‌شود). ارزش زمانی نباید در آینده باشد. هنگام ارسال یک موجودیت از طریق تماس افزایشی، نسخه سازی موجودیت همچنین از قسمت delete_time در مورد تماس حذف استفاده می کند. این مقدار را به صورت yyyy-mm-ddTHH:mm:ssZ قالب بندی کنید

به عنوان مثال، شما پروژه ای با شناسه "delivery-provider-id" دارید که از طرح موجودی v2 استفاده می کند. می‌خواهید با یک نوع نهاد رستورانی "MenuSection" و شناسه نهاد "menuSection_122" تغییراتی در رستوران ایجاد کنید. نقطه پایانی برای به روز رسانی داده های شما به شرح زیر خواهد بود:

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

برای حذف همین موجودیت، باید این تماس API DELETE HTTP را برقرار کنید:

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

درخواست های سندباکس

برای درخواست‌های جعبه ایمنی، دستورالعمل‌های موجود در Endpoint بالا را دنبال کنید، اما به جای /v2/sandbox/apps/ از /v2/apps/ درخواست کنید. به عنوان مثال، یک درخواست حذف sandbox برای طرح موجودی v2 به صورت زیر است:

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

به روز رسانی ها و اضافات

فیدهای دسته ای روزانه شما نیز باید حاوی هرگونه تغییری باشد که از طریق این API ارسال می شود. در غیر این صورت، به‌روزرسانی‌های دسته‌ای شما تغییرات افزایشی شما را بازنویسی می‌کند.

ظرفیت ترابری

هر درخواست POST باید شامل پارامترهای درخواست همراه با بار JSON باشد که حاوی داده های ساختاریافته از هر نوع موجودی است که در طرح موجودی فهرست شده است.

JSON باید مانند آنچه در فید دسته ای ظاهر می شود، با تفاوت های زیر ظاهر شود:

  • حجم بدنه محموله نباید بیش از 5 مگابایت باشد. به طور مشابه به فیدهای دسته ای، ما به شما پیشنهاد می کنیم که فضاهای خالی را به منظور برازش داده های بیشتر حذف کنید.
  • پاکت به شرح زیر است:
{
  "entity": {
    "data":"ENTITY_DATA",
    "vertical":"FOODORDERING"
  },
  "update_time":"UPDATE_TIMESTAMP"
}

در محموله فوق، موارد زیر را جایگزین کنید:

  • ENTITY_DATA : موجودی با فرمت JSON که به صورت رشته ای سریال شده است. موجودیت JSON-LD باید به عنوان یک رشته در فیلد data ارسال شود.
  • UPDATE_TIMESTAMP (اختیاری): زمانی که موجودیت در سیستم‌های شما به‌روزرسانی شد، مهر زمانی را نشان می‌دهد. ارزش زمانی نباید در آینده باشد. مهر زمانی پیش‌فرض زمانی است که Google درخواست را دریافت می‌کند. هنگام ارسال یک موجودیت از طریق یک درخواست افزایشی، نسخه‌سازی موجودیت همچنین از فیلد update_time در مورد درخواست افزودن/به‌روزرسانی استفاده می‌کند.

به روز رسانی یک موجودیت

مثال 1: به روز رسانی یک رستوران

فرض کنید نیاز فوری دارید شماره تلفن یک رستوران را به روز کنید. به‌روزرسانی شما حاوی JSON برای کل رستوران است.

خوراک دسته‌ای را در نظر بگیرید که به شکل زیر است:

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

سپس آپدیت افزایشی شما توسط HTTP POST به صورت زیر خواهد بود:

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: به روز رسانی قیمت آیتم منو

فرض کنید باید قیمت یک آیتم منو را تغییر دهید. همانطور که در مثال 1، به‌روزرسانی شما باید شامل JSON برای کل موجودیت سطح بالا (منو) باشد، و فید از طرح موجودی v1 استفاده می‌کند.

خوراک دسته‌ای را در نظر بگیرید که به شکل زیر است:

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

سپس به روز رسانی افزایشی شما از طریق POST به صورت زیر خواهد بود:

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

افزودن یک موجودیت

برای افزودن موجودی، از به‌روزرسانی‌های موجودی استفاده نکنید. در عوض، از فرآیند فید دسته ای همانطور که برای طرح موجودی v2 توضیح داده شده است استفاده کنید.

حذف یک موجودیت

برای حذف نهادهای سطح بالا، از یک نقطه پایانی کمی تغییر یافته استفاده می‌کنید و از HTTP DELETE به جای HTTP POST در درخواست استفاده می‌کنید.

از HTTP DELETE برای حذف یک موجودیت فرعی در یک موجودیت سطح بالا، مانند یک آیتم منو در یک منو، استفاده نکنید. در عوض، حذف موجودیت‌های فرعی را به‌عنوان به‌روزرسانی یک موجودیت سطح بالا که در آن موجودیت فرعی از فهرست یا پارامتر مربوطه حذف می‌شود، تلقی کنید.

مثال 1: حذف یک موجودیت سطح بالا

موقعیتی را در نظر بگیرید که می‌خواهید رستورانی را در فید حذف کنید که از طرح موجودی v1 استفاده می‌کند. همچنین باید خدمات و منوهای آن را حذف کنید.

یک نمونه پایانی برای یک موجودیت منو با شناسه "https://www.provider.com/restaurant/menu/nr":

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":

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":

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

مثال 2: حذف نهادهای فرعی

برای حذف یک موجود فرعی از درون یک موجودیت سطح بالا، موجودیت سطح بالا را با موجودیت فرعی از قسمت مربوطه حذف می کنید. مثال زیر فرض می کند که فید از طرح موجودی v1 استفاده می کند.

به عنوان مثال، برای حذف یک ناحیه خدماتی، سرویس را با ناحیه سرویس حذف شده از لیست areaServed به روز کنید.

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

یک تماس موفق به این معنی نیست که فید معتبر یا صحیح است، فقط به این معنی است که تماس API برقرار شده است. تماس های موفق کد پاسخ HTTP 200 را به همراه بدنه پاسخ خالی دریافت می کنند:

{}

برای خرابی ها، کد پاسخ HTTP 200 نخواهد بود و بدنه پاسخ نشان می دهد که چه چیزی اشتباه بوده است.

به عنوان مثال، اگر کاربر مقدار "عمودی" را در پاکت روی FAKE_VERTICAL تنظیم کرده باشد، پیام زیر را دریافت خواهید کرد:

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

نمونه کد

در زیر چند نمونه از نحوه استفاده از Incremental Updates API در زبان های مختلف آورده شده است. این نمونه‌ها از کتابخانه‌های Google Auth استفاده می‌کنند و فید را با استفاده از طرح موجودی v1 فرض می‌کنند. برای راه حل های جایگزین، به استفاده از OAuth 2.0 برای برنامه های کاربردی سرور به سرور مراجعه کنید.

به روز رسانی نهادها

Node.js

این کد از کتابخانه تأیید Google برای Node.js استفاده می کند.

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)

پایتون

این کد از کتابخانه اعتبار گوگل برای پایتون استفاده می کند.

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 '{}'

جاوا

این کد از کتابخانه تایید گوگل برای جاوا استفاده می کند.

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);
}

حذف نهادها

Node.js

این کد از کتابخانه تأیید Google برای Node.js استفاده می کند.

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)

پایتون

این کد از کتابخانه اعتبار گوگل برای پایتون استفاده می کند.

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 '{}'

جاوا

این کد از کتابخانه تایید گوگل برای جاوا استفاده می کند.

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));
}

موارد استفاده کنید

موارد استفاده زیر نمونه‌هایی از به‌روزرسانی‌های افزایشی، به‌روزرسانی‌های فید کامل، و محتوای در سطح بالا در تماس API هستند:

سناریو موجودیت سطح بالا توضیحات و جلوه ها
غیرفعال کردن یک سرویس DisabledService

شما باید یک سرویس را به دلیل غیرقابل پیش بینی غیرفعال کنید.

به‌روزرسانی‌های افزایشی: موجودیت Service مورد نظر را با تغییر @type به DisabledService ارسال کنید، اما سایر ویژگی‌ها را به همان صورت حفظ کنید.

فیدهای کامل: حتماً موجودیت را از فیدهای کامل به‌روزرسانی کنید تا @type قبل از واکشی بعدی توسط Google روی DisabledService تنظیم شود، در غیر این صورت نهاد دوباره فعال می‌شود.

کالای خاص در انبار موجود نیست Menu به‌روزرسانی‌های افزایشی: موجودیت Menu کپسوله‌شده را با offer.inventoryLevel روی 0 برای MenuItem داده شده ارسال کنید، و همه داده‌های دیگر را بدون تغییر ارسال کنید.
تغییر قیمت آیتم های منو Menu به‌روزرسانی‌های افزایشی: موجودیت Menu کپسوله‌شده را با تنظیم offer.price به قیمت به‌روزرسانی‌شده برای MenuItem داده شده ارسال کنید، و همه داده‌های دیگر را بدون تغییر ارسال کنید.

موجودیت سطح بالای جدید را اضافه کنید

فقط برای موجودیت انواع Menu ، Restaurant و Service قابل اجرا است.

Menu ، Restaurant ، Service

به عنوان مثال، شما باید یک منوی جدید به یک رستوران اضافه کنید.

به روز رسانی افزایشی: ارسال موجودیت منوی جدید، همراه با نهاد رستوران با فیلد آن hasMenu بر این اساس به روز می شود.

نهاد سطح بالا را برای همیشه حذف کنید

فقط برای موجودیت انواع Menu ، Restaurant و Service قابل اجرا است.

Menu ، Restaurant ، Service

به‌روزرسانی‌های افزایشی: یک حذف صریح ارسال کنید.

فیدهای کامل: حتماً قبل از واکشی بعدی توسط Google، موجودیت را از فیدهای کامل حذف کنید، در غیر این صورت نهاد دوباره اضافه می‌شود.

یک منطقه تحویل جدید در یک Service خاص اضافه کنید Service فیدهای افزایشی: نهاد Service مورد نظر را با تمام فیلدهایش دست نخورده بفرستید، همانطور که معمولاً در فیدهای کامل انجام می‌دهید، با منطقه تحویل جدید مشخص شده در areaServed Service .
زمان تخمینی تحویل تحویل در Service را به‌روزرسانی کنید Service فیدهای افزایشی: Service را مانند فیدها ارسال کنید، به جز hoursAvailable.deliveryHours آنAvailable.deliveryHours بر این اساس به روز می شود.
به روز رسانی قیمت های تحویل در Service Service فیدهای افزایشی: Service کامل را با offers.priceSpecification.price به روز ارسال کنید.
ساعات تحویل یا تحویل در Service را به‌روزرسانی کنید Service فیدهای افزایشی: Service را مانند فیدها ارسال کنید، با این تفاوت که hoursAvailable آن بر این اساس به‌روزرسانی می‌شود.
Service (تغییر مقدار حداقل سفارش) Service فیدهای افزایشی: ارسال Service کامل با Service.offers.priceSpecification.eligibleTransactionVolume به روز شد
MenuItem را برای همیشه حذف کنید Menu فیدهای افزایشی: Menu مانند فیدها ارسال کنید، اما با حذف این MenuItem از لیست hasMenuItems .

SLO در زمان پردازش برای کارهای دسته ای و به روز رسانی های افزایشی

موجودی که از طریق به‌روزرسانی دسته‌ای یا افزایشی اضافه می‌شود، طی 1 تا 2 روز پردازش می‌شود. موجودی که از طریق یک دسته به‌روزرسانی یا حذف شده است، در 2 ساعت پردازش می‌شود، در حالی که موجودی که از طریق یک به‌روزرسانی افزایشی به‌روزرسانی می‌شود، در 5 دقیقه پردازش می‌شود. یک موجود قدیمی در 7 روز حذف می شود.

می‌توانید به Google ارسال کنید:

  • چندین کار دسته ای در روز برای به روز نگه داشتن موجودی خود، یا
  • یک کار دسته ای در روز و API های افزایشی برای به روز نگه داشتن موجودی شما.