予約の空き情報データを構造化する

予約フローでスロットを正常に表示するには、在庫の正確で最新のマッピングを送信する必要があります。飲食店では、テーブルを結合したり、パーティーの人数を変更したりできるため、1 回の予約で空席数が大幅に変わることがあります。このドキュメントの例では、利用可能な在庫を適切に維持してマッピングする方法について説明します。

Availability definition で指定されているパラメータは次のとおりです。

  • party_size: この時間帯に店舗が対応できるグループの人数。この記事の図は、パーティーのサイズを構成するさまざまな方法を示しています。
  • spots_open: 特定の空きスロットとパーティー サイズで現在利用可能なテーブルの数。
  • spots_total: この構成でマーチャントが所有するテーブルの合計数(利用できないテーブルを含む)。

これら 3 つのパラメータが連携して、フロアプランのデジタル表現を構築します。party_size は、各テーブルの収容人数です。テーブルが対応できるサイズごとにエントリがあります。spots_openspots_total は、その party_size を格納できるテーブルの数です。

空のフロアプランの例

次のようなフロアプランのレストランで、予約が 1 件もないとします。

図 1. 有効な予約がないフロアプラン

図 1. 有効な予約がないフロアプラン。

party_sizespots_openspots_total の値は次のとおりです。

party_size spots_open spots_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1

この販売者の 1 つの時間帯の空き状況フィードは次のようになります。

{
  "availability": [
        {
          "spots_total": 3,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 4
          }
        },
        {
          "spots_total": 3,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 5
          }
        },
        {
          "spots_total": 4,
          "spots_open": 4,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 6
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 7
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 8
          }
        }
      ]
}

予約を含むフロアプランの例

以前に予約された円卓があるレストランは次のとおりです。

図 1. 1 件の有効な予約があるフロアプラン

図 2.1 件の有効な予約があるフロアプラン。

party_sizespots_openspots_total の値は次のとおりです。

party_size spots_open spots_total
4 2 3
5 2 3
6 3 4
7 1 1
8 1 1

この販売者の 1 つの時間帯の空き状況フィードは次のようになります。

{
  "availability": [
        {
          "spots_total": 3,
          "spots_open": 2,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 4
          }
        },
        {
          "spots_total": 3,
          "spots_open": 2,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 5
          }
        },
        {
          "spots_total": 4,
          "spots_open": 3,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 6
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 7
          }
        },
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1535806800,
          "merchant_id": "merch1",
          "resources": {
            "party_size": 8
          }
        }
      ]
}

テーブルの結合に対応した予約可能状況を指定する

レストランがテーブルを組み合わせて大人数のグループに対応する方法はたくさんあります。特定のサイズのグループを受け入れられるかどうかを正確に反映するように spots_openspots_total を指定する必要があります。

テーブルの結合を指定する方法の例を次に示します。フィードは、使用する計算方法によって異なる場合があります。ビジネス ロジックに合わせて spots_openspots_total を指定してもかまいません。

レストランがテーブルを組み合わせて大人数のグループに対応している場合は、spots_openspots_total を更新して、この情報を反映できます。

たとえば、2 つの小さなテーブルを組み合わせて 7 ~ 10 人のグループを収容できるレストラン:

図 1. 有効な予約がないフロアプラン

図 3. 有効な予約がないフロアプラン。

有効な予約がない場合、party_sizespots_openspots_total の値は次のようになります。

party_size spots_open spots_total
4 3 3
5 3 3
6 4 4
7 1 1
8 1 1
9 1 1
10 1 1

同じフロアプランで、2 つの小さなテーブルを組み合わせた 10 人のパーティーの予約が行われました。

図 1. 2 つのテーブルにまたがる 1 つのアクティブな予約があるフロアプラン

図 4. 2 つのテーブルにまたがる 1 つの有効な予約があるフロアプラン。

この場合、party_sizespots_openspots_total の値は次のようになります。

party_size spots_open spots_total
4 1 3
5 1 3
6 2 4
7 1 1
8 1 1
9 0 1
10 0 1