Cập nhật khoảng không quảng cáo gia tăng v2

Phần này mô tả cách bạn có thể gửi thông tin cập nhật quan trọng về thời gian của khoảng không quảng cáo cho Google. API Cập nhật gia tăng cho phép bạn đẩy các bản cập nhật và xoá các thực thể trong khoảng không quảng cáo Hộp cát hoặc môi trường Sản xuất của bạn gần như theo thời gian 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, chẳng hạn như các trường hợp đóng khẩn cấp. Theo quy tắc, mọi thay đổi được gửi qua API cập nhật gia tăng sẽ là thay đổi phải có hiệu lực sau tối đa một giờ. Nếu nội dung thay đổi không cần được phản ánh ngay lập tức, bạn có thể sử dụng tính năng nhập theo lô. Quá trình cập nhật gia tăng sẽ được xử lý trong không quá 5 phút.

Điều kiện tiên quyết

Các mục sau là bắt buộc trước khi bạn triển khai các cập nhật gia tăng:

  1. Một tài khoản dịch vụ được tạo với vai trò người chỉnh sửa cho dự án Hành động của bạn. Để biết thêm thông tin, hãy xem bài viết Tạo và thiết lập dự án.
  2. Nguồn cấp dữ liệu sản xuất hoặc hộp cát được lưu trữ và nhập. Để biết thêm thông tin chi tiết, hãy xem bài viết Nhập hàng loạt.
  3. (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 bài viết Sử dụng OAuth 2.0 để truy cập vào các API của Google.

Thiết bị đầu cuối

Trong các yêu cầu dưới đây, hãy thay thế những thông tin sau:

  • PROJECT_ID: Mã dự án Google Cloud liên kết với dự án mà bạn đã tạo trong phần Tạo và thiết lập dự án.
  • TYPE: 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 (chỉ xoá điểm cuối): Mã của thực thể cần xoá. Hãy nhớ mã hoá URL của thực thể.
  • DELETE_TIME (chỉ xoá điểm cuối): Trường không bắt buộc để biểu thị thời gian 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 ở trong tương lai. Khi gửi một thực thể thông qua một lệnh gọi tăng dần, tạo phiên bản thực thể cũng sẽ sử dụng trường delete_time trong trường hợp có lệnh gọi xoá. Định dạng giá trị này dưới dạng yyyy-mm-ddTHH:mm:ssZ

Cập nhật điểm cuối

Để sửa đổi một thực thể, hãy gửi yêu cầu POST qua HTTP đến điểm cuối sau và cung cấp trọng tải như thông tin cập nhật và nội dung bổ sung. Bạn có thể cập nhật tối đa 1.000 thực thể trong một lệnh gọi API duy nhất.

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities:batchPush

Ví dụ: Nếu bạn muốn cập nhật các thực thể trong một dự án có mã nhận dạng "delivery-provider-id" điểm cuối sẽ là:

https://actions.googleapis.com/v2/apps/delivery-provider-id/entities:batchpush

Xóa điểm cuối

Để xoá một thực thể trong khoảng không quảng cáo của bạn, hãy gửi yêu cầu HTTP DELETE đến điểm cuối sau.

https://actions.googleapis.com/v2/apps/PROJECT_ID/entities/TYPE/ENTITY_ID?entity.vertical=FOODORDERING&delete_time=DELETE_TIME

Ví dụ: để xóa "MenuSection" thực thể có ID "menuSection_122" từ dự án "delivery-provider-id" của bạn, bạn sẽ thực hiện lệnh gọi HTTP DELETE API để:

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

Môi trường Sandbox

Để sử dụng API Bản cập nhật gia tăng trong khoảng không quảng cáo hộp cát, hãy làm theo hướng dẫn trong Điểm cuối ở trên, nhưng hãy gửi yêu cầu đến /v2/sandbox/apps/ thay vì /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

Đang cập nhật các mục

Mỗi yêu cầu POST phải bao gồm các thông số yêu cầu cùng với trọng tải 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.

Cập nhật trọng tải

JSON sẽ xuất hiện giống như trong nguồn cấp dữ liệu hàng loạt, nhưng có những điểm khác biệt sau:

  • Trọng tải không được vượt quá 5 MB. Tương tự như với nguồn cấp dữ liệu theo lô, bạn nên xoá khoảng trắng để thu được nhiều dữ liệu hơn.
  • Sau đây là phong bì như sau:
{
  "requests": [
    {
      "entity": {
        "data":"ENTITY_DATA",
        "name": "apps/project_id>/entities/type/entity_id"
      },
      "update_time":"UPDATE_TIMESTAMP"
    },
  ],
  "vertical": "FOODORDERING"
}

Trong tải trọng trên, hãy thay thế các 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. 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 một yêu cầu gia tăng, cách tạo phiên bản thực thể cũng sẽ sử dụng trường update_time trong trường hợp có yêu cầu thêm/cập nhật.

Ví dụ

Ví dụ 1: Cập nhật nhà hàng

Giả sử bạn cần cập nhật số điện thoại của nhà hàng ngay lập tức. Nội dung cập nhật của bạn chứa JSON cho toàn bộ nhà hàng.

Cân nhắc việc sử dụng nguồn cấp dữ liệu theo lô 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
}

Khi đó, bản cập nhật gia tăng theo yêu cầu POST qua HTTP sẽ như sau:

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"
}

Ví dụ 2: Cập nhật nhiều nhà hàng

Để cập nhật 2 thực thể nhà hàng trong một lệnh gọi API, yêu cầu HTTP POST sẽ như sau:

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"
}

Ví dụ 3: Cập nhật giá món ă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 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.

Cân nhắc việc sử dụng nguồn cấp dữ liệu theo lô như sau:

{
  "@type": "MenuItemOffer",
  "@id": "menuitemoffer6680262",
  "sku": "offer-cola",
  "menuItemId": "menuitem896532",
  "price": 3.00,
  "priceCurrency": "USD"
}

Khi đó, bản cập nhật gia tăng của bạn qua POST sẽ như sau:

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"
}

Thêm một thực thể

Để thêm các thực thể, hãy tránh sử dụng thông tin cập nhật về kho hàng. Thay vào đó, hãy sử dụng quy trình nguồn cấp dữ liệu hàng loạt như mô tả cho giản đồ khoảng không quảng cáo v2.

Xoá một 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à dùng HTTP DELETE thay vì HTTP POST trong yêu cầu.

Xóa thực thể cấp cao nhất

Trong trường hợp bạn muốn xóa nhà hàng trong một nguồn cấp dữ liệu. Bạn cũng phải xóa các dịch vụ và trình đơn của trình đơn đó.

Một điểm cuối mẫu cho thực thể trình đơn có mã nhận dạng &&tt;provider/provider/menu/nr":

DELETE v2/apps/delivery-provider-id/entities/menu/provider%2Frestaurant%2Fmenu%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com

Điểm cuối mẫu của một thực thể nhà hàng có mã nhận dạng &"https://www.provider.com/nhà hàng/nr":

DELETE v2/apps/delivery-provider-id/entities/restaurant/provider%2Frestaurant%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com

Một điểm cuối mẫu cho thực thể dịch vụ có mã nhận dạng &"https://www.provider.com/nhà hàng/service/nr":

DELETE v2/apps/delivery-provider-id/entities/service/provider%2Frestaurant%2Fservice%2Fnr?entity.vertical=FOODORDERING
Host: actions.googleapis.com
}

Xoá thực thể phụ

Đừng sử dụng HTTP DELETE để xóa một thực thể phụ 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á các thực thể phụ thành một bản cập nhật cho một thực thể cấp cao nhất, trong đó thực thể phụ sẽ bị xoá khỏi danh sách hoặc reverseReference có liên quan.

Mã phản hồi API

Một 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ỉ có 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" trong phong bì thành FAKE_VERTICAL, thì 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 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 lược đồ 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 máy chủ sang máy chủ.

Đang cập nhật các mục

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 = '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

Mã này sử dụng thư viện Google auth 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 = '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

Mã này sử dụng thư viện Google Auth cho 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);
}

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 Google auth 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 Google Auth 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 là ví dụ về thông tin cập nhật gia tăng, thông tin cập nhật đầy đủ về nguồn cấp dữ liệu và nội dung ở cấp độ cao trong lệnh gọi API:

Trường hợp Thực thể cần cập nhật Mô tả và hiệu ứng
Tắt dịch vụ Service

Bạn cần tắt dịch vụ vì một lý do không lường trước được.

Cập nhật gia tăng: Cập nhật thực thể Service liên quan bằng cách đặt thuộc tính isDisabled thành true, nhưng giữ nguyên các thuộc tính khác.

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 isDisabled thành true trước lần tìm nạp tiếp theo của Google. Nếu không, thực thể sẽ được bật lại.

Mặt hàng cụ thể đã hết hàng MenuItemOffer Cập nhật gia tăng: Gửi thực thể MenuItemOffer tổng hợp có inventoryLevel được đặt thành 0 cho MenuItem đã cho và tất cả dữ liệu khác sẽ không thay đổi.
Thay đổi giá món ăn trong thực đơn MenuItemOffer Cập nhật gia tăng: Gửi thực thể MenuItemOffer tổng hợp có price được đặt thành mức giá cập nhật cho MenuItem nhất định 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 các thực thể thuộc loại Menu, RestaurantService.

Menu, Restaurant, Service

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

Nguồn cấp dữ liệu đầy đủ: Thêm thực thể vào nguồn cấp dữ liệu rồi chờ nhập hàng loạt.

Xoá vĩnh viễn thực thể cấp cao nhất

Chỉ áp dụng cho các thực thể thuộc loại Menu, RestaurantService.

Menu, Restaurant, Service

Các bản cập nhật bổ sung: Gửi một yêu cầu xoá rõ ràng.

Nguồn cấp dữ liệu đầy đủ: Hãy nhớ xóa thực thể khỏi toàn bộ nguồn cấp dữ liệu trước khi Google tìm nạp lần tiếp theo, nếu không thực thể sẽ được thêm lại.

Thêm một khu vực giao hàng mới trong một Service cụ thể ServiceArea Nguồn cấp dữ liệu tăng dần: Gửi thực thể ServiceArea liên quan và tất cả các trường của thực thể này đều nguyên vẹn, như thường lệ trong nguồn cấp dữ liệu đầy đủ, với khu vực phân phối mới được chỉ định trong polygon, geoRadius hoặc postalCode.
Cập nhật thời gian giao hàng dự kiến sẽ giao sau Service ServiceHours Nguồn cấp dữ liệu tăng dần: Gửi ServiceHours giống như trong các nguồn cấp dữ liệu, ngoại trừ leadTimeMin được cập nhật tương ứng.
Cập nhật giá giao hàng trong Service Fee Nguồn cấp dữ liệu tăng dần: Gửi toàn bộ nội dung Fee với price được cập nhật.
Cập nhật giờ giao hàng hoặc giờ phục vụ mua mang đi tại Service ServiceHours Nguồn cấp dữ liệu tăng dần: Gửi ServiceHours giống như trong các nguồn cấp dữ liệu, ngoại trừ các thuộc tính openscloses của nguồn cấp dữ liệu đó được cập nhật tương ứng.
Service (thay đổi số tiền đặt hàng tối thiểu) Fee Nguồn cấp dữ liệu gia tăng: Gửi Fee đầy đủ với minPrice đã cập nhật
Xoá vĩnh viễn MenuItem Menu Nguồn cấp dữ liệu tăng dần: Gửi MenuItem giống như trong nguồn cấp dữ liệu, nhưng với parentMenuSectionId trống.

SLO về thời gian xử lý các công việc theo lô và bản cập nhật gia tăng

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