يصف هذا القسم كيفية إرسال تحديثات لمستودعك في الوقت المناسب. الجهات الخارجية إلى Google. تتيح لك واجهة برمجة التطبيقات Incremental Update API إرسال التحديثات وحذفها. والكيانات في مستودع وضع الحماية أو مستودع الإنتاج في الوقت الفعلي تقريبًا.
هذه الوظيفة مخصصة في المقام الأول للتحديثات التي لا يمكنك توقعها، مثل عمليات الإغلاق الطارئة. كقاعدة عامة، إذا تم تغيير أي تغيير يتم إرساله من خلال يجب أن تكون واجهة برمجة تطبيقات التحديث الإضافي تغييرًا يجب نشره خلال ساعة. إذا لم يكن التغيير بحاجة إلى أن ينعكس على الفور، يمكنك استخدام العرض المجمَّع بدلاً من ذلك تتم معالجة التحديثات الإضافية في ما لا يزيد عن خمس دقائق.
المتطلبات الأساسية
يجب إدراج العناصر التالية قبل تنفيذ التحديثات التزايدية:
- يتمّ إنشاء حساب خدمة بدور المحرِّر لمشروع "الإجراءات". لمزيد من التفاصيل، يُرجى مراجعة إنشاء مشروع وإعداده:
- تتم استضافة ونقل خلاصات بيانات الإنتاج أو وضع الحماية. لمزيد من التفاصيل، يُرجى مراجعة العرض المجمَّع:
- (اختياري، ولكن يُنصح به) تثبيت مكتبة برامج 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 |
تحتاج إلى إيقاف خدمة لسبب غير متوقع. تعديلات إضافية: عدِّل الكيان الخلاصات الكاملة: احرص على تعديل العنصر من الخلاصات الكاملة.
أن يتم ضبط |
سلعة معيّنة غير متوفّرة | 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 فارغة.
|
هدف مستوى الخدمة المتعلّق بوقت المعالجة للمهام المجمّعة والتحديثات المتزايدة
إنّ كيان تم تعديله أو حذفه من خلال دفعة ستتم معالجته في غضون 2 الساعات في وضع أفضل جهد، بينما تتم معالجة كيان تم تحديثه من خلال تحديث تزايدي. خلال 5 دقائق. يتم حذف الكيان القديم بعد 7 أيام.
يمكنك إرسال ما يلي إلى Google:
- مهام متعددة دُفعة واحدة في اليوم لإبقاء مستودعك محدّثًا
- مهمة مجمّعة واحدة يوميًا وواجهات برمجة تطبيقات إضافية لإبقاء مستودعك محدّثًا