Table reservation CUI design
This document describes the design of a conversational user interface (CUI) for table reservations so that all stakeholders can stay in sync on goal and scope. The table reservation module provides a conversational service that enables users to make, view and cancel table reservations. The conversational experience of each functionality is described in detail below.
The design and implementation of this module are based on the assumption that a reservation will remain valid until it is expired or canceled by the user. While businesses may change plans and render some reservations invalid, this module does not cover those scenarios.
Make a reservation
To make a reservation, the user can simply say something like "I'd like to make a reservation." Subsequently, the chatbot will prompt for the necessary details. The essential information required for creating a reservation includes the following (captured by slots):
userEmail
String Required. User's email for reservation tracking.numberOfGuests
Int Required. Count of guests for the reservation.date
LocalDate Required. Reservation date.time
LocalTime Required. Reservation time.
Upon furnishing all mandatory information, the chatbot will confirm the reservation and proceed accordingly.
The service's conversational behavior is detailed through contextual snippets:
Happy path
- Description: Reservation creation with user confirmation.
- Precondition: N/A
- Annotated conversationjson
User: "Hi, I'd like to reserve a table, please." Chatbot: "Could you please provide your email address for the table reservation?" User: "xxxx@gmail.com" Chatbot: "How many people will you need the reservation for?" User: "There will be two of us." Chatbot: "Which day will you be joining us on?" User: "This Sunday." Chatbot: "What time would you like the reservation for?" User: "3:00 PM." Chatbot: "Are you sure to book a table for 2 at 3:00 PM on Sunday, Jun 8, 2024?" User: "Yes." Chatbot: "Your reservation has been made. We'll see you at 3:00 PM on Sunday, Jun 8, 2024."
- End state: Slots
userEmail
,numberOfGuests
,date
andtime
are filled.json{ "userEmail": "xxxx@gmail.com", "numberOfGuests": 2, "date": "2024-6-8", "time": "15:00" }
Inform reservation failure
- Description: Notifying the user when a reservation cannot be processed.
- Precondition: Slots
userEmail
,numberOfGuests
,date
andtime
are all filled. - Annotated conversation:json
Chatbot: "Are you sure to book a table for 2 at 3:00 PM on Sunday, Jun 8, 2024?" User: "Yes." Chatbot: "Sorry, the table you want to book is currently unavailable. You may change to another time or date, and try it again."
- End state:
- Keep the filling for slots
userEmail
andnumberOfGuests
. - Clear up slots:
date
andtime
.
- Keep the filling for slots
Handle invalid input
- Description: Prompting the user for a valid input when the chatbot receives an unserviceable value for a slot (e.g., an invalid date).
- Precondition: Slots
userEmail
andnumberOfGuests
are filled. - Annotated conversation:
Chatbot: "Which day will you be joining us on?"
User: "This Sunday."
Chatbot: "Sunday, Jun 8, 2024 is not available. Please choose another date. Which day will you be joining us on?"
- End state:
- Slots
userEmail
andnumberOfGuests
are filled. - Slot
date
is active.
- Slots
Handle value replacement
- Description: Updating slot values upon user request for modification (e.g., changing the date).
- Precondition: Slots
userEmail
,numberOfGuests
anddate
are filled,. - Annotated conversation:json
User: "Can I change the date to this Saturday?" Chatbot: "Sure, the date is changed from Sunday, Jun 8, 2024 to Saturday, Jun 7, 2024."
- End state: Slot
date
is filled with new value.
View reservations
Users can check their reservations by asking the chatbot to "show me my reservations." The chatbot will then display a list of the user's current reservations upon providing the required information:
userEmail
String Required. User's email for reservation lookup.
The service's conversational behavior is detailed through contextual snippets:
Happy path
- Description: Displaying the user's current reservations.
- Precondition: N/A
- Annotated conversation:
User: "Show me my reservations."
Chatbot: "Could you please provide your email address for the table reservation?"
User: "xxxx@gmail.com"
Chatbot: "You have reserved a table for Sunday, Jun 8, 2024 at 3:00 PM."
- End state: Slot
userEmail
is filled.
No valid reservations
- Description: Informing the user when no valid reservations are found.
- Precondition: N/A
- Annotated conversation:json
User: "Show me my reservations." Chatbot: "Could you please provide your email address for the table reservation?" User: "xxxx@gmail.com" Chatbot: "Apologies, I couldn't locate a reservation linked to your email (xxxx@gmail.com). Please verify if you used the correct account for the reservation."
- End state: Slot
userEmail
is filled.
Cancel a reservation
Users can cancel a reservation by instructing the chatbot to "cancel my reservation." The chatbot will guide the user to specify the reservation for cancellation, requiring the following details:
userEmail
String Required. User's email for reservation tracking.reservationId
String Required. The ID of the reservation will be cancelled.
The service's conversational behavior is detailed through contextual snippets:
Happy path
- Description: Successful cancellation of a reservation with user confirmation.
- Precondition: N/A
- Annotated conversation:json
User: "Cancel my reservation." Chatbot: "Could you please provide your email address for the table reservation?" User: "xxxx@gmail.com" Chatbot: "Which reservation would you like to cancel?" "1. Sunday, Jun 8, 2024, 3:00 PM" "2. Saturday, Jun 7, 2024, 7:00 PM" User: "The second" Chatbot: "Okay, I see that reservation. Is this the correct reservation?" User: "Yes, that's correct." Chatbot: "Thank you. The reservation has been canceled successfully."
- End state: Slot
userEmail
andreservationId
are filled.