يوضّح هذا القسم كيفية إرسال تعديلات حسّاسة للوقت في مستودعك كياناتك إلى Google. تتيح لك واجهة برمجة التطبيقات Incremental Update API نشر التعديلات وحذف العناصر في مستودعك التجريبي أو المستودع العلني في الوقت الفعلي تقريبًا.
هذه الوظيفة مخصّصة في المقام الأول للتعديلات التي لا يمكنك توقّعها، مثل عمليات الإغلاق بسبب الطوارئ. كقاعدة عامة، يجب أن يكون أي تغيير يتم إرساله من خلال واجهة برمجة التطبيقات Incremental Update API تغييرًا يجب نشره في غضون ساعة واحدة كحد أقصى. إذا لم يكن عليك تطبيق التغيير على الفور، يمكنك استخدام نقل البيانات المجمّعة بدلاً من ذلك. تتم معالجة التعديلات المتزايدة في غضون خمس دقائق كحد أقصى.
المتطلبات الأساسية
يجب توفّر العناصر التالية قبل تنفيذ التحديثات المتزايدة:
- يتم إنشاء حساب خدمة يتضمّن دور المحرِّر في مشروع "مهام Google". لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة إنشاء مشروع وإعداده.
- يتم استضافة خلاصات بيانات الإصدار العلني أو ميزة "المساحة الرملية" ونقل بياناتها. لمزيد من التفاصيل، يُرجى الاطّلاع على نقل البيانات المجمّعة.
- (اختياري، ولكن يُنصح به) ثبِّت مكتبة Google Client library باللغة التي تختارها لتسهيل استخدام 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
على سبيل المثال، لحذف عنصر "قسم قائمة الطعام" الذي يحمل المعرّف "menuSection_122" من مشروعك "delivery-provider-id"، عليك إجراء طلب HTTP DELETE API إلى:
https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122?entity.vertical=FOODORDERING
بيئة وضع الحماية
لاستخدام واجهة برمجة التطبيقات Incremental Update API في مستودعك التجريبي، اتّبِع الإرشادات الواردة في نقاط النهاية أعلاه، ولكن
قدِّم الطلبات إلى /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/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، وسيشير نص الاستجابة إلى المشكلة التي حدثت.
على سبيل المثال، إذا ضبط المستخدم القيمة "عمودي" في المظروف على
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 Update API بلغات مختلفة. تستخدِم هذه النماذج مكتبات Google Auth، وتفترض أنّ الخلاصة تستخدِم مخطّط المستودع الإعلاني في الإصدار 1. للحصول على حلول بديلة، يُرجى الرجوع إلى مقالة استخدام OAuth 2.0 لتطبيقات الخادم إلى الخادم.
تعديل الكيانات
يستخدم هذا الرمز البرمجي مكتبة مصادقة 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)
تستخدِم هذه التعليمات البرمجية مكتبة مصادقة 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 '{}'
تستخدِم هذه الرموز البرمجية مكتبة مصادقة 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); }
إزالة الكيانات
يستخدم هذا الرمز البرمجي مكتبة مصادقة 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)
تستخدِم هذه التعليمات البرمجية مكتبة مصادقة 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 '{}'
تستخدِم هذه الرموز البرمجية مكتبة مصادقة 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 |
إذا كنت بحاجة إلى إيقاف خدمة لسبب غير متوقَّع التعديلات المتزايدة: عدِّل عنصر الخلاصات الكاملة: احرص على تعديل الكيان من الخلاصات الكاملة
لضبط |
سلعة معيّنة غير متوفّرة | MenuItemOffer |
التعديلات المتزايدة: أرسِل MenuItemOffer
العنصر المحفوظ في inventoryLevel الذي تم ضبطه على 0 لMenuItem
المحدّد، مع عدم تغيير جميع البيانات الأخرى. |
تغيير في سعر عنصر قائمة | MenuItemOffer |
التعديلات المتزايدة: أرسِل عنصر MenuItemOffer
المحفوظ في عنصر آخر مع ضبط price على السعر المعدَّل لMenuItem المحدَّد، مع عدم تغيير جميع البيانات الأخرى. |
إضافة كيان جديد من المستوى الأعلى لا تنطبق إلا على الكيانات من الأنواع |
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 فارغًا.
|
مستوى الخدمة في ما يتعلق بوقت معالجة المهام المجمّعة والتعديلات المتزايدة
سيتمّت معالجة الكيانات التي تمّ تعديلها أو حذفها من خلال مجموعة في غضون ساعتين باستخدام وضع "أحسن جهد"، في حين سيتمّت معالجة الكيانات التي تمّ تعديلها من خلال تعديل متزايد في غضون 5 دقائق. يتم حذف العنصر القديم بعد 7 أيام.
يمكنك إرسال ما يلي إلى Google:
- مهام مجمّعة متعددة في اليوم للحفاظ على حداثة المستودع
- مهمة مجمّعة واحدة في اليوم وواجهات برمجة تطبيقات متزايدة لإبقاء المستودع الإعلاني محدّثًا