Nội dung cập nhật về khoảng không quảng cáo gia tăng phiên bản 1

Phần này mô tả cách bạn có thể gửi nội dung cập nhật có giới hạn thời gian của nguồn cấp dữ liệu cho Google. Raise Updates API cho phép bạn cập nhật và xoá các thực thể trong nguồn cấp dữ liệu trong thời gian gần như thực.

Chức năng này chủ yếu dành cho các bản cập nhật mà bạn không thể đoán trước được, chẳng hạn như đóng cửa khẩn cấp. Theo quy định, bất kỳ thay đổi nào được gửi qua API Bản cập nhật gia tăng phải là một thay đổi và không được vượt quá một tuần. Nếu thay đổi của bạn chưa cần được phản ánh ngay lập tức, bạn có thể sử dụng cập nhật theo lô. Bản cập nhật gia tăng được xử lý không quá 5 phút.

Thiết lập

Để triển khai việc cập nhật dần, hãy làm như sau:

  1. Làm theo các bước trong bài viết Tạo và thiết lập dự án để tạo một dự án.
  2. 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 một tài khoản dịch vụ. Lưu ý rằng bạn cần phải là "Chủ sở hữu" của dự án để thêm "Người chỉnh sửa" vai trò của tài khoản dịch vụ
  3. (Không bắt buộc, nhưng nên dùng) Cài đặt Thư viện ứng dụng Google bằng ngôn ngữ bạn chọn để dễ dàng sử dụng OAuth 2.0 khi gọi hàm 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ý các hoạt động trao đổi mã thông báo theo cách thủ công như mô tả trong bài viết Sử dụng OAuth 2.0 để truy cập API Google.

Điểm cuối

Để thông báo cho Google về bản cập nhật, hãy thực hiện yêu cầu POST qua HTTP với thuộc tính Cập nhật API và bao gồ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 nào cần gửi yêu cầu của bạn:

khoảng không quảng cáo phiên bản 2

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID:push

khoảng không quảng cáo phiên bản 1

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/ENTITY_ID:push

Để xoá một thực thể, hãy gửi yêu cầu DELETE HTTP đến điểm cuối sau tương ứng với giản đồ khoảng không quảng cáo bạn sử dụng:

khoảng không quảng cáo phiên bản 2

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 phiên bản 1

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 được 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ể của bạn.
  • DELETE_TIME (chỉ xoá điểm cuối): Trường không bắt buộc để biểu thị thời điểm đối tượng bị xoá trên hệ thống của bạn (mặc định là khi yêu cầu được nhận được). Giá trị thời gian không được ở 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 nội dung này có giá trị là yyyy-mm-ddTHH:mm:ssZ

Ví dụ: bạn có một dự án có mã "delivery-provider-id" sử dụng giản đồ khoảng không quảng cáo v2. Bạn muốn thực hiện các thay đổi đối với nhà hàng có loại thực thể nhà hàng của "Trình đơn" và một mã nhận dạng thực thể của "menuSection_122". Điểm cuối của các bản cập nhật cho dữ liệu của bạn sẽ như sau:

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122:push

Để xoá chính thực thể này, bạn sẽ thực hiện lệnh gọi API DELETE HTTP sau:

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities/MenuSection/menuSection_122?entity.vertical=FOODORDERING

Yêu cầu hộp cát

Đối với các yêu cầu hộp cát, hãy làm theo hướng dẫn trong Điểm cuối ở trên, nhưng gửi yêu cầu đến /v2/sandbox/apps/ thay vì gửi đến /v2/apps/. Ví dụ: một yêu cầu xoá hộp cát đối với giản đồ khoảng không quảng cáo phiên bản 2 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

Thông tin cập nhật và bổ sung

Nguồn cấp dữ liệu lô hằng ngày của bạn cũng phải chứa mọi thay đổi được gửi qua API. Nếu không, việc cập nhật theo lô sẽ ghi đè những thay đổi gia tăng của bạn.

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 JSON tải trọng 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 khoảng không quảng cáo.

JSON sẽ giống như trong nguồn cấp dữ liệu lô, với những điểm khác biệt sau:

  • Nội dung tải trọng không được có kích thước vượt quá 5 MB. Tương tự như lô nguồn cấp dữ liệu, bạn nên bỏ khoảng trắng để có thể vừa 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 một chuỗi. Chiến lược phát hành đĩa đơn Thực thể JSON-LD phải được truyền 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 ở trong tương lai. Dấu thời gian mặc định là khi Google nhận được yêu cầu. Khi gửi một thực thể thông qua phương thức tăng dần yêu cầu, phiên bản thực thể cũng sử dụ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 khẩn cấp số điện thoại của một nhà hàng. Thông tin bản cập nhật chứa JSON cho toàn bộ nhà hàng.

Hãy cân nhắc sử dụng nguồn cấp dữ liệu 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 đó, quá trình cập nhật gia tăng bằng phương thức POST qua HTTP 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 trong thực đơn

Giả sử bạn cần thay đổi giá của một mục trong trình đơn. Như trong Ví dụ 1, bản cập nhật 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 hàng v1.

Hãy cân nhắc sử dụng nguồn cấp dữ liệu 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 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 thông tin cập nhật kho hàng. Thay vào đó, hãy sử dụng nguồn cấp dữ liệu hàng loạt theo 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, hãy sử dụng đ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.

Không được sử dụng HTTP DELETE để xóa thực thể con trong một thực thể cấp cao nhất, chẳng hạn như một mục trình đơn trong một trình đơn. Thay vào đó, hãy xử lý việc xoá các thực thể phụ như là một cập nhật lên thực thể cấp cao nhất trong đó thực thể con bị xoá khỏi danh sách hoặc tham số phù hợp.

Ví dụ 1: Xoá thực thể cấp cao nhất

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 địa điểm này.

Điểm cuối mẫu cho 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 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 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ụ

Để xóa thực thể con khỏi một thực thể cấp cao nhất, hãy gửi thực thể cấp cao nhất thực thể trong đó thực thể con bị xoá khỏi trường tương ứng. Nội dung sau đây giả định rằng nguồn cấp dữ liệu sử dụng giản đồ kho hàng phiên bản 1.

Ví dụ: để xoá một khu vực kinh doanh, hãy cập nhật dịch vụ đó bằng khu vực kinh doanh đã bị xoá 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 của 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ệ hay chính xác, mà chỉ là Lệnh gọi API đã được thực hiện. Cuộc gọi thành công sẽ nhận được mã phản hồi HTTP 200, cùng với với nội dung phản hồi trống:

{}

Đối với lỗi, mã phản hồi HTTP sẽ không phải là 200 và nội dung phản hồi cho biết đã xảy ra lỗi gì.

Ví dụ: nếu người dùng đã đặt "ngành dọc" giá trị trong phong bì đến FAKE_VERTICAL, bạn sẽ nhận được thông báo như sau:

{
  "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ố ví dụ về cách sử dụng Expand Updates API (API Bản cập nhật gia tăng) trong 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 nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo v1. Đối với các giải pháp thay thế, hãy tham khảo Sử dụng OAuth 2.0 cho ứng dụng từ máy chủ đến máy chủ.

Đang 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

Sau đây là ví dụ về các trường hợp cập nhật gia tăng, 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ì một lý do không mong muốn.

Bản cập nhật gia tăng: Gửi thực thể Service trong đã thay đổi câu hỏi với @type thành DisabledService, nhưng giữ nguyên các thuộc tính khác.

Nguồn cấp dữ liệu đầy đủ: Đảm bảo cập nhật thực thể từ nguồn cấp dữ liệu đầy đủ để đặt @type thành DisabledService trước lần tìm nạp tiếp theo của Google, nếu không thực thể sẽ được kích hoạt lại.

Một số mặt hàng đã hết hàng Menu Bản cập nhật gia tăng: Gửi Menu đóng gói với offer.inventoryLevel được đặt thành 0 cho MenuItem và mọi dữ liệu khác đều không thay đổi.
Thay đổi giá món ăn trong thực đơn Menu Bản cập nhật gia tăng: Gửi Menu đóng gói thực thể có offer.price được đặt thành giá đã cập nhật cho MenuItem và mọi dữ liệu khác đều 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, RestaurantService.

Menu, Restaurant, Service

Ví dụ: bạn cần thêm thực đơn mới vào một nhà hàng.

Thông tin cập nhật gia tăng: Gửi thực thể mới của thực đơn cùng với nhà hàng có trường hasMenu của nó được cập nhật tương ứ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, RestaurantService.

Menu, Restaurant, Service

Bản cập nhật gia tăng: Gửi xoá rõ ràng.

Nguồn cấp dữ liệu đầy đủ: Đảm bảo 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 giao hàng mới trong một Service cụ thể Service Nguồn cấp dữ liệu tăng dần: Gửi thực thể Service liên quan cùng với tất cả các trường còn nguyên vẹn, như cách bạn thường làm trong nguồn cấp dữ liệu đầy đủ, với khu vực giao hàng mới được chỉ định trong areaServed của Service.
Hãy cập nhật thời gian đến dự kiến (Service) Service Nguồn cấp dữ liệu tăng dần: Gửi Service giống như trong các nguồn cấp dữ liệu, ngoại trừ hoursAvailable.deliveryHours của nguồn cấp dữ liệu được cập nhật cho phù hợp.
Cập nhật giá giao hàng tại Service Service Nguồn cấp dữ liệu tăng dần: Gửi Service đầy đủ kèm Đã cập nhật offers.priceSpecification.price.
Cập nhật giờ giao hàng hoặc mua mang đi trong Service Service Nguồn cấp dữ liệu tăng dần: Gửi Service giống như trong các nguồn cấp dữ liệu, ngoại trừ hoursAvailable của nguồn cấp dữ liệu được cập nhật cho phù hợp.
Service (thay đổi số tiền đặt hàng tối thiểu) Service Nguồn cấp dữ liệu tăng dần: Gửi Service đầy đủ kèm Service.offers.priceSpecification.eligibleTransactionVolume đã cập nhật
Xoá vĩnh viễn MenuItem 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 với MenuItem này đã bị xóa khỏi Danh sách hasMenuItems.

SLO về thời gian xử lý cho các công việc theo lô và cập nhật dần dần

Thực thể được thêm vào thông qua quá trình cập nhật hàng loạt hoặc cập nhật dần sẽ được xử lý trong 1-2 ngày. Một thực thể được cập nhật hoặc bị xoá thông qua một lô sẽ được xử lý trong 2 giờ, trong khi đó, thực thể được cập nhật thông qua việc cập nhật dần dần 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 để cập nhật kho hàng của bạn, HOẶC
  • Một đợt công việc mỗi ngày và các API gia tăng để đảm bảo kho hàng của bạn luôn được cập nhật.