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

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

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

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

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

  1. يتمّ إنشاء حساب خدمة بدور المحرِّر لمشروع "الإجراءات". لمزيد من التفاصيل، يُرجى مراجعة إنشاء مشروع وإعداده:
  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-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

على سبيل المثال، لحذف "قسم قائمة" كيان ذي رقم التعريف "playlistSection_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 للكيان ذي المستوى الأعلى بالكامل (القائمة)، تستخدم مخطط المستودع v1.

فكّر في خلاصة مجمّعة تشبه ما يلي:

{
  "@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/restaurant/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/restaurant/nr":

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

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

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

إزالة العناصر الفرعية

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

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

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

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

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

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

  • مهام متعددة دُفعة واحدة في اليوم لإبقاء مستودعك محدّثًا
  • مهمة مجمّعة واحدة يوميًا وواجهات برمجة تطبيقات إضافية لإبقاء مستودعك محدّثًا