Phần này mô tả cách bạn có thể gửi nội dung cập nhật có tính thời gian của nguồn cấp dữ liệu cho Google. API Cập nhật gia tăng cho phép bạn cập nhật và xoá các thực thể trong nguồn cấp dữ liệu gần như theo thời gian thực.
Chức năng này chủ yếu dành cho các nội dung cập nhật mà bạn không thể lường trước được, chẳng hạn như việc đóng cửa khẩn cấp. Theo quy tắc, mọi thay đổi được gửi thông qua API Nội dung cập nhật gia tăng phải là thay đổi có hiệu lực trong vòng không quá một tuần. Nếu không cần phản ánh thay đổi ngay lập tức, bạn có thể sử dụng tính năng cập nhật hàng loạt. Bản cập nhật tăng dần được xử lý trong vòng không quá 5 phút.
Thiết lập
Để triển khai các bản cập nhật gia tăng, hãy làm như sau:
- Làm theo các bước được nêu trong bài viết Tạo và thiết lập dự án để tạo dự án.
- Làm theo các bước trong bài viết Thiết lập tài khoản dịch vụ để tạo tài khoản dịch vụ. Xin lưu ý rằng bạn cần phải là "Chủ sở hữu" của dự án để thêm vai trò "Người chỉnh sửa" cho tài khoản dịch vụ
- (Không bắt buộc nhưng nên làm) Cài đặt Thư viện ứng dụng Google bằng ngôn ngữ bạn chọn để hỗ trợ việc sử dụng OAuth 2.0 khi gọi API. Các mã mẫu bên dưới sử dụng các thư viện này. Nếu không, bạn sẽ cần xử lý việc trao đổi mã thông báo theo cách thủ công như mô tả trong phần Sử dụng OAuth 2.0 để truy cập vào API của Google.
Điểm cuối
Để thông báo cho Google về nội dung cập nhật, hãy tạo một yêu cầu POST qua HTTP đến API Cập nhật gia tăng và thêm tải trọng cập nhật và bổ sung. Giản đồ khoảng không quảng cáo mà bạn sử dụng sẽ xác định điểm cuối để gửi yêu cầu:
Khoảng không quảng cáo v2
https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID:push
Khoảng không quảng cáo v1
https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/ENTITY_ID:push
Để xoá một thực thể, hãy tạo một yêu cầu HTTP DELETE đến điểm cuối sau đây tương ứng với giản đồ khoảng không quảng cáo mà bạn sử dụng:
Khoảng không quảng cáo v2
https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME
Khoảng không quảng cáo v1
https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME
Trong các yêu cầu trên, hãy thay thế những nội dung sau:
- PROJECT_ID: Mã dự án trên Google Cloud được liên kết với dự án bạn tạo trong phần Tạo và thiết lập dự án.
- TYPE (chỉ dành cho giản đồ khoảng không quảng cáo phiên bản 2): Loại thực thể (thuộc tính
@type
) của đối tượng trong nguồn cấp dữ liệu mà bạn muốn cập nhật. - ENTITY_ID: Mã nhận dạng của thực thể có trong tải trọng. Hãy nhớ mã hoá URL cho mã nhận dạng thực thể.
- DELETE_TIME (chỉ xoá điểm cuối): Trường không bắt buộc để biểu thị thời điểm thực thể bị xoá trên hệ thống của bạn (mặc định là khi nhận được yêu cầu). Giá trị thời gian không được nằm trong tương lai. Khi gửi một thực thể thông qua lệnh gọi gia tăng, tạo phiên bản thực thể cũng sử dụng trường
delete_time
trong trường hợp lệnh gọi xoá. Định dạng giá trị này làyyyy-mm-ddTHH:mm:ssZ
Ví dụ: bạn có một dự án có mã nhận dạng là "delivery-provider-id" sử dụng giản đồ khoảng không quảng cáo v2. Bạn muốn thay đổi nhà hàng có loại thực thể nhà hàng là "MenuSection" và mã thực thể là "menuSection_122". Điểm cuối để cập nhật dữ liệu của bạn sẽ là:
https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122:push
Để xoá thực thể này, bạn sẽ thực hiện lệnh gọi API HTTP DELETE này:
https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122?entity.vertical=FOODORDERING
Yêu cầu về hộp cát
Đối với các yêu cầu về hộp cát, hãy làm theo hướng dẫn trong phần Điểm cuối ở trên, nhưng hãy gửi yêu cầu đến /v2/sandbox/apps/
thay vì /v2/apps/
. Ví dụ: yêu cầu xoá hộp cát cho giản đồ khoảng không quảng cáo v2 có cấu trúc như sau:
https://actions.googleapis.com/v2/sandbox/apps/PROJECT_ID/entities/TYPE/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME
Nội dung cập nhật và bổ sung
Nguồn cấp dữ liệu theo lô hằng ngày của bạn cũng phải chứa mọi thay đổi được gửi thông qua API này. Nếu không, các bản cập nhật hàng loạt sẽ ghi đè các thay đổi gia tăng.
Dung lượng
Mỗi yêu cầu POST phải bao gồm các tham số yêu cầu cùng với tải trọng JSON chứa dữ liệu có cấu trúc của bất kỳ loại thực thể nào được liệt kê trong giản đồ khoảng không quảng cáo.
JSON sẽ xuất hiện giống như trong nguồn cấp dữ liệu theo lô, với những điểm khác biệt sau:
- Kích thước nội dung tải trọng không được vượt quá 5 MB. Tương tự như nguồn cấp dữ liệu hàng loạt, bạn nên xoá khoảng trắng để phù hợp với nhiều dữ liệu hơn.
- Phong bì như sau:
{ "entity": { "data":"ENTITY_DATA", "vertical":"FOODORDERING" }, "update_time":"UPDATE_TIMESTAMP" }
Trong tải trọng trên, hãy thay thế nội dung sau:
- ENTITY_DATA: Thực thể ở định dạng JSON được chuyển đổi tuần tự dưới dạng chuỗi. Bạn phải truyền thực thể JSON-LD dưới dạng chuỗi trong trường
data
. - UPDATE_TIMESTAMP (không bắt buộc): Dấu thời gian khi thực thể được cập nhật trong hệ thống của bạn. Giá trị thời gian không được là thời gian trong tương lai. Dấu thời gian mặc định là thời điểm Google nhận được yêu cầu. Khi gửi một thực thể thông qua yêu cầu tăng dần, tính năng phân cấp phiên bản thực thể cũng sử dụng trường
update_time
trong trường hợp yêu cầu thêm/cập nhật.
Cập nhật thực thể
Ví dụ 1: Cập nhật nhà hàng
Giả sử bạn cần cập nhật gấp số điện thoại của một nhà hàng. Nội dung cập nhật của bạn chứa JSON cho toàn bộ nhà hàng.
Hãy xem xét một nguồn cấp dữ liệu theo lô có dạng như sau:
{ "@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 }
Sau đó, nội dung cập nhật gia tăng của bạn bằng HTTP POST sẽ như sau:
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" } }
Ví dụ 2: Cập nhật giá của một món ăn trong thực đơn
Giả sử bạn cần thay đổi giá của một món trong thực đơn. Như trong Ví dụ 1, nội dung cập nhật của bạn phải chứa JSON cho toàn bộ thực thể cấp cao nhất (trình đơn) và nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo v1.
Hãy xem xét một nguồn cấp dữ liệu theo lô có dạng như sau:
{ "@type": "MenuItemOffer", "@id": "menuitemoffer6680262", "sku": "offer-cola", "menuItemId": "menuitem896532", "price": 3.00, "priceCurrency": "USD" }
Sau đó, nội dung cập nhật gia tăng của bạn qua POST sẽ như sau:
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" } }
Thêm thực thể
Để thêm thực thể, hãy tránh sử dụng tính năng cập nhật khoảng không quảng cáo. Thay vào đó, hãy sử dụng quy trình nguồn cấp dữ liệu theo lô như mô tả cho giản đồ khoảng không quảng cáo phiên bản 2.
Xoá thực thể
Để xoá các thực thể cấp cao nhất, bạn sử dụng một điểm cuối được sửa đổi một chút và sử dụng HTTP DELETE thay vì HTTP POST trong yêu cầu.
Đừng sử dụng HTTP DELETE để xoá một thực thể con trong một thực thể cấp cao nhất, chẳng hạn như một mục trong trình đơn. Thay vào đó, hãy coi việc xoá thực thể phụ là một nội dung cập nhật đối với thực thể cấp cao nhất, trong đó thực thể phụ sẽ bị xoá khỏi danh sách hoặc tham số có liên quan.
Ví dụ 1: Xoá một thực thể cấp cao nhất
Hãy xem xét trường hợp bạn muốn xoá một nhà hàng trong nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo v1. Bạn cũng phải xoá các dịch vụ và trình đơn của ứng dụng đó.
Điểm cuối mẫu cho một thực thể trình đơn có mã nhận dạng "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
Điểm cuối mẫu cho một thực thể nhà hàng có mã nhận dạng "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
Điểm cuối mẫu cho một thực thể dịch vụ có mã nhận dạng "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
}
Ví dụ 2: Xoá thực thể phụ
Để xoá một thực thể con khỏi thực thể cấp cao nhất, bạn sẽ gửi thực thể cấp cao nhất đã xoá thực thể con khỏi trường tương ứng. Ví dụ sau đây giả định nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo v1.
Ví dụ: để xoá một khu vực kinh doanh, hãy cập nhật dịch vụ bằng cách xoá khu vực kinh doanh đó khỏi danh sách 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"
}
}
Mã phản hồi API
Lệnh gọi thành công không có nghĩa là nguồn cấp dữ liệu hợp lệ hoặc chính xác, mà chỉ là lệnh gọi API đã được thực hiện. Các lệnh gọi thành công sẽ nhận được mã phản hồi HTTP 200 cùng với nội dung phản hồi trống:
{}
Đối với các lỗi, mã phản hồi HTTP sẽ không phải là 200 và nội dung phản hồi sẽ cho biết lỗi xảy ra.
Ví dụ: nếu người dùng đã đặt giá trị "vertical" (dọc) trong phong bì thành FAKE_VERTICAL
, bạn sẽ nhận được thông báo bên dưới:
{
"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\""
}
]
}
]
}
}
Mã mẫu
Dưới đây là một số mẫu về cách sử dụng API Nội dung cập nhật gia tăng bằng nhiều ngôn ngữ. Các mẫu này sử dụng Thư viện xác thực của Google và giả định một nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo v1. Để biết các giải pháp thay thế, hãy tham khảo bài viết Sử dụng OAuth 2.0 cho ứng dụng từ máy chủ đến máy chủ.
Cập nhật thực thể
Node.js
Mã này sử dụng thư viện xác thực của Google cho 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
Mã này sử dụng thư viện xác thực của Google cho 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
Mã này sử dụng thư viện xác thực của Google cho 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); }
Xoá thực thể
Node.js
Mã này sử dụng thư viện xác thực của Google cho 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
Mã này sử dụng thư viện xác thực của Google cho 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
Mã này sử dụng thư viện xác thực của Google cho 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)); }
Trường hợp sử dụng
Các trường hợp sử dụng sau đây là ví dụ về nội dung cập nhật gia tăng, nội dung cập nhật nguồn cấp dữ liệu đầy đủ và nội dung ở cấp cao trong lệnh gọi API:
Trường hợp | Thực thể cấp cao nhất | Nội dung mô tả và hiệu ứng |
---|---|---|
Tắt dịch vụ | DisabledService |
Bạn cần tắt một dịch vụ vì lý do ngoài dự kiến. Cập nhật gia tăng: Gửi thực thể Nguồn cấp dữ liệu đầy đủ: Hãy nhớ cập nhật thực thể từ nguồn cấp dữ liệu đầy đủ để đặt |
Mặt hàng cụ thể đã hết hàng | Menu |
Cập nhật gia tăng: Gửi thực thể Menu đóng gói với offer.inventoryLevel được đặt thành 0 cho MenuItem đã cho và tất cả dữ liệu khác không thay đổi. |
Thay đổi giá của món ăn trong thực đơn | Menu |
Cập nhật tăng dần: Gửi thực thể Menu đóng gói với offer.price được đặt thành giá đã cập nhật cho MenuItem đã cho và tất cả dữ liệu khác không thay đổi. |
Thêm thực thể cấp cao nhất mới Chỉ áp dụng cho thực thể thuộc loại |
Menu , Restaurant , Service |
Ví dụ: bạn cần thêm một thực đơn mới vào nhà hàng. Cập nhật gia tăng: Gửi thực thể trình đơn mới cùng với thực thể nhà hàng có trường |
Xoá vĩnh viễn thực thể cấp cao nhất Chỉ áp dụng cho thực thể thuộc loại |
Menu , Restaurant , Service |
Bản cập nhật gia tăng: Gửi một lệnh xoá rõ ràng. Nguồn cấp dữ liệu đầy đủ: Hãy nhớ xoá thực thể khỏi nguồn cấp dữ liệu đầy đủ trước lần tìm nạp tiếp theo của Google, nếu không, thực thể sẽ được thêm lại. |
Thêm khu vực phân phối mới trong một Service cụ thể |
Service |
Nguồn cấp dữ liệu gia tăng: Gửi thực thể Service có liên quan với tất cả các trường nguyên vẹn, như bạn thường làm trong nguồn cấp dữ liệu đầy đủ, với khu vực phân phối mới được chỉ định trong areaServed của Service . |
Cập nhật thời gian giao hàng dự kiến trong Service |
Service |
Nguồn cấp dữ liệu tăng dần: Gửi Service giống như trong nguồn cấp dữ liệu, ngoại trừ hoursAvailable.deliveryHours được cập nhật tương ứng. |
Cập nhật giá giao hàng trong Service |
Service |
Nguồn cấp dữ liệu gia tăng: Gửi Service đầy đủ với offers.priceSpecification.price đã cập nhật. |
Cập nhật giờ giao hàng hoặc giờ bán mang đi trong Service |
Service |
Nguồn cấp dữ liệu tăng dần: Gửi Service giống như trong nguồn cấp dữ liệu, ngoại trừ hoursAvailable được cập nhật tương ứng. |
Service (thay đổi số lượng đơn đặt hàng tối thiểu) |
Service |
Nguồn cấp dữ liệu gia tăng: Gửi Service đầy đủ với Service.offers.priceSpecification.eligibleTransactionVolume đã cập nhật |
Xoá MenuItem vĩnh viễn |
Menu |
Nguồn cấp dữ liệu tăng dần: Gửi Menu giống như trong nguồn cấp dữ liệu, nhưng xoá MenuItem này khỏi danh sách hasMenuItems . |
Mức độ cung cấp dịch vụ về thời gian xử lý cho các công việc theo lô và bản cập nhật gia tăng
Một thực thể được thêm thông qua tính năng cập nhật theo lô hoặc tăng dần sẽ được xử lý trong vòng 1-2 ngày. Một thực thể được cập nhật hoặc xoá thông qua một lô sẽ được xử lý trong 2 giờ, trong khi một thực thể được cập nhật thông qua một bản cập nhật gia tăng sẽ được xử lý trong 5 phút. Một thực thể cũ sẽ bị xoá sau 7 ngày.
Bạn có thể gửi cho Google:
- Nhiều công việc theo lô mỗi ngày để luôn cập nhật kho hàng, HOẶC
- Một công việc hàng loạt mỗi ngày và API gia tăng để luôn cập nhật kho hàng.