在 Feed 中构建库存状况

选择可用性格式

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

您可以借助以下指南确定哪种可用性格式更合适:

  • 在您的系统中,您是否将可用性存储为明确的槽(例如上午 8:00 - 上午 8:30)?
  • 在您的系统中,您是否以周期性格式存储可用性,也就是说,商家提供的服务以一致频率发生且偏差很少?例如,槽从上午 9:00 到下午 5:00 每 15 分钟重复一次,并且每 15 分钟只有一个座位可用。
  • 您的商家提供的服务能否同时有多个营业地点?例如,一门课程的 30 个空缺名额
  • 以上选项均不适用?
    • 使用 Spots Open
    • 注意:虽然使用重复周期更高效并且可能会减小 Feed 大小,但如果您的数据模型本身不支持重复周期,则不建议使用重复周期,因为您需要为每个实时更新重新计算一整天的周期性槽数。

    开放地点数

    参数定义

    • Spots_open:此可用性条目当前可用的广告位数量。
    • spot_total:商家拥有的针对此配置的广告插播位总数,包括不可用的广告插播位。

    Spots Open 方法会明确指明每个空档的可用性,并支持为同一服务设置多个空档的模式。这两个参数可以协同工作,构建服务容量的数字表示形式。

    发生预订时,spots_open 的数量应通过实时更新减少 1( spot_total 数量应保持不变)。一旦 spot_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 中,此预订应该会反映出来。对于 2018 年 9 月 1 日下午 4:00:00(格林尼治标准时间)空档,这些商家的库存状况 Feed 中的 spot_open 值递减 1。2018 年 9 月 1 日晚上 8: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",
                }
              ]
    }
        

    周期性

    参数定义

    • recurrence:表示始终重复的可用性空档。
    • repeat_until_sec:可用性重复的最后一个空档的结束时间的世界协调时间 (UTC) 时间戳。
    • repeat_every_sec:连续可用性空档之间的秒数。例如,如果 repeat_every_sec = 1800(30 分钟),并且 start_sec 从上午 9:00 开始,则槽将在上午 9:00、上午 9:30、上午 10:00 等每 30 分钟重复一次。
      • 注意:无需指定 spot_open 和 spot_total),除非存在 schedule_exception,否则它们都假定为 1

    重复周期方法可指示定期发生的服务每天的可用性,例如,每天上午 9:00 到下午 5:00 每 30 分钟运行一次的服务。通过周期性,您可以指定空档的时长、空档在一天中首次出现的时间、该空档的重复频率,以及该空档在同一天应停止重复的时间。 注意:需要为每天单独指定一组新的周期性槽。如果某个空档已在该时间范围内被预订,则您需要指定时间表例外情况。例如,除了上午 11:00 到上午 11:30 之外,每半小时在上午 9 点到晚上 9 点重复一次。每项服务都有自己的重复周期和调度例外情况。

    服务示例

    一家美容沙龙的楼层平面图如下,但没有有效预订

    图 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 中,此预订应该会反映出来。对于时长为 30 分钟的服务,这些商家的可用性 Feed 会在中午 12:30 到下午 1:00 出现时间安排例外情况。

    包含预订的 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
                      }
                    }
                  ],
                }
              ]
        }