第 5 步:实现实时 API 更新

您的系统中的商品目录会随着来自商家的预订、取消情况和时间安排的新变化在一天中出现波动。实时的 API 更新是一种机制,旨在将商品目录可用性的变化通知 Google。您还可以通过实时的 API 更新将现有预订的变化通知 Google。

API 的实时更新和 Feed

API 的实时更新用于将商品目录可用性和预订的实时增量变化通知 Google。除了实时更新 API,请每天发送完整的可用性 Feed,确保 Google 尽可能准确且及时地了解您系统中的可用性信息。完整的 Feed 可作为您系统中商品目录可用性的当前状态的快照。

虽然 API 更新可用于更新由 Feed 提供的任何信息(例如与商家和服务相关的信息),但它们通常仅用于更新库存状况信息。

需要实时更新的 API

需要实时更新 (RTU) 的 API
BookingNotification 必须 每当预订出现变化(例如修改或取消)时,都发送 BookingNotification RTU。
可用性替换 RTU 随条件发生变化[1] 发送批量替换单个替换 RTU 以更新商品目录可用性。 更改可能需要几分钟才能传播和反映。
商家 RTU 可选 如果您想实时更改商家信息,请发送商家 RTU。更改可能需要几个小时才能传播和生效。
服务 RTU 可选 如果您想实时更改服务信息,请发送服务 RTU。一种常见的使用情形:如果服务价格在一天中大幅度波动,建议您实现服务 RTU,以免出现因价格不匹配而导致预订失败的情况。更改可能需要几个小时才能传播和生效。

可用性替换 API RTU

请在以下情况下使用可用性替换 API 更新可用性:

  • 某个用户通过您的系统完成了一项预订,因此,相应可用性空档不再可预订。
  • 商家在您的系统中更改了可用性。
  • 某个用户通过 Google 完成了一项预订,因此,相应可用性空档不再可预订。
  • 通过 Google 完成的预订由您这一方取消(例如商家直接取消)。您需要更新预订信息及空房情况,因为原来的空档已恢复为可预订状态。
  • 预订服务器 BatchAvailabilityLookup 调用返回的商品目录与实际的商品目录不匹配。

如需了解详情,请参阅以下资源:

Booking Notification API RTU

Booking Notification API 会将现有预订的变化通知 Google。当您发送有关取消的更新时,请仅在请求中发送重要信息及 updateMask 查询参数。示例如下:

Request:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/<PARTNER_ID>/bookings/<BOOKING_ID>?updateMask=status

Body:
{"name":"partners/<PARTNER_ID>/bookings/<BOOKING_ID>", "status":"CANCELED"}

访问 API

创建服务账号

您可在 Google API 控制台中的凭据标签页上创建服务账号。将 JSON 格式的私钥存储在安全的位置。创建账号时,您可以将角色设置为“所有者”。

对 Maps Booking API 进行身份验证

创建服务账号后,请对以下 API 进行身份验证:

  • Google Maps Booking API
  • Google Maps Booking API(开发者版)

有关如何操作的分步指南,请参阅对 Maps Booking API 进行身份验证教程。

使用 RESTful 调用或者下载客户端库

我们建议您使用 JSON 载荷直接对 Maps Booking API 进行 RESTful 调用。如需了解详情,请参阅 REST API 文档

您还可以通过客户端库连接到 API。

语言 下载链接
Java Java 客户端库。如需了解详情,请参阅 Java 客户端说明

您还可下载其他支持库,以处理对 Google API 调用的授权及其他方面。如有需要,请参阅这些示例

提取发现文档

对于部分客户端库(例如 Ruby),有必要提取 API 发现文档,该文档中介绍了相关方法及参数。

使用以下命令提取发现文档:

curl -s -o 'mapsbooking_rest' 'https://mapsbooking.googleapis.com/$discovery/rest?version=v1alpha'

如需详细了解如何使用来自 Ruby 的 API,请访问以下链接:Ruby API 客户端Ruby 身份验证库

对 API 进行已获授权的调用

调用 API 时,请参阅为进行已获授权的 API 调用做准备,通过私钥及以下 OAuth 范围向您的服务账号授权:https://www.googleapis.com/auth/mapsbooking

API 配额

API 更新的配额为每 60 秒 1,500 个请求,即平均每秒 25 个请求。超出配额时(如果您未在合作伙伴门户中添加正确的 Google Cloud 项目编号,就可能会发生这种情况),Google 会返回以下错误消息:

{
  "error": {
    "code": 429,
    "message": "Insufficient tokens for quota ...",
    "status": "RESOURCE_EXHAUSTED",
    "details": [...]
  }
}

如需解决该问题,请使用以指数方式增大的时间间隔再次尝试重新调用,直到成功为止。如果您经常在调用 ReplaceServiceAvailability 时用尽配额,请切换为调用 BatchReplaceServiceAvailabily 以减少 API 调用次数。您可通过该方式在单次 API 调用中更新多项服务。

沙盒环境和生产环境中的端点

您可通过 API 对沙盒环境和生产环境进行调用。请务必在 Google Cloud 项目中一并启用这两个 API。这两个 API 的范围相同,但端点不同。

正式版端点:https://mapsbooking.googleapis.com/

沙盒端点:https://partnerdev-mapsbooking.googleapis.com/

以下是有关如何切换端点的 Java 示例:

    // This block of code is for OAuth and is the same for prod and sandbox.
    GoogleCredential
      .fromStream(new FileInputStream(...))
      .createScoped(Collections.singleton("https://www.googleapis.com/auth/mapsbooking"))

    // This block of code sets the endpoint. This is what you'd change to connect to the sandbox.
    new GoogleMapsBookingAPI.Builder(...)
      .setApplicationName(...)
      .setRootUrl("https://partnerdev-mapsbooking.googleapis.com/") // you add this to change the endpoint to use partnerdev.
      .build()