// A resource is used to disambiguate availability slots from one another when// different staff, room or party_size values are part of the service.// Multiple slots for the same service and time interval can co-exist when they// have different resources.messageResources{// One of staff_id, room_id, or party_size must be set.// Optional ID for a staff member providing the service. This field identifies// the staff member across all merchants, services, and availability records.// It also needs to be stable over time to allow correlation with past// bookings. (optional but required if staff_name is present)stringstaff_id=1;// Optional name of a staff member providing the service. This field will be// displayed to users making a booking, and should be human-readable, as// opposed to an opaque identifier. (optional but required if staff_id is// present)stringstaff_name=2;// An optional ID for the room the service is located in. This field// identifies the room across all merchants, services, and availability// records. It also needs to be stable over time to allow correlation with// past bookings. (optional but required if room_name is present)stringroom_id=3;// An optional name for the room the service is located in or experience of// of the service. This field will be displayed to users making a booking,// and should be human readable, as opposed to an opaque identifier.// A room name should only be used for seating areas or prepaid experiences.// Examples of room names include "Bar", "Patio", "Dining Room". Examples of// dining experiences using room names include "Five-Course Tasting Menu",// "Chef Omakase". It is strongly recommended that the default seating area// does not have a room associated with it.stringroom_name=4;// Applicable only for Dining: The party size that can be accommodated// during this time slot. A restaurant can be associated with multiple Slots// for the same time, each specifying a different party_size, if for instance// 2, 3, or 4 people can be seated with a reservation. (optional)int32party_size=5;// Localized room description with a limit of 500 characters. If set,// a default value must be provided, it is preferred to use the common// languages for the merchant's locale.Textroom_description=7;}
{
"availability": [{
"merchant_id": "dining-A",
"service_id": "reservation",
"start_sec": 1535853600,
"duration_sec": 2700,
"spots_total": 2,
"spots_open": 2,
"resources": {
"room_id": "experience-1",
"room_name": "Wine Tasting Menu Pair",
"description": "This Wine Tasting Menu Pair showcases American cuisine rooted in the nostalgic flavors of the 20th century American experience. Each experience is hand-crafted, with a progression from small bites to more substantial plates.",
"party_size": 2,
}
}]
}
{
"availability": [
{
"merchant_id": "dining-A",
"service_id": "reservation",
"start_sec": 1535853600,
"duration_sec": 2700,
"spots_total": 2,
"spots_open": 2,
"resources": {
"room_id": "experience-1",
"room_name": "Wine Tasting Menu Pair",
"description": "This Wine Tasting Menu Pair showcases American cuisine rooted in the nostalgic flavors of the 20th century American experience. Each experience is hand-crafted, with a progression from small bites to more substantial plates.",
"party_size": 2
}
},
{
"merchant_id": "dining-A",
"service_id": "reservation",
"start_sec": 1535854600,
"duration_sec": 2700,
"spots_total": 4,
"spots_open": 4,
"resources": {
"room_id": "experience-1",
"room_name": "Wine Tasting Menu Pair",
"party_size": 6
}
}]
}
[null,null,["最后更新时间 (UTC):2025-08-22。"],[[["\u003cp\u003eThe Actions Center allows restaurants to specify distinct seating areas (like bar or patio) or dining experiences (like tasting menus) for reservations.\u003c/p\u003e\n"],["\u003cp\u003eThis is achieved using the \u003ccode\u003eroom_id\u003c/code\u003e, \u003ccode\u003eroom_name\u003c/code\u003e, and optionally \u003ccode\u003eroom_description\u003c/code\u003e fields within the \u003ccode\u003eresources\u003c/code\u003e message of an Availability slot.\u003c/p\u003e\n"],["\u003cp\u003eIt's recommended to avoid assigning a room name to the general dining area.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eroom_name\u003c/code\u003e and \u003ccode\u003eroom_description\u003c/code\u003e can also be utilized for prepaid dining experiences, particularly when implementing Reservations Payments Redirect.\u003c/p\u003e\n"],["\u003cp\u003eWhen specifying rooms or experiences, the information needs to be consistent across the availability feed, booking operations, and real-time updates.\u003c/p\u003e\n"]]],["Restaurants can specify distinct seating areas or experiences like \"Bar\" or \"Wine Tasting\" using `room_id` and `room_name` in the `resources` message of the Availability feed. `room_description` offers detailed information about each room. Multiple slots can share the same `room_id` and `room_name`. Ensure only one slot includes the `room_description` for each room. Feeds should include this data and follow best practices, like compressing and sharding to manage the size.\n"],null,["# Add dining seating sections\n\nIt is common for restaurants to have distinct seating areas such a bar or\npatio and different experiences, like a five-course tasting menu or wine\ntasting. The Actions Center supports this distinction and allows the user to\nspecify the area to book a table.\n| **Note:** A room name should only specify seating areas or prepaid experiences.\n\nAvailability Slots With Room Names\n----------------------------------\n\n**Figure 1:** Example slot selection for a restaurant with seating sections **Note:** It is recommended that the general dining area not have a room associated with it.\n\nThis inventory separation can be employed by setting the `room_id`,\n`room_name`, and fields in the `resources` message of an\n[Availability](/actions-center/verticals/reservations/e2e/reference/feeds/availability-feed)\nslot. To include room descriptions, use `room_description` field inside the\nResources message. \n\n // A resource is used to disambiguate availability slots from one another when\n // different staff, room or party_size values are part of the service.\n // Multiple slots for the same service and time interval can co-exist when they\n // have different resources.\n message Resources {\n // One of staff_id, room_id, or party_size must be set.\n\n // Optional ID for a staff member providing the service. This field identifies\n // the staff member across all merchants, services, and availability records.\n // It also needs to be stable over time to allow correlation with past\n // bookings. (optional but required if staff_name is present)\n string staff_id = 1;\n\n // Optional name of a staff member providing the service. This field will be\n // displayed to users making a booking, and should be human-readable, as\n // opposed to an opaque identifier. (optional but required if staff_id is\n // present)\n string staff_name = 2;\n\n // An optional ID for the room the service is located in. This field\n // identifies the room across all merchants, services, and availability\n // records. It also needs to be stable over time to allow correlation with\n // past bookings. (optional but required if room_name is present)\n string room_id = 3;\n\n // An optional name for the room the service is located in or experience of\n // of the service. This field will be displayed to users making a booking,\n // and should be human readable, as opposed to an opaque identifier.\n // A room name should only be used for seating areas or prepaid experiences.\n // Examples of room names include \"Bar\", \"Patio\", \"Dining Room\". Examples of\n // dining experiences using room names include \"Five-Course Tasting Menu\",\n // \"Chef Omakase\". It is strongly recommended that the default seating area\n // does not have a room associated with it.\n string room_name = 4;\n\n // Applicable only for Dining: The party size that can be accommodated\n // during this time slot. A restaurant can be associated with multiple Slots\n // for the same time, each specifying a different party_size, if for instance\n // 2, 3, or 4 people can be seated with a reservation. (optional)\n int32 party_size = 5;\n\n // Localized room description with a limit of 500 characters. If set,\n // a default value must be provided, it is preferred to use the common\n // languages for the merchant's locale.\n Text room_description = 7;\n }\n\nThis information is an integral part of a slots definition and will need to be\nincluded in the feeds as well as all booking and real-time update operations.\nYou can see examples of the `room_id` and `room_name` being specified in the\n[Dining, Vertical-Specific Feed\nexample](/actions-center/verticals/%7B%7B%20vertical%20%7D%7D/add-ons/add-payments/feeds).\n\nAvailability Slots using Room Names for Experiences\n---------------------------------------------------\n\nIf you have implemented or are in the process of implementing [Reservations Payments Redirect](/actions-center/verticals/reservations/e2e/add-ons/add-payments-redirect/overview),\nyou may use `room_name` and `room_descriptions` to power prepaid dining\nexperiences. The following screenshot details how the experience is shown on the\nweb.\n**Figure 1:** Example slot selection for a restaurant with seating sections and room descriptions \n\n#### Room Sample\n\n```scdoc\n{\n \"availability\": [{\n \"merchant_id\": \"dining-A\",\n \"service_id\": \"reservation\",\n \"start_sec\": 1535853600,\n \"duration_sec\": 2700,\n \"spots_total\": 2,\n \"spots_open\": 2,\n \"resources\": {\n \"room_id\": \"A-dining-room\",\n \"room_name\": \"Bar\",\n \"party_size\": 2,\n }\n }]\n}\n```\n\n#### Experiences Sample\n\n```scdoc\n{\n \"availability\": [{\n \"merchant_id\": \"dining-A\",\n \"service_id\": \"reservation\",\n \"start_sec\": 1535853600,\n \"duration_sec\": 2700,\n \"spots_total\": 2,\n \"spots_open\": 2,\n \"resources\": {\n \"room_id\": \"experience-1\",\n \"room_name\": \"Wine Tasting Menu Pair\",\n \"description\": \"This Wine Tasting Menu Pair showcases American cuisine rooted in the nostalgic flavors of the 20th century American experience. Each experience is hand-crafted, with a progression from small bites to more substantial plates.\",\n \"party_size\": 2,\n }\n }]\n}\n```\n\nEnsure the Size of Your Feed Remains Small\n------------------------------------------\n\nIf you have a large number of seating sections each with room descriptions, you\ncan reduce the size of your feed by only including the room descriptions in one\nof the slots. We use the `room_name` and `room_id` across all slots and add the\n`room_description` from one of the slots.\n| **Warning:** If more than one `room_description` is provided in different slots and they're a different definition, we don't show any room descriptions for that room or experience.\n\nWhen managing the size of your feed, consider following the best practices\noutlined in [Compress Feed Files](/actions-center/verticals/reservations/e2e/reference/tutorials/compression) and [Shard Feed Files](/actions-center/verticals/reservations/e2e/reference/tutorials/sharding) \n\n#### Room Description Sample\n\n```scdoc\n{\n \"availability\": [\n {\n \"merchant_id\": \"dining-A\",\n \"service_id\": \"reservation\",\n \"start_sec\": 1535853600,\n \"duration_sec\": 2700,\n \"spots_total\": 2,\n \"spots_open\": 2,\n \"resources\": {\n \"room_id\": \"experience-1\",\n \"room_name\": \"Wine Tasting Menu Pair\",\n \"description\": \"This Wine Tasting Menu Pair showcases American cuisine rooted in the nostalgic flavors of the 20th century American experience. Each experience is hand-crafted, with a progression from small bites to more substantial plates.\",\n \"party_size\": 2\n }\n },\n {\n \"merchant_id\": \"dining-A\",\n \"service_id\": \"reservation\",\n \"start_sec\": 1535854600,\n \"duration_sec\": 2700,\n \"spots_total\": 4,\n \"spots_open\": 4,\n \"resources\": {\n \"room_id\": \"experience-1\",\n \"room_name\": \"Wine Tasting Menu Pair\",\n \"party_size\": 6\n }\n }]\n}\n```"]]