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

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

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

المتطلبات الأساسية

يجب تنفيذ العناصر التالية قبل تنفيذ التعديلات المتزايدة:

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

نقاط النهاية

في الطلبات التالية، استبدل ما يلي:

  • PROJECT_ID: رقم تعريف مشروع Google Cloud مرتبط بالمشروع الذي أنشأته في إنشاء مشروع وإعداده.
  • TYPE: نوع الكيان (خلاصة @type) للعنصر في خلاصة البيانات الذي تريد تحديثه.
  • ENTITY_ID (حذف نقطة النهاية فقط): رقم تعريف الكيان الذي سيتم حذفه. احرص على ترميز عنوان URL لرقم تعريف الكيان.
  • DELETE_TIME (حذف نقطة النهاية فقط): حقل اختياري يشير إلى الوقت الذي تم فيه حذف الكيان على أنظمتك (الإعداد التلقائي هو عند استلام الطلب). يجب ألا تكون قيمة الوقت في المستقبل. عند إرسال كيان من خلال استدعاء متزايد، فإن تحديد إصدارات الكيان يستخدم أيضًا الحقل delete_time في حالة حذف المكالمة. تنسيق هذه القيمة كـ yyyy-mm-ddTHH:mm:ssZ

تعديل نقطة النهاية

لتعديل كيان، يمكنك إرسال طلب HTTP POST إلى نقطة النهاية التالية وتضمين حمولة من التحديثات والإضافات. يمكنك إجراء ما يصل إلى 1,000 كيان في طلب بيانات واحد لواجهة برمجة التطبيقات.

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities:batchPush

على سبيل المثال، إذا كنت تريد تعديل الكيانات في مشروع باستخدام رقم تعريف "delivery;delivery-provider-id" ستكون نقطة النهاية هي:

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities:batchpush

حذف نقطة النهاية

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

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

على سبيل المثال، لحذف كيان "MenuSection"رقم تعريف "menu;menuSection_122" من مشروعك &&;;delivery-provider-id"، عليك إجراء طلب HTTP DELETE API إلى:

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

بيئة وضع الحماية

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

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

جارٍ تعديل الكيانات

يجب أن يتضمّن كل طلب POST معلَمات الطلب مع الحمولة بتنسيق JSON التي تتضمّن البيانات المنظَّمة لأي نوع كيان مدرَج في مخطط المستودع.

تحديث الحمولة

من المفترض أن يظهر ملف JSON بالشكل نفسه الذي يظهر في الخلاصة المجمّعة، مع الاختلافات التالية:

  • يجب ألا يتجاوز نص الحمولة 5 ميغابايت. على غرار الخلاصات المجمّعة، نقترح عليك إزالة المسافات البيضاء من أجل ملاءمة المزيد من البيانات.
  • ويكون المغلّف على النحو التالي:
{
  "requests": [
    {
      "entity": {
        "data":"ENTITY_DATA",
        "name": "apps/project_id>/entities/type/entity_id"
      },
      "update_time":"UPDATE_TIMESTAMP"
    },
  ],
  "vertical": "FOODORDERING"
}

في الحمولة أعلاه، يُرجى استبدال ما يلي:

  • 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/sandbox/apps/provider-project/entities:batchPush
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "requests": [
    {
      "entity": {
        "name": "apps/provider-project/entities/restaurant/restaurant12345",
        "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: تحديث مطاعم متعددة

لتحديث كيانَي مطعمَين في استدعاء واحد لواجهة برمجة التطبيقات، سيكون طلب HTTP POST على النحو التالي:

POST v2/sandbox/apps/provider-project/entities:batchPush
Host: actions.googleapis.com
Content-Type: application/ld+json
{
  "requests": [
    {
      "entity": {
        "name": "apps/provider-project/entities/restaurant/restaurant12345",
        "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
        }
      }
    },
    {
      "entity": {
        "name": "apps/provider-project/entities/restaurant/restaurant123",
        "data": {
          "@type": "Restaurant",
          "@id": "restaurant123",
          "name": "Some Other Restaurant",
          "url": "https://www.provider.com/somerestaurant",
          "telephone": "+16501231235",
          "streetAddress": "385 Spear St",
          "addressLocality": "San Mateo",
          "addressRegion": "CA",
          "postalCode": "94115",
          "addressCountry": "US"
        }
      }
    }
  ]
  "vertical": "FOODORDERING"
}

المثال 3: تعديل سعر سلعة في القائمة

لنفترض أنك بحاجة إلى تغيير سعر أحد عناصر القائمة. كما في المثال 1، يجب أن يحتوي التعديل على JSON للكيان ذي المستوى الأعلى بالكامل (القائمة)، وتستخدم الخلاصة مخطط مستودع الإصدار 1.

ننصحك بإنشاء خلاصة مجمّعة تبدو على النحو التالي:

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

بعد ذلك، سيكون التحديث المتزايد عبر POST على النحو التالي:

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

إضافة كيان

لتجنّب إضافة كيانات، تجنَّب استخدام تعديلات المستودع. بدلاً من ذلك، يمكنك استخدام عملية الخلاصات المجمّعة كما هو موضّح في مخطّط مستودع الإصدار 2.

إزالة كيان

لإزالة الكيانات ذات المستوى الأعلى، يمكنك استخدام نقطة نهاية معدَّلة قليلاً، واستخدام HTTP DELETE بدلاً من HTTP POST في الطلب.

حذف كيان من المستوى الأعلى

لنفترض أنّك تريد حذف مطعم في خلاصة. عليك أيضًا حذف خدماته وقوائمه.

نموذج لنقطة نهاية كيان القائمة برقم التعريف "provider/food/menu/menu/nr":

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

نموذج لنقطة نهاية كيان مطعم برقم التعريف "https://www.provider.com/hotel/nr":

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

نموذج لنقطة نهاية كيان الخدمة برقم التعريف "https://www.provider.com/hotel/service/nr":

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

جارٍ إزالة الكيانات الفرعية

لا تستخدم HTTP DELETE لإزالة عنصر فرعي ضمن كيان المستوى الأعلى، مثل عنصر قائمة داخل القائمة. بدلاً من ذلك، يمكنك التعامل مع إزالة الكيانات الفرعية كتعديل على كيان مستوى أعلى تتم فيه إزالة الكيان الفرعي من القائمة ذات الصلة أو reعكسReference.

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

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

{}

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

على سبيل المثال، إذا ضبط المستخدم قيمة "vertical"quot;المغلف" على المغلّف على 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"، وتفترض وجود خلاصة باستخدام مخطط مستودع الإصدار 1. للتعرّف على الحلول البديلة، يمكنك الاطّلاع على استخدام 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 = 'your/entity/id'
const PROJECT_ID = 'type/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(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:batchPush`,
    body: {
      requests: [
        {
          entity: {
            data: JSON.stringify(entity)
            name: `apps/${PROJECT_ID}/entities/${ENTITY_ID}`
          }
        }
      ],
      vertical: 'FOODORDERING'
    },
    json: true
  },
  (err, res, body) => {
    if (err) { return console.log(err); }
    console.log(`Response: ${JSON.stringify(res)}`)
  })
}

updateEntity(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 = 'type/your/entity/id'

ENDPOINT = 'https://actions.googleapis.com/v2/apps/%s/entities:batchPush' % (
    PROJECT_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()

entity = {}
entity['data'] = data #entity JSON-LD serialized as string
entity['name'] = 'apps/%s/entities/%s' % (PROJECT_ID, urllib.quote(ENTITY_ID, '') )

# Populating the request
request = {}
request['entity'] = entity
requestArray = [request]

# Populating the payload
payload = {}
payload['requests'] = requestArray
payload['vertical'] = 'FOODORDERING'

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

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 = "type/your-entity-id";

/**
 * 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 data) {
  String authToken = getAuthToken();
  String endpoint = String.format("https://actions.googleapis.com/v2/apps/%s/entities/:batchPush", PROJECT_ID);

  JSONObject entity = new JSONObject();
  entity.put("data", data.toString());
  entity.put("name", String.format("apps/%s/entities/%s", PROJECT_ID, URLEncoder.encode(ENTITY_ID, "UTF-8")));

  JSONObject request = new JSONObject();
  request.put("entity", entity);

  JSONArray requestArray = new JSONArray();
  requestArray.put(request);

  JSONObject payload = new JSONObject();
  payload.put("requests", requestArray);
  payload.put("vertical", FOODORDERING);

  // Execute POST request
  executePostRequest(endpoint, authToken, payload);
}

إزالة الكيانات

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

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

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

السيناريو الكيان المطلوب تحديثه الوصف والتأثيرات
إيقاف خدمة Service

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

تعديلات متزايدة: يمكنك تعديل الكيان Service المعني من خلال ضبط السمة isDisabled على true، مع الحفاظ على السمات الأخرى كما هي.

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

سلعة معيّنة غير متوفّرة MenuItemOffer تعديلات متزايدة: أرسِل الكيان MenuItemOffer المضمَّن مع ضبط inventoryLevel على القيمة 0 في MenuItem، وجميع البيانات الأخرى بدون تغيير.
تغيير سعر العنصر في القائمة MenuItemOffer تعديلات متزايدة: أرسِل الكيان MenuItemOffer المضمَّن مع ضبط price على السعر المعدَّل في MenuItem، وجميع البيانات الأخرى بدون تغيير.

إضافة كيان جديد من المستوى الأعلى

ينطبق فقط على كيان الأنواع Menu وRestaurant وService.

Menu وRestaurant وService

على سبيل المثال، يجب إضافة قائمة جديدة إلى مطعم.

الخلاصات الكاملة: أضِف الكيان في خلاصات بياناتك وانتظر عرضًا مجمّعًا.

حذف الكيان من المستوى الأعلى نهائيًا

ينطبق فقط على كيان الأنواع Menu وRestaurant وService.

Menu وRestaurant وService

التعديلات المتزايدة: أرسِل حذفًا صريحًا.

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

إضافة منطقة توصيل جديدة في Service معيّنة ServiceArea الخلاصات المتزايدة: أرسِل الكيان ServiceArea المعنيّ مع جميع حقوله بدون تغيير، تمامًا كما تفعل عادةً في الخلاصات الكاملة، مع تحديد منطقة تسليم جديدة ضمن polygon أو geoRadius أو postalCode.
تعديل الوقت المقدّر للتسليم في Service ServiceHours الخلاصات المتزايدة: أرسِل السمة ServiceHours نفسها كما في الخلاصات، باستثناء أنه يتم تعديل leadTimeMin وفقًا لها.
تعديل أسعار التسليم في Service Fee الخلاصات المتزايدة: أرسِل التسليم الكامل Fee مع تعديل في price.
تعديل ساعات التسليم أو طلب الوجبات الجاهزة لتناولها خارج المطعم في Service ServiceHours الخلاصات المتزايدة: أرسِل السمة ServiceHours نفسها كما في الخلاصات، باستثناء أنه يتم تعديل السمتَين opens وcloses وفقًا لذلك.
Service (تغيير الحدّ الأدنى لمبلغ الطلب) Fee الخلاصات المتزايدة: إرسال Fee بالكامل مع تعديل minPrice
حذف MenuItem نهائيًا Menu الخلاصات المتزايدة: أرسِل MenuItem نفسها كما في الخلاصات، ولكن مع ترك parentMenuSectionId فارغة.

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

بالنسبة إلى الكيان الذي يتم تحديثه أو حذفه من خلال مجموعة، ستتم معالجته في غضون ساعتَين في أفضل وضع، بينما ستتم معالجة كيان يتم تعديله من خلال تحديث تدريجي في غضون 5 دقائق. يتم حذف كيان قديم بعد 7 أيام.

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

  • مهام متعددة في اليوم للحفاظ على مستودعك مُحدّثًا أو
  • مهمة واحدة كل يوم وواجهات برمجة التطبيقات المتزايدة للحفاظ على تحديث مستودعك.