يوضّح هذا القسم كيفية إرسال تحديثات لخلاصاتك في وقت محدَّد إلى Google. تتيح لك واجهة برمجة التطبيقات Incremental Updates API تعديل الكيانات في حسابك على الخلاصات في الوقت الفعلي تقريبًا.
هذه الوظيفة مخصصة في المقام الأول للتحديثات التي لا يمكنك توقعها، مثل عمليات الإغلاق الطارئة. كقاعدة عامة، إذا تم تغيير أي تغيير يتم إرساله من خلال يجب أن تكون واجهة برمجة تطبيقات التحديثات التزايدية تغييرًا يجب نشره خلال أسبوع واحد. إذا لم يكن التغيير بحاجة إلى أن ينعكس على الفور، يمكنك استخدام تحديثًا مجمّعًا بدلاً من ذلك. تتم معالجة التحديثات الإضافية في ما لا يزيد عن خمسة تحديثات. دقيقة.
ضبط إعدادات الجهاز
لتطبيق التحديثات التزايدية، يُرجى اتّباع الخطوات التالية:
- اتّبِع الخطوات الموضّحة في مقالة إنشاء مشروع وإعداده من أجل: وإنشاء مشروع.
- اتّبِع الخطوات الموضّحة في مقالة إعداد حساب خدمة. لإنشاء حساب خدمة. لاحظ أنه يجب أن تكون "مالكًا" من المشروع لإضافة "محرر" دور حساب الخدمة
- (اختياري، ولكن يُنصح به) تثبيت مكتبة برامج Google باللغة التي تختارها لتسهيل استخدام OAuth 2.0 عند استدعاء واجهة برمجة التطبيقات. وتستخدم عيّنات التعليمات البرمجية أدناه هذه المكتبات. خلاف ذلك، سوف معالجة عمليات تبادل الرموز المميّزة يدويًا كما هو موضّح في استخدام OAuth 2.0 للوصول إلى Google APIs.
نقطة نهاية
لإعلام Google بالتحديث، قدِّم طلب HTTP POST إلى واجهة Updates API وتتضمّن حمولة من التحديثات والإضافات. يحدّد مخطّط المستودع الذي تستخدمه نقطة النهاية التي يجب إرسال طلبك إليها:
الإصدار 2 من المستودع
https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID:push
مستودع الإصدار الأول
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
مستودع الإصدار الأول
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" التي تستخدم مخطط مستودع الإصدار 2. تريد إجراء تغييرات على المطعم من خلال نوع الكيان الخاص بالمطعم وهو "قائمة طعام" ومعرف كيان لـ " menu Section_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/
. على سبيل المثال،
تتم تنظيم طلب الحذف في وضع الحماية لمخطط مستودع الإصدار 2 على النحو التالي:
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" } }
إضافة كيان
لإضافة كيانات، تجنَّب استخدام تعديلات المستودع. بدلاً من ذلك، استخدِم الخلاصات المجمّعة. كما هو موضَّح في مخطط المستودع المستنِد إلى الإصدار 2.
إزالة كيان
لإزالة الكيانات ذات المستوى الأعلى، يمكنك استخدام نقطة نهاية معدّلة قليلاً، واستخدام HTTP DELETE بدلاً من HTTP POST في الطلب.
لا تستخدم HTTP DELETE لإزالة عنصر فرعي ضمن كيان ذي مستوى أعلى، مثل عنصر قائمة داخل قائمة. بدلاً من ذلك، تعامَل مع إزالة العناصر الفرعية على أنها تحديث لكيان مستوى أعلى يتم فيه إزالة الكيان الفرعي من قائمة أو معلمة ذات صلة.
المثال 1: حذف كيان من المستوى الأعلى
ضع في اعتبارك موقف تريد فيه حذف مطعم في خلاصة تستخدم مخطط مستودع الإصدار 1. ويجب أيضًا حذف خدماته وقوائمه.
نموذج نقطة نهاية لعنصر قائمة باستخدام رقم التعريف "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: إزالة العناصر الفرعية
لإزالة كيان فرعي من داخل كيان ذي مستوى أعلى، يجب إرسال العنصر ذي المستوى الأعلى مع إزالة الكيان الفرعي من الحقل المقابل. ما يلي: أن الخلاصة تستخدم مخطط مستودع الإصدار 1.
على سبيل المثال، لإزالة منطقة نطاق الخدمة، عدِّل الخدمة لتتضمّن منطقة نطاق الخدمة.
تمت إزالته من قائمة 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، وتفترض خلاصة باستخدام مخطط مستودع الإصدار 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 = '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 |
تحتاج إلى إيقاف خدمة لسبب غير متوقع. تحديثات إضافية: أرسِل الكيان الخلاصات الكاملة: احرص على تعديل العنصر من الخلاصات الكاملة.
أن يتم ضبط |
سلعة معيّنة غير متوفّرة | Menu |
تحديثات إضافية: أرسِل Menu المغلف.
كيان مع ضبط offer.inventoryLevel على 0
MenuItem وجميع البيانات الأخرى بدون تغيير. |
تغيير سعر الصنف في القائمة | Menu |
تحديثات إضافية: أرسِل Menu المغلف.
كيان offer.price تم ضبط السعر المعدَّل له
MenuItem وجميع البيانات الأخرى بدون تغيير. |
إضافة كيان جديد ذي مستوى أعلى ينطبق فقط على الكيان من الأنواع |
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:
- مهام متعددة دُفعة واحدة في اليوم لإبقاء مستودعك محدّثًا
- مهمة مجمّعة واحدة يوميًا وواجهات برمجة تطبيقات إضافية لإبقاء مستودعك محدّثًا