الإصدار 1 من تحديثات المستودع المتزايدة

يوضّح هذا القسم كيفية إرسال تعديلات سريعة على خلاصاتك إلى Google. تتيح لك واجهة برمجة التطبيقات الخاصة بالتحديثات الإضافية تعديل الكيانات في خلاصاتك وحذفها في الوقت الفعلي تقريبًا.

هذه الوظيفة مخصَّصة بشكل أساسي للتحديثات التي لا يمكنك توقّعها، مثل حالات الإغلاق الطارئة. وكقاعدة عامة، أي تغيير يتم إرساله من خلال واجهة برمجة التطبيقات التزايدية يجب أن يكون تغييرًا يجب تفعيله خلال أسبوع واحد كحد أقصى. إذا لم يكن التغيير ضروريًا أن يظهر على الفور، يمكنك استخدام تحديث مجمّع بدلاً من ذلك. لا تتم معالجة التحديثات التزايدية في أكثر من خمس دقائق.

الإعداد

لتنفيذ التحديثات المتزايدة، يُرجى اتّباع الخطوات التالية:

  1. اتّبِع الخطوات الموضّحة في إنشاء مشروع وإعداده لإنشاء مشروع.
  2. اتّبِع الخطوات الموضّحة في إعداد حساب خدمة لإنشاء حساب خدمة. تجدر الإشارة إلى أنّه يجب أن تكون "مالك المشروع" لإضافة دور "محرِّر" لحساب الخدمة
  3. (اختياري، ولكن يوصى به) ثبِّت مكتبة عملاء Google باللغة التي تختارها لتسهيل استخدام OAuth 2.0 عند طلب واجهة برمجة التطبيقات. وتستخدم نماذج التعليمات البرمجية المضمّنة أدناه هذه المكتبات. بخلاف ذلك، عليك التعامل مع عمليات تبادل الرموز المميّزة يدويًا كما هو موضّح في استخدام OAuth 2.0 للوصول إلى Google APIs.

نقطة النهاية

لإعلام Google بأيّ تحديث، يمكنك إرسال طلب HTTP POST إلى واجهة برمجة التطبيقات Inremental Updates API مع تضمين بيانات أساسية من التحديثات والإضافات. يحدّد مخطط المستودع الذي تستخدمه نقطة النهاية التي يجب تقديم طلبك إليها:

الإصدار 2 من المستودع الإعلاني

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

الإصدار 1 من المستودع الإعلاني

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

لإزالة كيان، يمكنك إرسال طلب HTTP DELETE إلى نقطة النهاية التالية التي تتوافق مع مخطط المستودع الذي تستخدمه:

الإصدار 2 من المستودع الإعلاني

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

الإصدار 1 من المستودع الإعلاني

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

في الطلبات المذكورة أعلاه، استبدل ما يلي:

  • PROJECT_ID: رقم تعريف مشروع Google Cloud المرتبط بالمشروع الذي أنشأته في القسم إنشاء مشروع وإعداده
  • TYPE (الإصدار 2 من مخطط المستودع فقط): نوع الكيان (السمة @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

لإزالة هذا الكيان نفسه، يمكنك إجراء هذا الطلب من واجهة برمجة التطبيقات HTTP DELETE:

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

طلبات وضع الحماية

بالنسبة إلى طلبات وضع الحماية، اتّبِع الإرشادات الواردة في نقطة النهاية أعلاه، ولكن قدِّم طلبات إلى /v2/sandbox/apps/ بدلاً من /v2/apps/. على سبيل المثال، يتم تنظيم طلب حذف وضع الحماية لمخطط المستودع v2 على النحو التالي:

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

آخر الأخبار والإضافات

يجب أن تتضمن الخلاصات المجمّعة اليومية أيضًا أي تغييرات يتم إرسالها من خلال واجهة برمجة التطبيقات هذه. وإلا ستحلّ التعديلات المجمّعة محلّ التغييرات المتزايدة.

المحتوى

يجب أن يتضمّن كل طلب 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/مطعم/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/مطعم/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/مطعم/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"
  }
}

رموز استجابة واجهة برمجة التطبيقات

ولا يعني الاستدعاء الناجح أن الخلاصة صالحة أو صحيحة، بل يعني فقط أنّه تم إجراء طلب بيانات من واجهة برمجة التطبيقات. تتلقى الاستدعاءات الناجحة رمز استجابة HTTP 200، مع نص استجابة فارغ:

{}

بالنسبة إلى حالات الفشل، لن يكون رمز استجابة HTTP هو 200، ويشير نص الاستجابة إلى الخطأ الذي حدث.

على سبيل المثال، إذا ضبط المستخدم القيمة "vertical" في المغلف على 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\""
          }
        ]
      }
    ]
  }
}

عيّنة تعليمات برمجية

في ما يلي بعض النماذج حول كيفية استخدام واجهة برمجة التطبيقات الإضافية للتحديثات بلغات مختلفة. تستخدم هذه النماذج مكتبات المصادقة في Google وتفترض خلاصة باستخدام مخطط مستودع الإصدار الأول. للتعرّف على الحلول البديلة، يُرجى الاطّلاع على استخدام 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)

Python

يستخدم هذا الرمز مكتبة المصادقة من Google للغة Python.

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

يستخدم هذا الرمز مكتبة المصادقة من Google للغة Java.

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)

Python

يستخدم هذا الرمز مكتبة المصادقة من Google للغة Python.

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

يستخدم هذا الرمز مكتبة المصادقة من Google للغة Java.

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

حالات الاستخدام

إنّ حالات الاستخدام التالية هي أمثلة على التعديلات التزايدية والتعديلات الكاملة للخلاصة والمحتوى المتوفر على مستوى عالٍ في طلب البيانات من واجهة برمجة التطبيقات:

السيناريو كيان ذو مستوى أعلى الوصف والتأثيرات
إيقاف خدمة DisabledService

تحتاج إلى إيقاف خدمة لسبب غير متوقَّع.

التعديلات التدريجية: أرسِل السمة Service المعنيّة مع @type إلى DisabledService، مع الإبقاء على السمات الأخرى كما هي.

الخلاصات الكاملة: احرص على تعديل العنصر من الخلاصات الكاملة لضبط @type على DisabledService قبل عملية الجلب التالية من Google، وإلّا ستتم إعادة تفعيل الكيان.

سلعة معيّنة غير متوفّرة. 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 التي يتم تعديلها وفقًا لذلك.
تعديل أسعار التوصيل في Service Service الخلاصات التزايدية: أرسِل Service الكاملة مع تعديل offers.priceSpecification.price.
تعديل ساعات عمل خدمة التوصيل أو طلب الوجبات الجاهزة لتناولها خارج المطعم في Service Service الخلاصات التزايدية: أرسِل السمة Service تمامًا كما في الخلاصات، باستثناء السمة hoursAvailable التي يتم تعديلها وفقًا لذلك.
Service (تغيير الحدّ الأدنى لمبلغ الطلب) Service الخلاصات التزايدية: إرسال Service كاملة مع Service.offers.priceSpecification.eligibleTransactionVolume المعدَّلة
حذف MenuItem نهائيًا Menu الخلاصات التزايدية: أرسِل السمة Menu تمامًا كما في الخلاصات، ولكن مع إزالة علامة MenuItem هذه من قائمة hasMenuItems.

هدف مستوى الخدمة في وقت معالجة المهام المجمّعة والتحديثات التزايدية

خلال يوم أو يومَين، ستتم معالجة أي كيان تتم إضافته من خلال عملية تحديث مجمّع أو تحديث تزايدي. إنّ كيانًا يتم تعديله أو حذفه من خلال دُفعة خلال ساعتَين ستتم معالجته، في حين تتم معالجة الكيان الذي تم تعديله من خلال عملية تحديث تزايدي خلال 5 دقائق. يتم حذف كيان قديم خلال 7 أيام.

يمكنك إما إرسال ما يلي إلى Google:

  • إجراء مهام مجمَّعة متعددة في اليوم لإبقاء المستودع محدّثًا، أو
  • مهمة مجمَّعة واحدة في اليوم وواجهات برمجة التطبيقات المتزايدة للحفاظ على تحديث مستودعك الإعلاني