این بخش توضیح میدهد که چگونه میتوانید بهروزرسانیهای حساس به زمان موجودیهای موجودی خود را به Google ارسال کنید. Incremental Update API به شما امکان میدهد بهروزرسانیها را فشار دهید و موجودیهای Sandbox یا Production موجودی خود را تقریباً در زمان واقعی حذف کنید.
این عملکرد در درجه اول برای بهروزرسانیهایی است که نمیتوانید پیشبینی کنید، مانند بسته شدن اضطراری. به عنوان یک قاعده، هر تغییری که از طریق Incremental Update API ارسال میشود، باید تغییری باشد که نباید بیش از یک ساعت دیگر فعال شود. اگر نیازی نیست تغییر شما فوراً منعکس شود، میتوانید به جای آن از بلع دستهای استفاده کنید. به روز رسانی های افزایشی در کمتر از پنج دقیقه پردازش می شوند.
پیش نیازها
قبل از اجرای بهروزرسانیهای افزایشی، موارد زیر لازم است:
- یک حساب سرویس با نقش ویرایشگر پروژه Actions شما ایجاد می شود. برای جزئیات بیشتر، به ایجاد و راه اندازی یک پروژه مراجعه کنید.
- فیدهای داده تولید یا جعبه ایمنی میزبانی و دریافت میشوند. برای جزئیات بیشتر، مصرف گروهی را ببینید.
- (اختیاری، اما توصیه می شود) برای تسهیل استفاده از OAuth 2.0 هنگام فراخوانی API ، کتابخانه Google Client را به زبان انتخابی خود نصب کنید. نمونه کدهای موجود در زیر از این کتابخانه ها استفاده می کنند. در غیر این صورت، باید مطابق با استفاده از OAuth 2.0 برای دسترسی به Google API ، مبادلات رمز را به صورت دستی انجام دهید.
نقاط پایانی
در درخواست های زیر، موارد زیر را جایگزین کنید:
- PROJECT_ID : شناسه پروژه Google Cloud مرتبط با پروژه ای که در ایجاد و راه اندازی یک پروژه ایجاد کرده اید.
- TYPE : نوع موجودیت (ویژگی
@type
) شی در فید داده شما که می خواهید به روز کنید. - ENTITY_ID (فقط حذف نقطه پایانی): شناسه نهادی که باید حذف شود. مطمئن شوید که URL شناسه نهاد شما را رمزگذاری کرده است.
- DELETE_TIME (فقط حذف نقطه پایانی): فیلد اختیاری برای نشان دادن زمان حذف موجودیت در سیستمهای شما (پیشفرض زمانی است که درخواست دریافت میشود). ارزش زمانی نباید در آینده باشد. هنگام ارسال یک موجودیت از طریق تماس افزایشی، نسخه سازی موجودیت همچنین از قسمت
delete_time
در مورد تماس حذف استفاده می کند. این مقدار را به صورتyyyy-mm-ddTHH:mm:ssZ
قالب بندی کنید
نقطه پایانی را به روز کنید
برای تغییر یک موجودیت، یک درخواست HTTP POST به نقطه پایانی زیر بفرستید و مجموعهای از بهروزرسانیها و موارد اضافه را اضافه کنید. میتوانید تا 1000 موجودیت را در یک تماس API بهروزرسانی کنید.
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" با شناسه "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: به روز رسانی چندین رستوران
برای بهروزرسانی دو نهاد رستوران در یک تماس API، درخواست 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" }
افزودن یک موجودیت
برای افزودن موجودی، از بهروزرسانیهای موجودی استفاده نکنید. در عوض، از فرآیند فید دسته ای همانطور که برای طرح موجودی v2 توضیح داده شده است استفاده کنید.
حذف یک موجودیت
برای حذف نهادهای سطح بالا، از یک نقطه پایانی کمی تغییر یافته استفاده میکنید و از HTTP DELETE به جای HTTP POST در درخواست استفاده میکنید.
حذف یک موجودیت سطح بالا
موقعیتی را در نظر بگیرید که میخواهید یک رستوران را در فید حذف کنید. همچنین باید خدمات و منوهای آن را حذف کنید.
نقطه پایانی نمونه برای موجودیت منو با شناسه «ارائهدهنده/رستوران/منو/شماره»:
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 حذف میشود، تلقی کنید.
کدهای پاسخ API
یک تماس موفق به این معنی نیست که فید معتبر یا صحیح است، فقط به این معنی است که تماس API برقرار شده است. تماس های موفق کد پاسخ 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 استفاده میکنند و فید را با استفاده از طرح موجودی v1 فرض میکنند. برای راه حل های جایگزین، به استفاده از 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)
پایتون
این کد از کتابخانه اعتبار گوگل برای پایتون استفاده می کند.
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 '{}'
جاوا
این کد از کتابخانه تایید گوگل برای جاوا استفاده می کند.
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)
پایتون
این کد از کتابخانه اعتبار گوگل برای پایتون استفاده می کند.
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 '{}'
جاوا
این کد از کتابخانه تایید گوگل برای جاوا استفاده می کند.
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)); }
موارد استفاده کنید
موارد استفاده زیر نمونههایی از بهروزرسانیهای افزایشی، بهروزرسانیهای فید کامل، و محتوای در سطح بالا در تماس API هستند:
سناریو | نهاد برای به روز رسانی | توضیحات و جلوه ها |
---|---|---|
غیرفعال کردن یک سرویس | 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 خالی باشد. |
SLO در زمان پردازش برای کارهای دسته ای و به روز رسانی های افزایشی
موجودی که از طریق یک دسته بهروزرسانی یا حذف میشود، ظرف 2 ساعت در حالت بهترین تلاش پردازش میشود، در حالی که موجودی که از طریق یک بهروزرسانی افزایشی بهروزرسانی میشود، ظرف 5 دقیقه پردازش میشود. یک موجود قدیمی در 7 روز حذف می شود.
میتوانید به Google ارسال کنید:
- چندین کار دسته ای در روز برای به روز نگه داشتن موجودی خود، یا
- یک کار دسته ای در روز و API های افزایشی برای به روز نگه داشتن موجودی شما.