在 Feed 中构建库存状况

选择可用性格式

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

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

  • 在您的系统中,是否将可用性存储为显式槽位(例如,上午 8:00 - 8:30)?
  • 在您的系统中,您是否以周期性格式存储库存状况,这意味着商家的服务频率一致,并且偏差很少?例如,每 15 分钟上午 9:00 至下午 5:00 进行一次空档,每 15 分钟增加一次(只有一个座位)。
  • 对于您的商家服务,一次可以有多个营业点吗?例如,课程 30 个开放时段
  • 以上选项均不适用?
    • 使用 Spots Open
    • 注意:虽然使用重复周期更高效,且可以减小 Feed 大小,但如果数据模型本身不支持重复周期,则不建议使用重复周期,因为每次实时更新都需要重新计算一整天的周期性槽。

    开放地点数

    参数定义

    • spot_open:此可用性条目当前可用的空档数。
    • spot_total:此配置的商家总数,包括不可用的广告插播位。

    Spot 打开方法会明确指出每个空档的可用性,并且支持为同一服务添加多个插播位的模型。这两个参数协同发挥作用,构建服务容量的数字表示法。

    当预订发生时,Spot_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",
                }
              ]
    }
        

    重复周期

    参数定义

    • 重复周期:表示始终重复的可用性空档。
    • repeat_until_sec:可用性重复的最后槽的结束时间的 UTC 时间戳。
    • repeat_every_sec:连续可用性空档之间的秒数。例如,如果 repeat_every_sec = 1800(30 分钟),start_sec 从上午 9:00 开始,那么槽将每 30 分钟上午 9:00、9:30 和 10:00 重复,等等。
      • 注意:无需指定 spot_open 和 spot_total;除非存在 schedule_exception,否则系统会假定这两者都为 1

    重复周期方法表示定期提供的服务(例如每天上午 9:00 - 下午 5:00 每 30 分钟发生的服务)的可用性。对于重复周期,您可以指定槽的时长、槽首次发生的时间、槽的重复频率,以及在同一天该槽何时停止重复。注意:您需要为每一天分别指定一组新的周期性槽。如果相应时间范围内的空档已被预订,您将需要指定安排例外情况。例如,每半小时上午 9 点至晚上 9 点重复一次,但上午 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
                      }
                    }
                  ],
                }
              ]
        }