Phase 1 Zbee Blueprint [final ver]
Session starts
Welcome message
What is your name?
Await user tells his name
Await user to ask for help
Ready to book
Tour Book Form
Tour Book Form
Tell about your favorite tours
Zbee's tour descriptions
Tour Query Form
Show me what else you can do
I am in Mallorca
Shall I tell about my favorite tours
Await user to reply if Zbee should tell her favourite tours
Await user to confirm the name
Affirm
Slots filled: {first_name} = Ali
Nice to meet you
How can I help?
Await user to ask for help
Deny
Slots unset: {full_name}
Graceful bypass
How can I help?
Await user to ask for help
Tell user name
Slots unset: {full_name}
Graceful bypass
How can I help?
Await user to ask for help
Make sure the happy path is smooth.
We could implement the full_name validation later.
Await user tells his name
Tell user name
{full_name} is set
Explicit confirmation of user first name
Await user to confirm the name
{full_name} is not set
Graceful bypass
How can I help?
Await user to ask for help
Ask why my name is needed
Need your name later
How can I help?
Await user to ask for help
[Undefined State]
Ask why name is needed
[To be defined]
User tells his name
[To be defined]
Stop
[To be defined]
Continue
[To be defined]
Show me what else you can do
I am in Mallorca
Shall I tell about my favorite tours
Await user to reply if Zbee should tell her favourite tours
I am in Mallorca
All Mallorca tours
Await user to acknowledge Zbee could handle only some tours
Want to chitchat
Mallorca General Information
user: I have some questions about Mallorca
Zbee: To be honest, I don't yet know everything about this fascinating island, but I'll try my best to answer all your questions, so please, ask away.
user: I would like to know more about Mallorca in general and some of the important historical and geographical landmarks that tourist like to see when they visit?
ACTION: To {Mallorca_knowledge_graph} ?
Zbee: Now are you ready to hear about some of my favorite tours?
Tours General FAQ
user: Is there a dinosaur exhibition in Mallorca?
iTicket_FAQ
Bye
Bye
Session ends
cruise menu
Ask which tour
Await user to reply if Zbee should tell her favourite tours
Tell about your favorite tours
Zbee's tour descriptions
Tour Query Form
Affirm
Zbee's tour descriptions
Tour Query Form
Deny
I am in training, so want to book independently?
Await user to acknowledge Zbee could handle only some tours
Affirm
independently on website
Minimise Zbee
Await user to affirm to book tour
I have questions
Do you want to know more about tour?
Await user ask questions about tour
Book tour
Let's book it now
Tour Book Form
Affirm
Let's book it now
Tour Book Form
Tell me other tours
Let me tell you about {tour_id}
Await user to affirm tour suggestion
FORM: Tour Detail Form
Form Loop
tour_date
What dates are you looking at?
Pattern: date
next available dates
Loop back
tour operating dates
Describe tour operating dates
Loop back
Random day
Loop back
num_aduit
How many adults
Pattern: number
Not any
num_child
How many children
Pattern: number
Not any
What is the age range?
Age range definition
Loop back
num_senior
How many seniors do you have?
Pattern: number
Not any
num_infant
How many infants?
Pattern: number
Not any
Upon Event
Active
Stop
General flow suspension message
Inactive
Inactive
Continue
General flow resume message
Active
Complete
ACTION: Validate num_child
Is Non-negative integer
Slot filled:
{num_child}
else
Invalid number of child
Loop back
cruises
[iT195]
[iT131]
[iT71]
pirates
[iT189]
marineland
[iT237]
island tour
[iT304]
all with boat
[iT195]
[iT131]
[iT71]
[iT304]
user: Are there other Dolphin tours less than 4 hours?
Zbee: yes, there are shorter tours but I'm not trained yet to help you book them. If you wish you can check them out and book a shorter tour directly on our site.
user: OK
ACTION: go to Other tours beside Zbee's Choice Tours
user choice
user: I still have questions.
ACTION: return to Pirates tour FAQ
user: Im ready to book tickets for the Pirate Adventure show.
Zbee: Will that be with or without the special meal?
user choice
user: without the special meal.
Slots filled:
tour_choice = [189](tour)
Zbee: Great, let's book it.
ACTION: go to Confirmation before booking
user: With one special meal.
Slots filled:
tour_choice = [189](tour)
special meal = Y(1)
Zbee: Great, let's book it.
ACTION: go to Confirmation before booking
Await user ask questions about tour
What days of the week
Describe tour operating dates
[iT71](Operating_days): slot = M,W,F
[iT189](Operating_days): slot = M,W,F
[iT131](Operating_days): slot = T,Th,Sn
[iT189](Operating_days): slot = T,Th,Sn
[iT237](Operating_days): slot = "everyday"
[iT304](Operating_days): slot = "everyday"
Are you ready to book or any question?
Await user to affirm to book tour
tour duration
General duration question
[iT71](Duration): slot = "4 hours"
[iT189](Duration): slot = "show is 2 hours, but it is best to arrive an hour early"
[iT131](Duration): slot = "4 hours"
[iT195](Duration): slot = "4 hours"
[iT237](Duration): slot = "It is open all day."
[iT304](Duration): slot = "It is an all-day trip."
Are you ready to book or any question?
Await user to affirm to book tour
Can we swim
Describe Swimming
Are you ready to book or any question?
Await user to affirm to book tour
snorkels and masks
snorkels and masks
Are you ready to book or any question?
Await user to affirm to book tour
swimsuit
Bring swimsuit
Are you ready to book or any question?
Await user to affirm to book tour
Is pickup included in price
[iT71](pickup) slot = N
[iT189](pickup) slot = N
[iT195](pickup) slot = N
[iT131](pickup) slot = Y
[iT237](pickup) slot = N
[iT304](pickup) slot = Y
Pickup is included in the price
Are you ready to book or any question?
Await user to affirm to book tour
best means of transport
Getting to tours on your own
Are you ready to book or any question?
Await user to affirm to book tour
Ask for tour price
Describe tour price
Are you ready to book or any question?
Await user to affirm to book tour
Cancellation policy
Cancellation policy
Are you ready to book or any question?
Await user to affirm to book tour
Alcohol on cruise
Alcohol served
Are you ready to book or any question?
Await user to affirm to book tour
Alcohol served at Pirates
Alcohol Pirates
Are you ready to book or any question?
Await user to affirm to book tour
services on the boat?
services on the boat
Are you ready to book or any question?
Await user to affirm to book tour
What is the boat like?
Describe type of boat
Are you ready to book or any question?
Await user to affirm to book tour
Is this a good tour for kids?
good tour for kids
Are you ready to book or any question?
Await user to affirm to book tour
Food
[iT237]
requesting food information re specific tour
Marineland lunch
Are you ready to book or any question?
Await user to affirm to book tour
[iT304]
requesting food information re specific tour
Island tour lunch
Are you ready to book or any question?
Await user to affirm to book tour
[iT189]
requestiing food information re specific tour
Pirates Adventure Dinner
Are you ready to book or any question?
Await user to affirm to book tour
[iT195]
[iT131]
[iT71]
Meal included
cruise menu
Cruise menu
Are you ready to book or any question?
Await user to affirm to book tour
special food options
Pirates special meal
Affirm
Slot [add note to file]
{Pirates_special_food} =10 euro
Are you ready to book or any question?
Await user to affirm to book tour
not ready to continue
come back soon
no special meal
Are you ready to book or any question?
Await user to affirm to book tour
Special meal note
Affirm
Slot [add note to file]
{special_food} =Y
Are you ready to book or any question?
Await user to affirm to book tour
no special meal
Are you ready to book or any question?
Await user to affirm to book tour
not ready to continue
come back soon
ACTION: Validate full_name
Recognised Names
(Ali Adbul Al Nasri)
Slot filled: {full_name} = Ali Adbul Al Nasri
Slots filled: {first_name} = Ali
Unrecognised Names
(&^%$#)
Slot unset: {full_name}
ACTION: Validate tour_name
Recognised Tours
(Found in catalogue)
Slot filled: {tour_name}
Slot filled: {tour_info}
Unrecognised Tours
(Not found in catalogue)
Slot unset: {tour_name}
Simon:
I think these questions could be asked anytime, meaning that we might not constrain them to certain paths. Now these questions can only be asked right after a tour is picked.
If the user hasn't mentioned a tour before, the system would need to ask to pick a tour before answering these questions.
Need deeper discussion.
TO FIX:
Seems like a dialogue specific to Dolphin Watch.
Need discussion.
Simon:
Based on the responses, seems like this ("Food" intent) should be split into multiple intents.
Simon:
Looks like "Special food options" doesn't need to follow after "food"?
GCH:
I agree, it doesn't need to be there the link was to the one above at the higher level so it is gone.
"Are there other food options available, like vegetarian, vegan, gluten-free?" can be asked independently as long as the user mentioned which tour.
GCH:
In fact when does an even need to mention the tour, it can be any tour with the exception of the Pirates which is different because it actually costs money.
Simon:
"What is the food menu?" can be asked independently ?
So I think it doesn't need to follow by menu question.
GCH: changed it to "cruise menu" which was the intention.
Simon:
If we put "menu" and "special food options" just under dialogue state "Await user ask questions about tour", then we don't need "Continue" here.
GCH:
Gone.
Simon:
Looks like here Zbee is collecting an answer from user about special meal option.
Just wonder if we should do it with FORM.
And not sure if we should set some text "Special Menu is needed" in the actual iTicketing form filling process.
This is NEVER mentioned in the requirement.
So if this is not consolidated, I believe we could ignore this preference collection.
GCH:
Having travel travelled with people with gluten problem and with vegetarians, this was always a question whenever we booked a restaurant etc. Maybe it's not a big issue for a lot of people, but I cannot speak to that.
I think the form is a good idea and I don't think it's very complicated, as for all the tours with the exception of Pirates, we just need to put a note in the file for iTicketing listing the number and type of special meals gluten-free, vegan, vegetarian.
For pirates it's a bit more complicated as a special meal cost €10.
GCH:
I thought it would be more streamlined with the one food intent which is "is there food?", and the sub-intents determined by what tour is in the slot, with responses as description of the actual food on that particular tour.
I'm the creative guy, you have to decide how it works best with your dialogue engine.
Floating topic
User info
Zbee: Now we just need your personal information to pay for your tickets, OK?
user: Fine. What do you need?
Zbee: What is your name? Just tell me or type it in the form here if it is easier
Edit personal info on screen
ACTION: Zbee shrinks down to reveal the booking form.
user: OK, I've typed in on the screen
Zbee: Great. While you are there you can type in your email address and phone number as well.
user: Sure. Filling in my data.
Zbee: Press next when you have entered your information.
ACTION: go to Entered info is correct
Continue with voice
user: My full name is Peter Rawlings.
Zbee: So, Did I get it right? Peter Rawlings?
user: No
Zbee: I'm sorry. Perhaps you want to type that in the box on the screen labelled name.
ACTION: go to Edit personal info on screen
user: Yes
Zbee: Great. And you email address where we can send your tickets and receipt.
user: My email is joe@me.com [xxx@xxx.xxx](email)
Zbee: So, that is joe@me.com
user: No
Zbee: I'm sorry. Perhaps you'd prefer to type that in the box on the screen labelled email.
ACTION: go to Edit personal info on screen
user: Yes
Zbee: OK {first_name}, now what is your cell number?
user: My current phone number is 123-234-3434 [nnn](phone_number)
Zbee: Ok, so your number is 123-234-3434. Is that correct?
user: No
Zbee: I'm sorry. We could try that again, but perhaps you want to type that in the box on the screen labelled phone number.
ACTION: go to Edit personal info on screen
user: yes.
Send to iT API
[first_name, last_name] (full name) = Y
[xxx@xxx.xxx](email) = Y
[nnn](phone_number) = Y
Zbee: Excellent. Please double check the information. Is it correct?
user choice
Entered info is correct
Zbee: After you accept the booking conditions please press the button PAY WITH CARD and you will be able to enter your card information.
user: I am typing in my card info.
Zbee: When you are done make sure to double check your card information and then press the button PAY.
user: I clicked Pay.
Interface with Stripe
Payment failure
Zbee: I'm sorry. there seems to be a bit of a problem with your card. Could you try again, maybe with a different card if you have one.
Repeated payment failure
Zbee: well, let's give it one last try.
final payment failure
Zbee: Well, that's really unfortunate. Our bank doesn't seem to be able to confirm payment with your cards. But now that you know how easy, and how much fun it is to book tickets with me, just come back and we'll book some new tickets as soon as you've solved this issue with your bank.
user: Thank you, Zbee, I will check with my bank. Good bye.
Zbee: Ok, yes, I look forward to seeing you again soon.
END SESSION
Payment success
Zbee: Congratulations! Your [iTnnn](tour) fully is booked. You'll receive your tickets in your email.
ACTION: go to What else
Change the reservation
user: Can I add two more people?
Zbee: Let me try.
new data sent to iT API
along with old ID number
Entered info is incorrect
No: There's a mistake with my information.
Zbee: Can you edit it on-screen?
ACTION: go to Edit personal info on screen
Ticket quantity
Zbee: So, you want to book for how many people?
user: 2 adults and two children
Zbee: How old are the children
user: 3 and 6
Zbee: OK, the children are aged 3 and 6
Zbee: Any of the adults a Senior?
user: Yes, one senior.
Slots filled:
{senior_ticket} = 1
{adult_ticket} = 1
{older_child_ticket} = 1
{younger_child_ticket} = 1
Zbee: Just a sec and let me make sure we have availability for four people.
Slots sent to iT API:
{tour_choice} = Y
{tour_date_booked} = Y
{tot_pp_qty} = 4
{senior_ticket} = 1
{adult_ticket} = 1
{older_child_ticket} = 1
{younger_child_ticket} = 1
results from iTicketing
Availability = N
Zbee: I am so sorry we don't have any availability that day. Shall I try the next available date
ACTION: go to General date question
Availability = Y
Zbee: Good we have availabilities for all of you on the tour and the date of your choice.
ACTION: go to Ticket price
GCH:
I think this is something that needs to be implemented later. Especially when there are many more than 6 tours.
Need tour on a specific date
We're looking for a tour or excursion on {date}
Tours availabe on specific date
CHECK if tour_choice = [nnn](tour) operates on (date)
Good, on that date we have the dolphin watch and the around the island cruise, and we have tickets for marineland everyday.
Weather queries
user: What is the weather forecast for {next_available_date}?
CHECK weather API for
{next_available_date}
{next_available_date+1}
{next_available_date+2}
Zbee: 80% chance of rain on {next_available_date} overcast and 24 on {next_available_date+1} and beautiful sunny day, 29 degrees on {next_available_date+2}.
user: Can you check the following week?
CHECK weather API for
{specific period}
Zbee: Well the {specific period} looks generally nice weather with little chance of rain.
user: Great lets book next week.
Zbee: Can you give me a specific date and we'll check the availability.
ACTION: go to Determine specific dates
user: Lets book on {next_available_date+2}
Zbee: Okay, let's book you on {next_available_date+2}.
Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
ACTION: go to Ticket quantity and price
user: What is 29 degrees in fahrenheit?
Zbee: 84.2
user: Perfect.
Zbee: Okay, let's book you on {next_available_date+2}.
Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
ACTION: go to Ticket quantity and price
Ticket price
user: So how much will that cost all together?
Send/receive API
Zbee: That will be [xxx euros](total_price) altogether.
Slots filled:
{total_ticket_price} = Y
Zbee: Does anyone in you party require special meals? gluten-free, vegetarian or vegan?
user: No
ACTION: go to User location
user: yes
ACTION: go to alternative food choices
alternative food choices
Zbee: Tell me about your special meals requirements. Does someone in your party require gluten-free, vegetarian or vegan meals?
user: Yes, but we don't need to worry you with that now.
Zbee: It is no worry. If you have special requirements we will be very happy to assist.
user: Not necessary.
ACTION: go to User location
user: Ok.
ACTION: go to Special food required
Special food required
user: A gluten free for my wife and a vegetarian meal for my daughter.
Zbee: So you want 1 vegetarian and 1 Gluten-free meal correct?
If [189] Pirate tour
Zbee: The Pirate adventure dinner does not contain gluten except the bun, and they can serve a vegetarian burger or a tofu vegan burger. The theatre does charge 10 euro for a special meal, so if you wish to order one we will add 10 euros to the bill. Is that alright?
user: Not necessary.
ACTION: go to User location
user: yes, lets add that.
Slots:
{pirate_food_extra} 1 (10)
{total_ticket_price} + 10
Zbee: We have added the special meal to your order. The new total will be 85 euro., alright?
user: Perfect.
ACTION: go to User location
If not [189]
Slots:
tour_no = [nnn]
vegetarian_meal = 1
GF_meal = 1
Zbee: OK, we have added that information to your file.
ACTION: go to User location
User location
DECISION: [iTnnn](tour) pickup = Y/N
[iT71](pickup) slot = N
[iT189](pickup) slot = N
[iT195](pickup) slot = N
[iT131](pickup) slot = Y
[iT237](pickup) slot = N
[iT304](pickup) slot = Y
Pickup = N
Zbee: The [iTnnn](tour) does not include a pickup, so your ticket will clearly state the place and time for the beginning of the tour. You will have to get yourself to the venue, OK?
user: No problem. What is the best way to get there?
Zbee: The time and the venue address will be on your tickets. It will depend on where you are staying, but generally I would recommend you take a taxi or a bus.
ACTION: go to Customer satisfaction
Pickup = Y
Zbee: The price of your tour (iT304, iT131) includes a free pickup from your hotel or from a meeting place convenient to where you are staying, so we'll need to determine the best pickup location for you. Shall we do that now?
user: Sounds good.
Zbee: If you are using your phone at the location where you will want to be picked up, with your permission we can automatically determine your location.
user: No I am not at that location now.
not locatable
Zbee: Do you know where you will be staying on the day of the tour?
user: I havent decided on the hotel yet.
Zbee: That is not a problem. I'll send a map along with your tickets with all the times and pickup locations. So once you know where you are staying you'll be able to find the nearest pickup point.
ACTION: go to Customer satisfaction
user: Sure, the address is 24 Harbour street Palma [address](location)
Zbee: So that is 24 Harbour street Palma, is that correct.
ACTION: check iTicketing/google maps API to determine location found/not found
Zbee: Hmmm, my brain mapping faculties seem to be malfunctioning today, but dont worry, I'll send a map along with your tickets with all the times and pickup locations.
ACTION: go to Customer satisfaction
Zbee: Perfect. We have your [user_location](location).
Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
{tot_pp_qty} = 4
{user_location} = Y
Zbee: Ok, so now lets figure out the best time and place for your pickup.
ACTION: go to Pickup time and place
Subtopic
Pickup time and place
Zbee: So we have confirmed your address in Mallorca as [address](location)
ACTION: Call to iT API
CALCULATE/REQUEST
[meet](pickup) and
[time](pickup) for
[iTnnn](tour) for
[address](location).
Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
{user_location} = Y
{pickup_time&location} = Y
Zbee: The pickup location for [iTnnn](tour) for your [address](location) is [meet](pickup) at [time](pickup).
user: let me get a pen to write down...
Zbee: We are sending you a message/email and the time and place will be very clear. There will also be a link that you should be able to open in your phone's map application.
user: Ok, great.
ACTION: go to Customer satisfaction
user: Yes I am where I want to be picked up
locatable
Zbee: Do you have any privacy concerns about us knowing your location?
user: no
Zbee: If you permit me (click to agree?) we shall try to determine your location automatically.
user: I give you permission (click to agree?) to determine your location automatically
Zbee: That doesnt seem to be working. Lets try that another way.
ACTION: go to not locatable
Zbee: From your phones location we have determined your location as [user_location](location).
Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
{tot_pp_qty} = 4
{user_location} = Y
Zbee: Ok, so now lets figure out the best time and place for your pickup.
ACTION: go to Pickup time and place
Zbee: From the code you used to come to us today it looks that you are at the [xxx](hotel) so we can pick you up there.
user: Perfect.
Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
{tot_pp_qty} = 4
{user_location} = Y
Zbee: Ok, so now lets figure out the best time and place for your pickup.
ACTION: go to Pickup time and place
Pickup time and place
Raul structure
booking conversation (from (raul)
user
Excursion? n°Tickets? Date?
ZBEE
OK: you can book
user
I want to book
ZBEE
Your reservation has been confirmed. Check your email.
Instant-Ticketing out
lapi-ext/1/get-availabilities
[widgetjor (window) src="https://travel.instant-ticketing.com/payment?zbeeBooking Reference=&reservation Reference=&reservation Expiration="
click Button
gateway
Instant-Ticketing back
vacancies,pickup-points
reservation Reference
<HTML>Summary booking and button to pay with card</HTML>
redirect stripe web
Callback payment status OK
Reservation Confirmed* <html> SUCCESS</html>
redirect to <HTML>Summary booking and button to pay with card</HTML>
Callback payment status ko
------------------------ Error generic page HTTP 500 ---------------
Stripe
OK
Update reserve
ERROR-back button in Stripe Web
BACK
renew Stripe code!
OTHER ERROR
ΚΟ - -
Intents
INTENT: Tell user name
Hi, Zeebee, nice to meet you. My name is {Ali Abdul Al Nasri}.
full_name = Ali Abdul Al Nasri
My name is {Ali Abdul Al Nasri}.
full_name = Ali Abdul Al Nasri
INTENT: Ask why user name is needed
Why do you need my name?
What is the reason you need my name?
INTENT: Affirm
Yes
Sure
INTENT: Deny
No
Definitely not!
INTENT: Stop
Stop
Hold it!
INTENT: Continue
Continue
Let's get back where we are
INTENT: Ready to book
I already know exactly which tour I want to book.
INTENT: Tell about your favorite tours
Tell me about your favorite tours.
INTENT: Book tour
Yes I want to book the {Dolphin Watch}
tour_name = Dolphin Watch
INTENT: All Mallorca tours
I want to know about all the tours in Mallorca.
INTENT: Independently on website
It's been fun getting to know you, but I want to book a tour on your website on my own.
INTENT: Show me what else you can do
What else can you do besides telling me about tours?
INTENT: Tell me about specific tour
Tell me about {Dolphin Watch}
tour_name = Dolphin Watch
Details for {Pirates Adventure}
tour_name = Pirates Adventure
Book iT304
I want to book the Island tour.
Slots filled:
tour_choice = iT304
INTENT: I have questions
I still have questions.
I have questions about the {Island Tour}.
tour_choice = Island Tour
INTENT: Want to chitchat
I just want to chat with you, Zbee.
INTENT: good tour for kids
Is this a good tour for kids?
INTENT: Food
Is there a place to eat?
Is there a cafe or restaurant?
Is food provided?
INTENT: Alcohol on cruise
Is alcohol available on the boat?
INTENT: Alcohol served at Pirates
Is alcohol served?
INTENT: What is the boat like?
What is it like on the boat?
INTENT: Is pickup included
Is hotel pick up included in the price of the ticket?
INTENT: best means of transport
What's the best way to get to the tours or excursions?
INTENT: Is pickup included in price
Is hotel pick up included in the price of the ticket?
INTENT: Days of the week
What days of the week does the tour operate?
INTENT: Tell me other tours
Please tell me about your other tours.
Tell me about another tour.
INTENT: Tour duration
How long does it last?
INTENT: Ask for tour price
How much does this tour cost?
How much is it?
INTENT: special food options
Are there other food options available, like vegetarian, vegan, gluten-free?
INTENT: cruise menu
What is the menu?
What food do they serve?
INTENT: Pirate Food menu
What type of food do they serve?
INTENT: not ready to continue
I need time to decide before I finalize the booking.
INTENT: Bye
Thanks so much for all your help. Hope to talk again soon.
INTENT: no special meal
It's Okay, we won't need any special meals
INTENT: Can we swim
Do we get a chance to have a swim?
INTENT: swimsuit
Should I bring my swim suit?
INTENT: snorkels and masks
Are snorkels and masks available on the boat?
INTENT: services on the boat?
What services are available on board the boat?
INTENT: Cancellation policy
What if I book and pay and then can't make it? Will you give me my money back?
What is the company's cancellation policy?
INTENT: next available dates
What are the next available dates?
INTENT: tour operating days
On what days of the week does this tour operate?
INTENT: {next_available_date}
{next_available_date} sounds perfect.
INTENT: {next_available_date+1}
Lets try {next_available_date+1}
INTENT: {next_available_date+2}
Lets try {next_available_date+2}
INTENT: {next_available_date+3}
Lets try {next_available_date+3}
INTENT: Random day
I want to go at the end of next week [random day].
INTENT: tell me about a tour (random)
Tell me about a tour you like.
INTENT: tell me about a tour (random)
Tell me about a tour you like.
INTENT: tell me about another tour
Tell me about another tour.
INTENT: Not any
No adults.
No children.
No seniors.
No infants.
I don't have any.
Not any
INTENT: What is the age range?
So what ages are seniors and children?
Intent: Another meeting point?
Is it possible to be picked up at a different meeting point?
INTENT: Request recommendations unrelated to tours
user: Restaurant recommendation, for sure. Can you recommend the best vegetarian restaurant in town
INTENT: Nothing else right now
Nothing else right now, but thank you so much.
INTENT: Book another tour
Can I book another tour?
INTENT: Specific failed expectations
_____________
_____________
_____________
Fill slot with {failed_expectation}
INTENT: Satisfaction level
user: [1-2-3-4-5]
Fill slot with {satisfaction} = n
INTENT: Final suggestions
_________________________ {improve_suggestion}
Fill slot with {improve_suggestion}
INTENT: No final suggestions
No, I have no suggestions. Thanks
INTENT: Thanks goodbye
Thanks for everything. Bye-bye.
Thank you, Zbee, for everything. Good Bye.
OK, I look forward to hanging out together. Bye.
ACTION: Check tour availability by date
Available
Slot filled:
{tour_suggested_date}
Date is available
Not available
Date unavailable
Loop back
ACTION: Validate tour_date
In reservation period
Slot filled:
{tour_date}
Outside reservation period
Must be positive integer
Loop back
Responses
RESPONSE: Welcome message
Hi! I'm Zeebee. Welcome to the Island of Mallorca. I am so excited you have joined me. I want to help you get acquainted with this wonderful island. But I must warn you, {whispers} you might just fall in love with this place! Anyway, that's what happened to me! This is so exciting!
RESPONSE: What is your name?
So, who do I have the pleasure of talking with today?
RESPONSE: Explicit confirmation of user first name
Hello may I call you [Ali]?
RESPONSE: Graceful bypass user name
That's a nice name. So good to meet you.
RESPONSE: Need your name later
I always like to get to know who I'm talking with, but I really don't need you name now. Of course, if you wish me to book a tour for you later on we will need your personal information then.
RESPONSE: Nice to meet you
It's so nice to meet you, {first_name}.
RESPONSE: How can I help?
Shall I tell you about my favorite tours? Or do you already have a tour in mind you want to book?
RESPONSE: General flow suspension message
It's ok to stop now. Just say do you want to continue and we will resume the flow.
RESPONSE: General flow resume message
Ok. Let's go back where we were.
RESPONSE: Nothing to stop
[To be defined]
RESPONSE: Nothing to continue
[To be defined]
RESPONSE: Zbee's tour descriptions
So, here are my tour picks. Choose a cruise, or you can tour the island, or perhaps you prefer entertainment closer to town. Can you tell me the name or number of the tour or excursion you'd like me to tell you about?
RESPONSE: Let's book it now
Great, let's book {tour_name}.
RESPONSE: Tell tours I can book
I am sorry, that doesn't seem to be one of the tours I can book for you. Shall I describe some of the tours I can book?
RESPONSE: I am in training, so want to book independently? ^
There are lots of different tours and excursions available in Mallorca, but I am currently only trained to describe and book my choice tours. If you like, it's always possible to book tours directly on our website, OK?
RESPONSE: I am in Mallorca
Right now I am in Mallorca and this is my full time job. I'm still learning and need to stay focussed on helping people like you choose and book tickets for local tours and attractions.
RESPONSE: Shall I tell about my favorite tours
Shall I tell you about my favorite tours.
RESPONSE: Which tour shall I describe?
Any specific tour you'd like me to tell you about?
RESPONSE: Let me tell you about {tour_id}
tour_id = iT71
The four hour dolphin watch
tour_id = iT131
The paradise cruise with hotel transfers
tour_id = iT189
The Pirate adventure dinner show.
tour_id = iT195
The paradise cruise
tour_id = iT237
booking tickets for the Marineland theme park
tour_id = iT304
The tour around the island by bus, train, boat and tram.
RESPONSE: Describe tour
tour_id = iT71
Watching the dolphins is an experience you'll remember for the rest of your life. The boat sails along the coastline then heads out to high seas. You will be amazed as you observe these animals in their natural environment. Dolphins are extremely sociable, they love to swim in the bow wave of the ship and they surprise passengers with their jumps. After that you will sail into a beautiful cove for lunch and a swim. On the way back you'll have another chance to swim, this time in the most awesome clear blue waters.
tour_id = iT131
The paradise cruise is a truly amazing trip on board an exclusive triple-decker catamaran. After anchoring in a beautiful bay you might want to take a refreshing swim in a paradise of clear waters and enjoy the submarine vision through the bottom of the boat. Then you'll witness the remarkable southwest coast and the Natural Marine Reserve around the Malgrat Islands as you cruise to Port Andratch, one of the most exclusive harbours of Mallorca. Spend a truly incredible day relaxing and cruising around our spectacular island. This tour includes a transfer from where you are staying.
tour_id = iT189
The Pirates Adventure is a magical journey in a time when pirates ruled the seven seas! An amazing night of entertainment for the whole family and an unforgettable experience. You will live an authentic adventure with acrobats who will amaze you, and dancers who will dazzle you. Feel the heat of the fire, hear the sound of swords and look up as pirates fly overhead! This award-winning show has been enjoyed by millions, it starts at 6:00 p.m and lasts about two hours.
tour_id = iT195
The paradise cruise is a truly amazing trip on board an exclusive triple-decker catamaran. After anchoring in a beautiful bay you might want to take a refreshing swim in a paradise of clear waters and enjoy the submarine vision through the bottom of the boat. Then you'll witness the remarkable southwest coast and the Natural Marine Reserve around the Malgrat Islands as you cruise to Port Andratch, one of the most exclusive harbours of Mallorca. Spend a truly incredible day relaxing and cruising around our spectacular island. This tour does not include transfer from where you are staying.
tour_id = iT237
Marineland is a complete theme park located in a magical location housing a large collection of dolphins and fish, sea lions, exotic birds, reptiles and so much more. There is also a serviced picnic area and a beach for swimming.
tour_id = iT304
This very special tour takes you all around the island on an all-day trip. After an hour travelling on the famous century old wooden railway that connects Palma with Soyer and a vintage tram from Soyer to the harbour, we continue on a spectacular boat trip along cliffs and impressive landscapes to dock at Sa Calobra and Torrent de Pareis. There, we will have 2 hours to sightsee, have lunch and even swim if you wish. Lunch is not included in the price of the ticket. You can bring your own picnic, or choose from one of the exotic eateries in the town. After lunch, we continue a panoramic bus trip and after a stop in the Natural Park we head home.
RESPONSE: Are you ready to book or any question?
So, are we ready to book {tour_name}, or do you have some questions about this tour? Or shall I tell you about one of our other tours?
RESPONSE: Tell me about other tours
So you would like me to tell you about one of our other available tours?
RESPONSE: good tour for kids
Yes they love it. There is plenty to explore.
RESPONSE: Island tour lunch
There are different options for buying your lunch during our stay in Sa Calobra, or you can take some food along and enjoy a picnic.
RESPONSE: Marineland lunch
Yes, there are self-service restaurants and a pizzeria and there is also a picnic area if you prefer to bring your own food.
RESPONSE: Meal included
A meal is included in the price
RESPONSE: Cruise menu
It is a fixed menu. They prepare a beautiful buffet with pasta Bolognese and salads.
RESPONSE: Pirates Adventure Dinner
It is a dinner show. They serve you dinner during the evening entertainment.
RESPONSE: Pirates menu
All tickets include a meal of roast chicken, potato wedges and corn on the cob and an ice cream cup and water or soft drinks
RESPONSE: Special meal note
Yes, there are options, but we need to make a note of them when we finalize your order.
RESPONSE: Pirates special meal
Yes, they can provide a vegetarian burger instead of the chicken, and a tofu burger if you are vegan. Zbee: The meal is gluten free all except the bread roll, which is served separately. The theatre charges 10 euros for a special meal.
RESPONSE: come back soon
I understand. When you are ready just come back and tell me which tour you want to book and we will do it.
RESPONSE: Bye
Yes, hope to see you soon. Bye.
RESPONSE: Alcohol Pirates
There are bars inside the theatre selling alcoholic drinks and there is a price list and menu on every table.
RESPONSE: Alcohol served
There are two bars on board serving drinks. We recommend our delicious sangria.
RESPONSE: Describe type of boat
tour_id IN [iT71, iT131, iT195]
It is a glass bottom boat so you can watch the underwater marine life. The waters are crystal and vision is unequaled.
tour_id = iT189
Actually it is a theatre not a boat, but once it starts you will really believe you are on the Seven Seas with the pirates.
else
[TO BE DEFINED]
RESPONSE: Describe swimming
tour_id IN [iT71, iT131, iT195, IT304]
Yes, there is swimming in the crystal clear sea is a real treat.
tour_id = iT237
Yes, you can swim at Marineland. There is a beach and a children's pool for the younger ones.
else
[TO BE DEFINED]
RESPONSE: Bring swimsuit
tour_id IN [iT71, iT131, iT195, iT237, IT304]
Do not forget your towel and swimsuit!
else
[TO BE DEFINED]
RESPONSE: snorkels and masks
tour_id IN [iT71, iT131, iT195]
Snorkels and masks are available for rent, but remember, we do not take cash on board.
else
[TO BE DEFINED]
RESPONSE: services on the boat
[iT195]
[iT131]
[iT71]
There are places to sightsee and places to relax. There are toilets of course, and a bar. You can also rent a mask and snorkel
RESPONSE: Pickup is included in the price
[iT131](pickup) = Y
[iT304](pickup) = Y
The price of this tour includes a free pickup from your hotel or from a meeting place convenient to where you are staying.
RESPONSE: Pickup is not included in the price
[iT71](pickup) = N
[iT189](pickup) = N
[iT195](pickup) = N
[iT237](pickup) = N
The price of this tour does not include a pickup, so your ticket will clearly state the place and time for the beginning of the tour.
RESPONSE: Getting to tours on your own
The time and the venue address will be on your tickets. It will depend on where you are staying, but generally I would recommend you take a taxi or a bus.
RESPONSE: Describe tour operating dates
[iT71](Operating_days): slot = M,W,F
[iT189](Operating_days): slot = M,W,F
[iT131](Operating_days): slot = "Several days a week. We'll check availability when we book."
[iT189](Operating_days): slot = "Several days a week. We'll check availability when we book."
[iT237](Operating_days): slot = "everyday"
[iT304](Operating_days): slot = "T,Th,SA"
That [tour] operates on (Operating_days).
RESPONSE: General duration question
[iT71](Duration): slot = "4 hours"
[iT189](Duration): slot = "show is 6pm to 8, but it is best to arrive at 5"
[iT131](Duration): slot = "4 hours"
[iT195](Duration): slot = "4 hours"
[iT237](Duration): slot = "It is open all day."
[iT304](Duration): slot = "It is an all-day trip."
That [tour] is (Duration).
RESPONSE: Describe tour price
tour_id = iT71
On the 4 hour Dolphin watch, Adults are 45 euros, seniors 40 euros and children 4 to 12 are 22.5 euros. Infants under 4 are free.
tour_id = iT131
On the Paradise tour including pick up and dropoff at your hotel adults are 49 euros, children 3 to 10, 30 euros. Infants 2 and under are free.
tour_id = iT189
On the Pirates adventure an adult ticket is 39.99 euros and children aged 2 to 12 are 24.99 euros. Infants under 2 are free but they need a ticket but do not have an allocated seat or a meal.
tour_id = iT195
On the Paradise tour without hotel transfers adults, everyone over 12 years, pay 39 euros, children 3 to 11 years pay 18.50 euros and infants from 0 to 2 are free.
tour_id = iT237
Adult tickets for Marineland cost 27 euros, tickets for seniors over 65 and for children aged 5 to 10 cost 18 euros and tickets for infants aged 3 and 4 cost 12 euros. Babies under the age of 3 are free of charge.
tour_id = iT304
Adult tickets for the Island tour are 83 euros, children 4 to 12 are 41.50 euros and Infants 3 and under are free.
RESPONSE: Cancellation policy
tour_id IN [iT71, iT131, iT195]
We provide a 100% refund of the total reservation if you cancel more than 3 days before the tour. If it is less than 3 days then it is 20% of the total reservation. Of course, if you are sick and have a doctor's certificate then there is always a full refund.
tour_id = iT189
These tickets are non-refundable after purchase. Sometimes the theater is able to switch tickets to another date, but this is not always possible.
tour_id = iT237
Tickets are non-refundable. But we can try helping if you run into a serious problem.
tour_id = iT304
I have no information about cancellation policy for this tour, but of course if you run into unforeseen circumstances we can try to help.
RESPONSE: Choose date for specific tour
{next_available_date}
The next available date for this tour is {next_available_date}. Does that work for you?
{next_available_date+1}
The next available date after that is {next_available_date+1}. Is that better for you?
{next_available_date+2}
Okay, the one after that is {next_available_date+2}.
{next_available_date+3}
Okay, that would be {next_available_date+2}. Is that a good day for you?
RESPONSE: What dates are you looking at?
Do you have a specific date in mind?
RESPONSE: Check specific date and tour
Let check if your tour operates on that date.
RESPONSE: Confirming tour choice
You have chosen {[nnn](tour)}, am I right? So, are we ready to book and pay for it?
RESPONSE: How many adults
How many adults in your group?
RESPONSE: How many children
How many children in your group?
RESPONSE: Age range definition
tour_id = iT71
{senior_ticket} = > 65
{adult_ticket} = 13-64
{child_ticket} 4-12
{infant<4} = not necessary
On the 4 hour Dolphin watch, we have discounted tickets for Seniors, over 65, those over 12 are Adults and children are 4 to 12. and we dont need to reserve a ticket for those under 4.
tour_id = iT131
{adult_ticket} = >10
{child_ticket} 3-10
{infant<3} = not necessary
On the Paradise tour including pick up and dropoff at your hotel everyone over 10 years needs an adult ticket, and children tickets are for children 3 to 10 and we dont need to reserve a ticket for those under 2.
tour_id = iT189
{adult_ticket} = >12
{child_ticket} 2-12
{younger_child_ticket} = 1
{infant<2} = ticket is necessary
For the Pirates adventure dinner show we have adult tickets and children's tickets for those aged 2 to 12. Infants under 2 are free but they need a ticket.
tour_id = iT195
{adult_ticket} = >10
{child_ticket} 3-10
{infant<3} = not necessary
On the Paradise tour without hotel transfers everyone over 10 years needs an adult ticket, and children tickets are for children 3 to 10, and we dont need to reserve a ticket for those under 2.
tour_id = iT237
{senior_ticket} = > 65
{adult_ticket} = 13-64
{older_child_ticket} = 5-10
{younger_child_ticket} = 3-4
{infant<3} = not necessary
For Marineland we have special prices for Seniors over 65, for older children aged 5 to 10 and younger children aged 3 and 4. and we dont need to reserve a ticket for those under 3.
tour_id = iT304
{adult_ticket} = >12
{child_ticket} 4-12
{younger_child_ticket} = 1
{infant<3} = not necessary
For the Island tour we have adult tickets and children's tickets for those aged 4 to 12, and we dont need to reserve a ticket for those under 3.
RESPONSE: How many seniors
How many seniors?
RESPONSE: How many infants
How many infants?
RESPONSE: Availabilities confirmed
Great! We have places for all of you on the tour that day.
RESPONSE: Total price is...
That will be {total_price} euros altogether.
RESPONSE: Any special meals requirements
Does anyone in you party require special meals? gluten-free, vegetarian or vegan?
RESPONSE: You are at hotel XYZ...^
You are at hotel XYZ...
RESPONSE: Let's meet at {}.^
Let's meet at {}.
RESPONSE: Let's sort out best time and place for pickup
Let's sort out the best time and place for pickup
RESPONSE: No availability that day, try next available date?
I am so sorry we don't have any availability that day. Shall I try the next available date
RESPONSE: Next available date is ...
The next available date is ...
RESPONSE: No more available date
I am so sorry we don't have any availability dates for that tour.
RESPONSE: The tour is available on ...
The tour is available on ...
RESPONSE: Date unavailable
I am so sorry that date is not available.
RESPONSE: Date is available
That date is available.
RESPONSE: Sorry, that's it for now, please come back
I am sorry I wasn't able to find you the right tour on the right day. I suppose that's it for today. Perhaps you'll come back again when you want to book a different tour or different dates.
RESPONSE: Check other tours on that date?
If that's the date you want shall we see if there's vacancy on any other tours on that date?
RESPONSE: We have found one on {date}
Great, I found one on {date}
RESPONSE: Proceed to book it?
Shall we book it?
RESPONSE: What else can I tell you about that tour?
What else can I tell you about that tour?
RESPONSE: Will send message with time and place
We are sending you a message/email and the time and place will be very clear. There will also be a link that you should be able to open in your phone's map application.
RESPONSE: Meeting point is {tour_suggested_meeting_point}.
I found a meeting point for you. It is {tour_suggested_meeting_point}. Is it okay?
RESPONSE: Anything else?
Is there anything else I can help you with before we go?
RESPONSE: See you on the tour
I look forward to seeing you on the tour. Make sure you have your phone with you, otherwise I'll have a bit of trouble showing up.
RESPONSE: Don't forget
And don't forget your swim suits for all the tours except the Pirates Adventure. And when you go to the Pirate Adventure remember to get there early at 5:00 p.m. to get your seats and to enjoy the pre-show entertainment.
RESPONSE: Thanks. Bye for now.
Oh, thank you so much. Bye for now.
RESPONSE: Final suggestions
And lastly, do you have any suggestions on ways I can improve?
Can you give me any specific pointers on how I might be better in the future?
RESPONSE: Satisfaction level
Could you rate your general satisfaction with your experience with me today, with a number on scale of 1 to 5, where 1 is very unsatisfied and 5 is very satisfied?
RESPONSE: We will review this
We will review this so I can be better in my next conversation.
RESPONSE: I'm sorry I was unable to satisfy your requirements.
I'm sorry I was unable to satisfy your requirements.
RESPONSE: Thank you for the compliment
Thank you, that's so nice to hear!
RESPONSE: Did I provide the service you required?
So, before we say goodbye, may I ask if I was able to provide you with what you were looking for today? A simple yes or no would be great.
RESPONSE: Specific failed expectations
Okay, so may I ask how was I specifically unable to meet your expectations?
RESPONSE: Ask traveler name
May I have your full name please?
RESPONSE: I can't recognize your name.
My bad, I am still learning to recognize human names.
RESPONSE: Confirm traveler name
So, Did I get it right? {traveler_name}?
RESPONSE: Please type traveler name
I'm sorry. Would you mind if I asked you to type your full name in the space provided on the screen?
RESPONSE: Ask traveler email
And we will need your email address to send your tickets and receipt.
RESPONSE: I can't recognize your email.
That's a fail. I am still learning to recognize email addresses.
RESPONSE: Confirm traveler email
So, Did I get it right? {traveler_email}?
RESPONSE: Please type traveler email
Perhaps you would type your email address for me in the proper place on the screen.
RESPONSE: Ask traveler phone
May I have your cell number please?
RESPONSE: I can't recognize your phone.
I'm sorry, I thought I was getting better at recognizing phone numbers.
RESPONSE: Confirm traveler phone
So, Did I get it right? {traveler_phone}?
RESPONSE: Please type traveler phone
I'm sorry. Would you mind if I asked you to type your phone number in the space provided on the screen?
RESPONSE: Invalid number for adult
Please provide a valid number. You must have at least one adult for the tour.
RESPONSE: Invalid number for child
Please provide a valid number for child.
RESPONSE: Invalid number for senior
Please provide a valid number for senior.
RESPONSE: Invalid number for infant
Please provide a valid number for infant.
ACTION:
Check next available date by tour
Available date is found
Slot filled:
{tour_suggested_date}
Next available date is ...
No more available date
No more available date
ACTION: Validate num_adult
Is positive integer
Slot filled:
{num_adult}
else
Invalid number of adult
Loop back
ACTION:
Pick a random date by tour
A random date is available
Slot filled:
{tour_suggested_date}
The tour is available at ...
No more available date
No more available date
ACTION: Validate num_senior
Is Non-negative integer
Slot filled:
{num_senior}
else
Invalid number of senior
Loop back
ACTION: Validate num_infant
Is Non-negative integer
Slot filled:
{num_infant}
else
Invalid number of infant
Loop back
If a tour doesn't offer senior tickets, the system sets num_senior = 0 at the moment when the tour is determined.
In this case, the form will skip this slot.
If a tour doesn't offer infant tickets, the system sets num_senior = 0 at the moment when the tour is determined.
In this case, the form will skip this slot.
FORM: Tour Meeting Point Form
Form Loop
tour_meeting_point
Meeting point is {tour_suggested_meeting_point}
affirm
Will send message with time and place
deny
Slots filled:
{tour_suggested_meeting_point}
Loop back
Another meeting point?
Slots filled:
{tour_suggested_meeting_point}
Loop back
Upon Event
Active
Stop
General flow suspension message
Inactive
Inactive
Continue
General flow resume message
Active
Complete
Traveler Name Form
User co-ordinate is hardcoded for now.
This is a temporary workaround of not having user location detected.
Will sort this out later.
Depends on what is returned from iTicketing API.
Seems like the place and time are concatenated together from iTicketing.
So we can only show the string all at once.
Simon:
I have simplify the dialogue and revamp this as a form.
There is assumption, please note.
Please check FORM: Tour Pickup Form
Simon:
I have simplified the dialogue and revamped this as a form.
The form will ask slot on by one.
This is the easiest way for us now.
Please check FORM: Tour Detail Form
By unsetting the tour_date, the form will ask this information again if the user enters the form again.
GCH: This is just the name of the tour and photo poster. After seeing the poster the user may say "next" before hearing the description.
ACTION: Validate number of descriptions
if
first time
tell me about a tour (random)
Let me tell you about {tour_id}
Affirm
Describe Tour
Tell me other tours
not first time
Slots filled:
tour_described? [iT304](Y/N)
tour_described? [iT71 ](Y/N)
tour_described? [iT189(Y/N)
tour_described? [iT195](Y/N)
tour_described? [iT131] (Y/N)
tour_described? [iT237](Y/N)
tour_described? [iT304](Y/N)
Let me tell you about {tour_id}
Affirm
Describe Tour
Tell me other tours
Tell me other tours
Load metadata for the tour and set into tour_info slot
FORM: Tour Query Form
Form Loop
tour_name
Which tour have you chosen?
Pattern: tour_name
tell me about a tour (random)
Let me tell you about {tour_id}
Await user to affirm tour suggestion
Upon Event
Active
Stop
General flow suspension message
Inactive
Inactive
Continue
General flow resume message
Active
Completed
Describe Tour
Are you ready to book or any question?
Await user to affirm to book tour
Await user to affirm tour suggestion
Affirm
Describe Tour
Are you ready to book or any question?
Await user to affirm to book tour
tell me about a tour (random)
Let me tell you about {tour_id}
Await user to affirm tour suggestion
Tell me other tours
Let me tell you about {tour_id}
Await user to affirm tour suggestion
Not sure how to do it now?
Maybe just random it first.
ACTION:
Suggest a tour
Slot filled: {suggested_tour_info}
FORM: Tour Book Form
Form Loop
tour_name
Which tour shall I describe?
Pattern: tour_name
Tell me about specific tour
{tour_name} is set
Describe Tour
Are you ready to book or any question?
Await user to affirm to book tour
{tour_name} is not set
Tour Query Form
tell me about a tour (random)
Let me tell you about {tour_id}
Await user to affirm tour suggestion
Upon Event
Active
Stop
General flow suspension message
Inactive
Inactive
Continue
General flow resume message
Active
Completed
Tour Detail Form
What happens next?
Delete this block when you are done
Await user try booking with next available date
Affirm
We have found one on {date}
Proceed to book it?
Await user to affirm with the tour on next available date
Deny
Check other tours on that date?
Affirm
Deny
Sorry, that's it for now, please come back
ACTION: Check tour vacancies
Available seats
Availabilities confirmed
Total price is...
No pickup options
Let's meet at {tour_meeting_point}.
Traveler Name Form
Has pickup options
You are at hotel XYZ...
Let's sort out best time and place for pickup
Tour Meeting Point Form
Not enough seats
Slots unset:
{tour_date}
No availability that day, try next available date?
Await user try booking with next available date
Await user to affirm with the tour on next available date
Affirm
Traveler Detail Form
Deny
Sorry, that's it for now, please come back
TODO:
Bridge Alternative food choices...
If time is not enough, I really suggest to omit this path.
ACTION:
Get best meeting point
No pickup options
Slots filled:
{tour_meeting_point}
Has pickup options
Slots filled:
{tour_suggested_meeting_point}
FORM: Traveler Name Form
Form Loop
traveler_name
Ask traveler name
Pattern: human name
{traveler_name} is not set
I can't recognize your name.
Loop Back
traveler_name_confirm
Confirm traveler name
affirm
deny
traveler_name_widget
Please type traveler name
Entire string
Upon Event
Active
Stop
General flow suspension message
Inactive
Inactive
Continue
General flow resume message
Active
Complete
Traveler Email Form
ACTION: Validate traveler_name
Recognised name
(Ali Adbul Al Nasri)
Slot filled: {traveler_name} = Ali Adbul Al Nasri
Unrecognised name
(&^%$#)
Slot unset: {traveler_name}
[Need help]
GCH:
If the user says "oh no I want to book something after all", it will go back to the conversation above?
Simon:
If the user gives up here, I think Zbee simply resets the form. So next time when the user comes back, she will need to start again.
Zbee has tried her best to suggest alternatives but the user simply doesn't want that suggestion. So I think here Zbee should reset the form.
Anything else?
Request recommendations unrelated to tours
Nothing else right now
Did I provide the service you required?
Affirm
Thank you for the compliment
Deny
I'm sorry I was unable to satisfy your requirements.
Specific failed expectations
Specific failed expectations
Fill slot with {failed_expectation}
We will review this
Book another tour
Satisfaction level
Satisfaction level
Fill slot with {satisfaction} = n
Final suggestions
No final suggestions
Final suggestions
Fill slot with {improve_suggestion}
Thanks. Bye for now.
Thanks goodbye
See you on the tour
Don't forget
ACTION: Affirm traveler name
Slot filled: {traveler_name_confirm} = True
Slot filled: {traveler_name_widget} = {traveler_name}
Input
(Ali Adbul Al Nasri)
Slot filled: {traveler_name_widget} = Ali Adbul Al Nasri
Slot filled: {traveler_name} = Ali Adbul Al Nasri
ACTION: Deny traveler name
Slot filled: {traveler_name_confirm} = False
FORM: Traveler Email Form
Form Loop
traveler_name
Ask traveler email
Pattern: email address
{traveler_email} is not set
I can't recognize your email
Loop Back
traveler_email_confirm
Confirm traveler email
affirm
deny
traveler_name_widget
Please type traveler email
Entire string
Upon Event
Active
Stop
General flow suspension message
Inactive
Inactive
Continue
General flow resume message
Active
Complete
Traveler Phone Form
ACTION: Set traveler name in info
Name
(Ali Adbul Al Nasri)
Slot filled: {traveler_info.full_name} = Ali Adbul Al Nasri
Slots filled: {traveler_info.first_name} = Ali Adbul Al
Slots filled: {traveler_info.last_name} = Nasri
QUESTIONS
These seem overlapping responses? Which ones should be deleted?
Is this the intention you have in mind?
"Is it possible to be picked up at a different meeting point?"
ACTION: Validate traveler_email
Recognised email
(amit@beingai.com)
Slot filled: {traveler_email} = amit@beingai.com
Unrecognised email
Slot unset: {traveler_email}
ACTION: Affirm traveler email
Slot filled: {traveler_email_confirm} = True
Slot filled: {traveler_email_widget} = {traveler_email}
Input
(amit@beingai.com)
Slot filled: {traveler_name_widget} = amit@beingai.com
Slot filled: {traveler_email} = amit@beingai.com
ACTION: Deny traveler email
Slot filled: {traveler_email_confirm} = False
ACTION: Set traveler email in info
Email
(amit@beingai.com)
Slot filled: {traveler_info.email} = amit@beingai.com
FORM: Traveler Phone Form
Form Loop
traveler_phone
Ask traveler phone
Pattern: phone number
{traveler_phone} is not set
I can't recognize your phone
Loop Back
traveler_phone_confirm
Confirm traveler phone
affirm
deny
traveler_phone_widget
Please type traveler phone
Entire string
Upon Event
Active
Stop
General flow suspension message
Inactive
Inactive
Continue
General flow resume message
Active
Complete
(?)
ACTION: Validate traveler_phone
Recognised phone
(0123456789)
Slot filled: {traveler_phone} = 0123456789
Unrecognised phone
Slot unset: {traveler_phone}
ACTION: Affirm traveler phone
Slot filled: {traveler_phone_confirm} = True
Slot filled: {traveler_phone_widget} = {traveler_phone}
ACTION: Deny traveler phone
Slot filled: {traveler_phone_confirm} = False
ACTION: Set traveler phone in info
Phone
(0123456789)
Slot filled: {traveler_info.phone} = 0123456789
FORM: Special Meal Requirement Form
Form Loop
special_meal_needed
Any special meals requirements
Affirm
Slot filled:
{special_meal_needed} = True
ACTION: go to alternative food choices
Deny
Slot filled:
{special_meal_needed} = False
Tour Meeting Point Form
Upon Event
Active
Stop
General flow suspension message
Inactive
Inactive
Continue
General flow resume message
Active
Complete
Traveler Email Form
Go back to Traveler Detail Form to trigger the actions upon completion
TODO:
Implement form here...
ACTION: Validate traveler_phone_widget
Input
(0123456789)
Slot filled: {traveler_phone_widget} = 0123456789
Slot filled: {traveler_phone} = 0123456789
ACTION:
Get next meeting point
Slots filled:
{tour_suggested_meeting_point}
Now simply loop over the list
(?)
Zbee: Excellent. Please double check the information. Is it correct?
user choice
Entered info is correct
Zbee: After you accept the booking conditions please press the button PAY WITH CARD and you will be able to enter your card information.
user: I am typing in my card info.
Zbee: When you are done make sure to double check your card information and then press the button PAY.
user: I clicked Pay.
Interface with Stripe
Payment failure
Zbee: I'm sorry. there seems to be a bit of a problem with your card. Could you try again, maybe with a different card if you have one.
Repeated payment failure
Zbee: well, let's give it one last try.
final payment failure
Zbee: Well, that's really unfortunate. Our bank doesn't seem to be able to confirm payment with your cards. But now that you know how easy, and how much fun it is to book tickets with me, just come back and we'll book some new tickets as soon as you've solved this issue with your bank.
user: Thank you, Zbee, I will check with my bank. Good bye.
Zbee: Ok, yes, I look forward to seeing you again soon.
END SESSION
Payment success
Zbee: Congratulations! Your [iTnnn](tour) fully is booked. You'll receive your tickets in your email.
ACTION: go to What else
Change the reservation
user: Can I add two more people?
Zbee: Let me try.
new data sent to iT API
along with old ID number
Entered info is incorrect
No: There's a mistake with my information.
Zbee: Can you edit it on-screen?
ACTION: go to Edit personal info on screen