在 Feed 中构建可用性

选择播出信息格式

您可以通过以下两种方式指定空房数据:(1) 空房数或 (2) 重复。请仅选择一种方法,用于在您的所有商家和服务中使用。选择一种方法后,您必须在整个集成(Feed、预订服务器和实时更新)中坚持使用该方法。

请参考以下指南,确定哪种库存状况格式更适合:

  • 在您的系统中,您是否将空闲时间存储为显式时段(例如,上午 8:00 至 8:30)?
  • 在您的系统中,您是否以周期性格式存储空闲时间,也就是说,商家提供的服务频率是否一致且很少出现偏差?例如,上午 9:00 到下午 5:00 的空档每 15 分钟重复一次,并且每 15 分钟递增一次,只有一个座位可用。
  • 商家的服务是否可以同时有多个空缺?例如,某门课程有 30 个空缺学位
  • 以上都不是?
    • 使用开放地点数
    • 注意:虽然使用重复性更高效,并且可以缩减 Feed 大小,但如果您的数据模型不支持原生重复性,则不建议使用重复性,因为您需要针对每次实时更新重新计算一整天的重复性时间段。

    开放地点数

    参数定义

    • spots_open:此空房信息条目当前可用的空档数。
    • spots_total:商家针对此配置的广告位总数,包括不可用的广告位。

    “Spots Open”方法会明确指明每个时段的空闲情况,并支持为同一服务设置多个广告位。这两个参数协同工作,以数字方式表示服务容量。

    发生预订时,spots_open 数量应通过实时更新递减 1(spots_total 数量应保持不变)。当 spots_open = 0 后,该广告位应该不会再显示。

    服务示例

    瑜伽课程或美容院有以下平面图,且没有有效的预约

    图 1:没有有效预订的平面图

    这两家商家的 2 个空档的可用性 Feed 如下所示:

    JSON

        {
          "availability": [
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535817600, # Sept 1, 2018 4:00:00 PM GMT
                  "merchant_id": "1001"
                },
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535832000, # Sept 1, 2018 8:00:00 PM GMT
                  "merchant_id": "1001",
                }
              ]
        }
        

    包含预订的服务示例

    图 2:包含一个有效预订的平面图

    现在,用户预订了其中一个停车位。发生预订时,系统会发出实时更新以更新空房情况。下一个每日空房情况 Feed 中应会反映此预订。在这些商家的空房情况 Feed 中,2018 年 9 月 1 日下午 4:00:00(格林尼治标准时间)的时段的 spots_open 会递减 1。2018 年 9 月 1 日 20:00:00(格林尼治标准时间)的时段保持不变。

    包含预订信息的 Feed 摘要

    JSON

        {
          "availability": [
                {
                  "spots_total": 6,
                  "spots_open": 5,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535817600, # Sept 1, 2018 4:00:00 PM GMT
                  "merchant_id": "1001"
                },
                {
                  "spots_total": 6,
                  "spots_open": 6,
                  "duration_sec": 3600,
                  "service_id": "1001",
                  "start_sec": 1535832000, # Sept 1, 2018 8:00:00 PM GMT
                  "merchant_id": "1001",
                }
              ]
    }
        

    周期性

    参数定义

    • 重复周期:表示持续重复的可用性空档。
    • repeat_until_sec:可用性重复截止时间的最后一个空档的结束时间的 UTC 时间戳。
    • repeat_every_sec:连续可用性空档之间的秒数。例如,如果 repeat_every_sec = 1800(30 分钟),并且 start_sec 从上午 9:00 开始,则这些空档将每 30 分钟重复一次,分别在上午 9:00、9:30、10:00 等时间重复。
      • 注意:无需指定 spots_open 和 spots_total,除非存在 schedule_exception,否则系统会假定它们均为 1

    重复方式用于指明定期发生的服务的每日空档情况,例如每天上午 9:00 至下午 5:00 每 30 分钟发生一次的服务。使用重复设置时,您可以指定时段的时长、时段在一天中的首次出现时间、该时段应重复的频率,以及它在同一天应停止重复的时间。 注意:您需要为每天单独指定一组新的重复时段。如果相应时间范围内已预订了某个时段,您需要指定时间表例外情况。例如,上午 9:00 到晚上 9:00 每半小时重复一次,但上午 11:00 到上午 11:30 除外。每项服务都有自己的重复周期和时间安排例外情况。

    服务示例

    美容院有以下平面图,且没有有效的预约

    图 3:没有有效预订的平面图。假设每项服务只有 1 个空位(例如,Sally 每 30 分钟提供一次剪发服务,但一次只能为 1 位客户提供服务)。

    这些商家 1 个空档的可用性 Feed 如下所示:

    Feed 摘要

    JSON

        {
        "availability": [
              {
                "merchant_id": "1001",
                "service_id": "1001",  # haircut
                "start_sec": 1493888400, # May 4, 2017 9:00:00 AM GMT
                "duration_sec": 1800,
                "recurrence": {
                  "repeat_every_sec": 1800,
                  "repeat_until_sec": 1493915400 # May 4, 2017 4:30:00 PM GMT
                }
              }
            ]
        }
        

    包含预订的服务示例

    图 4:包含一个有效预订的平面图。假设每项服务只有 1 个空位(例如,Sally 每 30 分钟提供一次剪发服务,但一次只能为 1 位客户提供服务)。

    现在假设,用户预约了下午 12:30 与 Sally 的理发服务。发生预订时,系统会发出实时更新以更新空房情况。下一个每日空房情况 Feed 中应会反映此预订。这些商家的可用性 Feed 中会有一个时段安排例外情况,即下午 12:30 至 1:00 点,服务时长为 30 分钟。

    包含预订信息的 Feed 摘要

    JSON

        {
          "availability": [
                {
                  "merchant_id": "1001",
                  "service_id": "1001",
                  "start_sec": 1493888400, # May 4, 2017 9:00:00 AM GMT
                  "duration_sec": 1800,
                  "recurrence": {
                    "repeat_every_sec": 1800,
                    "repeat_until_sec": 1493915400 # May 4, 2017 4:30:00 PM GMT
                  },
                  "schedule_exception": [
                    {
                      "time_range": {
                        "begin_sec": 1493901000, # May 4, 2017 12:30:00 PM GMT
                        "end_sec": 1493902800 # May 4, 2017 1:00:00 PM GMT
                      }
                    }
                  ],
                }
              ]
        }