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

選擇可用性格式

有兩種方式可以指定供應情形資料:(1)「開放時段」或 (2)「週期性」。請只選擇一個用於所有商家與服務的方法。選取方法後,您必須繼續採用該方法,整個整合作業 (動態饋給、預訂伺服器和即時更新) 都必須採用這種方式。

請參閱下列指南,瞭解如何判斷何種可用性格式較適合:

  • 你是否將供應情形儲存為明確的運算單元,例如上午 8:00 到上午 8:30?
  • 在您的系統中,您是否以週期性格式儲存供應情形,代表商家提供的服務頻率不穩定,但差異不大?舉例來說,運算單元的時間為上午 9:00 到下午 5:00,每 15 分鐘會重複一次,而且每 15 分鐘以每 15 分鐘為收費單位,就只有一個座位。
  • 商家提供的服務是否一次有多個空位?例如,課程有 30 個開啟名額
  • 以上情況都不適用嗎?
    • 使用 Spots Open
    • 注意:雖然使用重複週期更有效率,並可能使動態饋給大小更小,但如果您的資料模型本身不支援重複週期,則不建議使用重複週期,因為每次即時更新時,都必須重新計算一整天的週期性運算單元。

    時段開放

    參數定義:

    • spot_open:這個供應項目目前可用的名額數量。
    • spot_total:商家具備這項設定的地點總數,包括無法使用的時段。

    「Spots 開放」方法會明確指出每個時段是否可用,並支援同一服務擁有多個地點的模型。這兩個參數會搭配運作,以以數位方式呈現服務能力。

    進行預訂時,Spot_open 的數量應透過即時更新,減少 1 (Spot_total 的數量應維持不變)。當 spot_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:內含一個 有效預訂的平面圖

    現在,有位使用者預訂了其中一個地點。有預訂時,系統會發布即時更新以更新供應情形。在下一個每日供應情形動態饋給中,應反映這筆預訂。在 2018 年 9 月 1 日下午 4:00:00 (格林威治標準時間) 時段中,這些商家的供應情形動態饋給會讓 spot_open 減少 1。2018 年 9 月 1 日下午 8:00:00 (格林威治標準時間) 的時段維持不變。

    具有預訂的動態饋給程式碼片段

    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 都會重複出現。
      • 注意:您不需要指定 spot_open 和 spot_total,但除非有 schedule_exception ,否則兩者都會是 1

    週期方法會指出每日的可用性,例如以每天凌晨 9:00 至下午 5:00 之間每 30 分鐘進行一次的服務。使用週期,您可以指定時段的持續時間、當天第一次出現的時間、該時段應重複的頻率,以及當天應停止重複的時間。注意:每天必須分別指定一組新的週期性運算單元。如果時段已預訂在時間範圍內,您可以指定排程例外狀況。例如,您可以重複每半小時 (上午 9 點到晚上 9 點,但上午 11:00 到 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:00 至 1:00 期間,這些商家的供應情形動態饋給會因為服務持續時間為 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
                      }
                    }
                  ],
                }
              ]
        }