在動態饋給中建立供應情形結構

選擇可用性格式

您可以透過兩種方式指定供應情形資料:(1) Spots Open 或 (2) Recurrence。請只為所有商家和服務選擇一種方法。一旦選取方法,就必須在整個整合作業 (動態饋給、預訂伺服器和即時更新) 中使用該方法。

請參考下列指南,判斷哪種供應情形格式較為合適:

  • 在您的系統中,您是否將可用時間儲存為明確的時段,例如上午 8:00 到 8:30 點?
  • 在您的系統中,您是否以週期性格式儲存可預訂時段,也就是商家提供的服務會以固定頻率出現,且幾乎不受影響?舉例來說,時段會從上午 9:00 到下午 5:00 每 15 分鐘重複一次,且每 15 分鐘的間隔只提供一個座位。
  • 商家服務是否可以同時開放多個空缺?例如,課程有 30 個空缺
  • 以上皆非?
    • 使用時段開放
    • 注意:雖然使用週期性資料可提高效率,並可縮減動態饋給大小,但如果資料模型本身不支援週期性資料,則不建議使用週期性資料,因為您必須針對每項即時更新重新計算整個一天的週期性時段。

    時段開放

    參數定義:

    • spots_open:這個可預訂時段目前開放的數量。
    • spots_total:商家針對此設定擁有的總名額數量,包括無法使用的名額。

    Spots Open 方法會明確指出每個時段的可用性,並支援同一項服務有多個時段的模式。這兩個參數會共同建構服務容量的數位表示法。

    預訂發生時,spots_open 的數量應透過即時更新功能減少 1 (spots_total 的數量應保持不變)。當 spots_open = 0 時,廣告版位就不會再顯示。

    服務範例

    瑜珈課程或美容院有下列平面圖,且沒有有效預約

    圖 1:沒有有效預訂的平面圖

    這些商家 2 個時段的預訂情形動態饋給如下所示:

    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:含有一個有效預訂的平面圖

    使用者現在預訂其中一個地點。預訂發生時,系統會發出即時更新,以便更新可用性。在下一個每日空房數動態饋給中,這筆預訂應會顯示。這些商家的可用性動態饋給會將 spots_open 減少 1,以便在 2018 年 9 月 1 日下午 4 點整 (格林威治標準時間) 的時間間隔中使用。2018 年 9 月 1 日 20:00:00 (GMT) 的時間區塊保持不變。

    含有預訂資訊的動態饋給摘要

    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:供應時段重複到最後一個時段的結束時間,以世界標準時間的時間戳記表示。
    • repeat_every_sec:連續可預訂時段之間的秒數。舉例來說,如果 repeat_every_sec = 1800 (30 分鐘),且 start_sec 從上午 9:00 開始,則時段會在每 30 分鐘的上午 9:00、上午 9:30、上午 10:00 等時間重複。
      • 注意:無須指定 spots_open 和 spots_total,系統會假設這兩個值皆為 1,除非有 schedule_exception

    週期方法會指出服務每天的供應情形,例如每天上午 9:00 到下午 5:00 之間每 30 分鐘提供的服務。您可以使用週期性指定時段的持續時間、時段在一天中發生的第一次時間、時段重複的頻率,以及在同一天應停止重複的時間。注意:您必須為每個日子分別指定一組新的週期性時段。如果在指定時間範圍內已預訂時段,您必須指定排程例外狀況。舉例來說,從上午 9 點到晚上 9 點每半小時重複一次,但上午 11 點到上午 11 點 30 分除外。每項個別服務都會有自己的週期和排程例外狀況。

    服務範例

    美容院的平面圖如下,且沒有有效的預約

    圖 3:沒有有效預訂的平面圖。假設每項服務只開放 1 個名額 (例如莎莉每 30 分鐘提供一次理髮服務,但每次只能為 1 位客戶服務)。

    這些商家 1 個時段的預訂情形動態饋給如下所示:

    動態饋給文字片段:

    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 個名額 (例如莎莉每 30 分鐘提供一次理髮服務,但一次只能為 1 位客戶服務)。

    假設使用者在下午 12 點 30 分預約與莎莉的理髮服務。預訂發生時,系統會發出即時更新,以便更新可用性。在下一個每日空房動態饋給中,這筆預訂應會顯示。這些商家的預訂情形動態饋給會在下午 12 點 30 分至 1 點,為持續 30 分鐘的服務建立排程例外狀況。

    含有預訂資訊的動態饋給摘要:

    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
                      }
                    }
                  ],
                }
              ]
        }