Now simply loop over the list
ACTION:
Get next meeting point
ACTION: Validate traveler_phone_widget
Input
(0123456789)
Slot filled: {traveler_phone_widget} = 0123456789
TODO:
Implement form here...
Go back to Traveler Detail Form to trigger the actions upon completion
FORM: Special Meal Requirement Form
Set special meal requirement in info
special_meal_needed
Any special meals requirements
Slot filled:
{special_meal_needed} = False
Slot filled:
{special_meal_needed} = True
ACTION: Set traveler phone in info
Phone
(0123456789)
Slot filled: {traveler_info.phone} = 0123456789
ACTION: Deny traveler phone
Slot filled: {traveler_phone_confirm} = False
ACTION: Affirm traveler phone
Slot filled: {traveler_phone_confirm} = True
Slot filled: {traveler_phone_widget} = {traveler_phone}
ACTION: Validate traveler_phone
Unrecognised phone
Slot unset: {traveler_phone}
Recognised phone
(0123456789)
Slot filled: {traveler_phone} = 0123456789
FORM: Traveler Phone Form
Set traveler phone in info
(?)
traveler_phone_widget
Please type traveler phone
Validate traveler_phone_widget
traveler_phone_confirm
Confirm traveler phone
Deny traveler phone
Affirm traveler phone
traveler_phone
Ask traveler phone
Pattern: phone number
Validate traveler_phone
{traveler_phone} is not set
I can't recognize your phone
ACTION: Set traveler email in info
Email
(amit@beingai.com)
Slot filled: {traveler_info.email} = amit@beingai.com
ACTION: Deny traveler email
Slot filled: {traveler_email_confirm} = False
ACTION: Affirm traveler email
Slot filled: {traveler_email_confirm} = True
Slot filled: {traveler_email_widget} = {traveler_email}
ACTION: Validate traveler_email_widget
Input
(amit@beingai.com)
Slot filled: {traveler_name_widget} = amit@beingai.com
ACTION: Validate traveler_email
Unrecognised email
Slot unset: {traveler_email}
Recognised email
(amit@beingai.com)
Slot filled: {traveler_email} = amit@beingai.com
Is this the intention you have in mind?
"Is it possible to be picked up at a different meeting point?"
@Geoffrey Carr-Harris
Yes. The intention is to have Zbee suggest the next available meeting point if there is one.
Since there is no way to show all the meeting points all at once, I suggest we simply let the user go through NEXT NEXT NEXT approach, showing one each time.
QUESTIONS
These seem overlapping responses? Which ones should be deleted?
These seem overlapping responses? Which ones should be deleted?
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
FORM: Traveler Email Form
Set traveler email in info
Traveler Phone Form
Please type traveler email
Validate traveler_email_widget
traveler_email_confirm
Confirm traveler email
Deny traveler email
Affirm traveler email
Ask traveler email
Pattern: email address
Validate traveler_email
{traveler_email} is not set
I can't recognize your email
ACTION: Deny traveler name
Slot filled: {traveler_name_confirm} = False
ACTION: Affirm traveler name
Slot filled: {traveler_name_confirm} = True
Slot filled: {traveler_name_widget} = {traveler_name}
ACTION: Validate traveler_name_widget
Input
(Ali Adbul Al Nasri)
Slot filled: {traveler_name_widget} = Ali Adbul Al Nasri
Thanks. Bye for now.
Thanks goodbye
See you on the tour
Don't forget
Satisfaction level
Final suggestions
No final suggestions
Anything else?
Book another tour
Nothing else right now
Did I provide the service you required?
Specific failed expectations
We will review this
Thank you for the compliment
Request recommendations unrelated to tours
[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.
I guess I should understand how you're inactive state reacts to the next utterance
Actually I think we should reset the form here.
As the user doesn't want to continue.
Tagged with [Need help]
Need to address this with @Jeanne Lim @Geoffrey Carr-Harris .
good
ACTION: Validate traveler_name
Unrecognised name
(&^%$#)
Slot unset: {traveler_name}
Recognised name
(Ali Adbul Al Nasri)
Slot filled: {traveler_name} = Ali Adbul Al Nasri
FORM: Traveler Name Form
Set traveler name in info
Traveler Email Form
traveler_name_widget
Please type traveler name
Entire string
Validate traveler_name_widget
traveler_name_confirm
Confirm traveler name
Deny traveler name
Affirm traveler name
traveler_name
Ask traveler name
Pattern: human name
Validate traveler_name
{traveler_name} is not set
I can't recognize your name.
Loop Back
ACTION:
Get best meeting point
Slots filled:
{tour_meeting_point}
TODO:
Bridge Alternative food choices...
If time is not enough, I really suggest to omit this path.
Traveler Detail Form
ACTION: Check tour vacancies
Not enough seats
Slots unset:
{tour_date}
No availability that day, try next available date?
Available seats
Availabilities confirmed
Total price is...
Get best meeting point
Has pickup options
Let's sort out best time and place for pickup
Tour Meeting Point Form
No pickup options
Let's meet at {tour_meeting_point}.
Await user try booking with next available date
Check other tours on that date?
Sorry, that's it for now, please come back
Check next available date by tour
We have found one on {date}
Proceed to book it?
Await user to affirm with the tour on next available date
What happens next?
Delete this block when you are done
FORM: Tour Book Form
Tour Detail Form
Which tour shall I describe?
Tell me about specific tour
{tour_name} is not set
{tour_name} is set
ACTION:
Suggest a tour
Slot filled: {suggested_tour_info}
Not sure how to do it now?
Maybe just random it first.
FORM: Tour Query Form
Completed
tour_name
Which tour have you chosen?
Pattern: tour_name
Validate tour_name
Load metadata for the tour and set into tour_info slot
ACTION: Validate number of descriptions
not first time
ACTION: Pick another tour description
The system will pick a tour (ideally not being described before) and deliver that tour description.
This is encapsulated inside an Action Class.
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)
first time
tell me about a tour (random)
Describe Tour
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.
By unsetting the tour_date, the form will ask this information again if the user enters the form again.
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
Simon:
I have simplify the dialogue and revamp this as a form.
There is assumption, please note.
Please check FORM: Tour Pickup Form
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.
User co-ordinate is hardcoded for now.
This is a temporary workaround of not having user location detected.
Will sort this out later.
FORM: Tour Meeting Point Form
Traveler Name Form
tour_meeting_point
Meeting point is {tour_suggested_meeting_point}
Another meeting point?
deny
Get next meeting point
Slots filled:
{tour_suggested_meeting_point}
affirm
Will send message with time and place
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.
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.
ACTION: Validate num_infant
Invalid number of infant
Slot filled:
{num_infant}
ACTION: Validate num_senior
Invalid number of senior
Slot filled:
{num_senior}
ACTION:
Pick a random date by tour
A random date is available
The tour is available at ...
ACTION: Validate num_adult
Invalid number of adult
Is positive integer
Slot filled:
{num_adult}
ACTION:
Check next available date by tour
No more available date
Available date is found
Next available date is ...
Responses
RESPONSE: Invalid number for infant
Please provide a valid number for infant.
RESPONSE: Invalid number for senior
Please provide a valid number for senior.
RESPONSE: Invalid number for child
Please provide a valid number for child.
RESPONSE: Invalid number for adult
Please provide a valid number. You must have at least one adult for the tour.
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: Confirm traveler phone
So, Did I get it right? {traveler_phone}?
RESPONSE: I can't recognize your phone.
I'm sorry, I thought I was getting better at recognizing phone numbers.
RESPONSE: Ask traveler phone
May I have your cell number please?
RESPONSE: Please type traveler email
Perhaps you would type your email address for me in the proper place on the screen.
RESPONSE: Confirm traveler email
So, Did I get it right? {traveler_email}?
RESPONSE: I can't recognize your email.
That's a fail. I am still learning to recognize email addresses.
RESPONSE: Ask traveler email
And we will need your email address to send your tickets and receipt.
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: Confirm traveler name
So, Did I get it right? {traveler_name}?
RESPONSE: I can't recognize your name.
My bad, I am still learning to recognize human names.
RESPONSE: Ask traveler name
May I have your full name please?
RESPONSE: Specific failed expectations
Okay, so may I ask how was I specifically unable to meet your expectations?
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: Thank you for the compliment
Thank you, that's so nice to hear!
RESPONSE: I'm sorry I was unable to satisfy your requirements.
I'm sorry I was unable to satisfy your requirements.
RESPONSE: We will review this
We will review this so I can be better in my next conversation.
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: Final suggestions
Can you give me any specific pointers on how I might be better in the future?
And lastly, do you have any suggestions on ways I can improve?
RESPONSE: Thanks. Bye for now.
Oh, thank you so much. Bye for now.
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: 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: Anything else?
Is there anything else I can help you with before we go?
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: 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: What else can I tell you about that tour?
What else can I tell you about that tour?
RESPONSE: Proceed to book it?
Shall we book it?
RESPONSE: We have found one on {date}
Great, I found one on {date}
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: 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: Date is available
That date is available.
RESPONSE: Date unavailable
I am so sorry that date is not available.
RESPONSE: The tour is available on ...
The tour is available on ...
RESPONSE: No more available date
I am so sorry we don't have any availability dates for that tour.
RESPONSE: Next available date is ...
The next available date is ...
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: Let's sort out best time and place for pickup
Let's sort out the best time and place for pickup
RESPONSE: Let's meet at {}.
Let's meet at {}.
RESPONSE: You are at hotel XYZ...
You are at hotel XYZ...
RESPONSE: Any special meals requirements
Does anyone in you party require special meals? gluten-free, vegetarian or vegan?
RESPONSE: Total price is...
That will be {total_price} euros altogether.
RESPONSE: Availabilities confirmed
Great! We have places for all of you on the tour that day.
RESPONSE: How many infants
RESPONSE: How many seniors
How many seniors?
RESPONSE: Age range definition
ACTION:
Get age definition by tour
{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.
{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.
{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.
{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.
{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.
{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.
RESPONSE: How many children
How many children in your group?
RESPONSE: How many adults
How many adults in your group?
RESPONSE: Confirming tour choice
You have chosen {[nnn](tour)}, am I right? So, are we ready to book and pay for it?
RESPONSE: Check specific date and tour
Let check if your tour operates on that date.
RESPONSE: What dates are you looking at?
Do you have a specific date in mind?
RESPONSE: Choose date for specific tour
ACTION:
Get {dates} for specific tour_id
{next_available_date+3}
Okay, that would be {next_available_date+2}. Is that a good day for you?
{next_available_date+2}
Okay, the one after that is {next_available_date+2}.
{next_available_date+1}
The next available date after that is {next_available_date+1}. Is that better for you?
{next_available_date}
The next available date for this tour is {next_available_date}. Does that work for you?
RESPONSE: Cancellation policy
ACTION:
Get cancel policy description
I have no information about cancellation policy for this tour, but of course if you run into unforeseen circumstances we can try to help.
Tickets are non-refundable. But we can try helping if you run into a serious problem.
These tickets are non-refundable after purchase. Sometimes the theater is able to switch tickets to another date, but this is not always possible.
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.
RESPONSE: Describe tour price
ACTION:
Get tour price description
Adult tickets for the Island tour are 83 euros, children 4 to 12 are 41.50 euros and Infants 3 and under are free.
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.
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.
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.
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.
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.
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 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: 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: 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: 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: services on the boat
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: snorkels and masks
ACTION:
Get snorkel and mask description
Snorkels and masks are available for rent, but remember, we do not take cash on board.
RESPONSE: Bring swimsuit
ACTION:
Get swimsuit description
tour_id IN [iT71, iT131, iT195, iT237, IT304]
Do not forget your towel and swimsuit!
RESPONSE: Describe swimming
ACTION:
Get swimming description
Yes, you can swim at Marineland. There is a beach and a children's pool for the younger ones.
tour_id IN [iT71, iT131, iT195, IT304]
Yes, there is swimming in the crystal clear sea is a real treat.
RESPONSE: Describe type of boat
ACTION:
Get type of boat description
[TO BE DEFINED]
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.
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.
RESPONSE: Alcohol served
There are two bars on board serving drinks. We recommend our delicious sangria.
RESPONSE: Alcohol Pirates
There are bars inside the theatre selling alcoholic drinks and there is a price list and menu on every table.
RESPONSE: Bye
Yes, hope to see you soon. Bye.
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: 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: Special meal note
Yes, there are options, but we need to make a note of them when we finalize your order.
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: Pirates Adventure Dinner
It is a dinner show. They serve you dinner during the evening entertainment.
RESPONSE: Cruise menu
It is a fixed menu. They prepare a beautiful buffet with pasta Bolognese and salads.
RESPONSE: Meal included
A meal is included in the price
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: 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: good tour for kids
Yes they love it. There is plenty to explore.
RESPONSE: Tell me about other tours
So you would like me to tell you about one of our other available tours?
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: Describe tour
ACTION:
Get tour description
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.
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.
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.
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.
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.
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.
RESPONSE: Let me tell you about {tour_id}
ACTION: Tour title with photo
tour_id = iT304
tour_id = iT237
booking tickets for the Marineland theme park
tour_id = iT195
The paradise cruise
tour_id = iT189
tour_id = iT131
The paradise cruise with hotel transfers
tour_id = iT71
RESPONSE: Which tour shall I describe?
Any specific tour you'd like me to tell you about?
RESPONSE: Shall I tell about my favorite tours
Shall I tell you about my favorite tours.
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: 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: 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: Let's book it now
Great, let's book {tour_name}.
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: Nothing to continue
RESPONSE: Nothing to stop
RESPONSE: General flow resume message
Ok. Let's go back where we were.
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: 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: Nice to meet you
It's so nice to meet you, {first_name}.
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: Graceful bypass user name
That's a nice name. So good to meet you.
RESPONSE: Explicit confirmation of user first name
Hello may I call you [Ali]?
RESPONSE: What is your name?
So, who do I have the pleasure of talking with today?
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!
ACTION: Validate tour_date
Outside reservation period
Must be positive integer
In reservation period
Slot filled:
{tour_date}
ACTION: Check tour availability by date
Not available
Date unavailable
Available
Slot filled:
{tour_suggested_date}
Date is available
Intents
INTENT: Thanks goodbye
Thanks for everything. Bye-bye.
Thank you, Zbee, for everything. Good Bye.
OK, I look forward to hanging out together. Bye.
INTENT: No final suggestions
No, I have no suggestions. Thanks
INTENT: Final suggestions
_________________________ {improve_suggestion}
Fill slot with {improve_suggestion}
INTENT: Satisfaction level
user: [1-2-3-4-5]
Fill slot with {satisfaction} = n
INTENT: Specific failed expectations
_____________
_____________
_____________
Fill slot with {failed_expectation}
INTENT: Book another tour
Can I book another tour?
INTENT: Nothing else right now
Nothing else right now, but thank you so much.
INTENT: Request recommendations unrelated to tours
user: Restaurant recommendation, for sure. Can you recommend the best vegetarian restaurant in town
Intent: Another meeting point?
Is it possible to be picked up at a different meeting point?
INTENT: What is the age range?
So what ages are seniors and children?
INTENT: Not any
I don't have any.
No infants.
No seniors.
No children.
No adults.
INTENT: tell me about another tour
INTENT: tell me about a tour (random)
Tell me about a tour you like.
INTENT: Random day
I want to go at the end of next week [random day].
INTENT: {next_available_date+3}
Lets try {next_available_date+3}
INTENT: {next_available_date+2}
Lets try {next_available_date+2}
INTENT: {next_available_date+1}
Lets try {next_available_date+1}
INTENT: {next_available_date}
{next_available_date} sounds perfect.
INTENT: tour operating days
On what days of the week does this tour operate?
INTENT: next available dates
What are the next available dates?
INTENT: Cancellation policy
What is the company's cancellation policy?
What if I book and pay and then can't make it? Will you give me my money back?
INTENT: services on the boat?
What services are available on board the boat?
INTENT: snorkels and masks
Are snorkels and masks available on the boat?
INTENT: swimsuit
Should I bring my swim suit?
INTENT: Can we swim
Do we get a chance to have a swim?
INTENT: no special meal
It's Okay, we won't need any special meals
INTENT: Bye
Thanks so much for all your help. Hope to talk again soon.
INTENT: not ready to continue
I need time to decide before I finalize the booking.
INTENT: Pirate Food menu
What type of food do they serve?
INTENT: cruise menu
What food do they serve?
What is the menu?
INTENT: special food options
Are there other food options available, like vegetarian, vegan, gluten-free?
INTENT: Ask for tour price
How much is it?
How much does this tour cost?
INTENT: Tour duration
How long does it last?
INTENT: Tell me other tours
Tell me about another tour.
Please tell me about your other tours.
INTENT: Days of the week
What days of the week does the tour operate?
INTENT: Is pickup included in price
INTENT: best means of transport
What's the best way to get to the tours or excursions?
INTENT: Is pickup included
Is hotel pick up included in the price of the ticket?
INTENT: What is the boat like?
What is it like on the boat?
INTENT: Alcohol served at Pirates
Is alcohol served?
INTENT: Alcohol on cruise
Is alcohol available on the boat?
INTENT: Food
Is food provided?
Is there a cafe or restaurant?
Is there a place to eat?
INTENT: good tour for kids
Is this a good tour for kids?
INTENT: Want to chitchat
I just want to chat with you, Zbee.
INTENT: I have questions
I have questions about the {Island Tour}.
tour_choice = Island Tour
I still have questions.
Book iT304
I want to book the Island tour.
Slots filled:
tour_choice = iT304
INTENT: Tell me about specific tour
Details for {Pirates Adventure}
tour_name = Pirates Adventure
Tell me about {Dolphin Watch}
INTENT: Show me what else you can do
What else can you do besides telling me about tours?
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: All Mallorca tours
I want to know about all the tours in Mallorca.
INTENT: Book tour
Yes I want to book the {Dolphin Watch}
tour_name = Dolphin Watch
INTENT: Tell about your favorite tours
Tell me about your favorite tours.
INTENT: Ready to book
I already know exactly which tour I want to book.
INTENT: Continue
Let's get back where we are
INTENT: Stop
Hold it!
INTENT: Deny
Definitely not!
No
INTENT: Affirm
Sure
Yes
INTENT: Ask why user name is needed
What is the reason you need my name?
Why do you need my name?
INTENT: Tell user name
My name is {Ali Abdul Al Nasri}.
Hi, Zeebee, nice to meet you. My name is {Ali Abdul Al Nasri}.
full_name = Ali Abdul Al Nasri
Raul structure
OTHER ERROR
ΚΟ - -
ERROR-back button in Stripe Web
BACK
renew Stripe code!
Stripe
OK
Update reserve
Instant-Ticketing back
vacancies,pickup-points
reservation Reference
Summary booking and button to pay with card
redirect stripe web
Callback payment status OK
Reservation Confirmed* SUCCESS
redirect to Summary booking and button to pay with card
Callback payment status ko
------------------------ Error generic page HTTP 500 ---------------
Instant-Ticketing out
lapi-ext/1/get-availabilities
https://travel.instant-ticketing.com/api-ext/1/reserve/
[widgetjor (window) src="https://travel.instant-ticketing.com/payment?zbeeBooking Reference=&reservation Reference=&reservation Expiration="
click Button
gateway
booking conversation (from (raul)
user
Excursion? n°Tickets? Date?
ZBEE
OK: you can book
I want to book
Your reservation has been confirmed. Check your email.
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 = 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: 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.
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: 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: From your phones location we have determined your location as [user_location](location).
Zbee: That doesnt seem to be working. Lets try that another way.
ACTION: go to not locatable
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: 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: 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.
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 Pickup time and place
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.
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.
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
alternative food choices
Zbee: Tell me about your special meals requirements. Does someone in your party require gluten-free, vegetarian or vegan meals?
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 not [189]
Slots:
tour_no = [nnn]
vegetarian_meal = 1
GF_meal = 1
Zbee: OK, we have added that information to your file.
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: 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: 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: Ok.
ACTION: go to Special food required
user: Not necessary.
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: yes
ACTION: go to alternative food choices
ACTION: go to User location
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: What is 29 degrees in fahrenheit?
Zbee: 84.2
user: Perfect.
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: 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
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.
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
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
Continue with voice
user: My full name is Peter Rawlings.
Zbee: So, Did I get it right? Peter Rawlings?
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
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: 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?
Entered info is incorrect
No: There's a mistake with my information.
Zbee: Can you edit it on-screen?
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 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 success
Zbee: Congratulations! Your [iTnnn](tour) fully is booked. You'll receive your tickets in your email.
ACTION: go to What else
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
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.
Zbee: I'm sorry. Perhaps you'd prefer to type that in the box on the screen labelled email.
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
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
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.
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.
@Geoffrey Carr-Harris @Chiu Hang Tsang
Please note.
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.
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.
@Geoffrey Carr-Harris My intention is to make it simpler :D
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.
@Geoffrey Carr-Harris Please check.
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.
@Geoffrey Carr-Harris Take a look at this
Simon:
Based on the responses, seems like this ("Food" intent) should be split into multiple intents.
TO FIX:
Seems like a dialogue specific to Dolphin Watch.
Need discussion.
@Geoffrey Carr-Harris @Chiu Hang Tsang
Need discussion.
Just my continually searching for unhappy paths, where the user likes the dolphin watch but doesn't want to spend four hours. If they ask for shorter tours what do we say?
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.
ACTION: Validate tour_name
Unrecognised Tours
(Not found in catalogue)
Slot unset: {tour_name}
Recognised Tours
(Found in catalogue)
Slot filled: {tour_name}
Slot filled: {tour_info}
Action Class loads tour database and save tour metadata as slot.
ACTION: Validate full_name
Unrecognised Names
(&^%$#)
Slot unset: {full_name}
Recognised Names
(Ali Adbul Al Nasri)
Slot filled: {full_name} = Ali Adbul Al Nasri
Await user ask questions about tour
special food options
Special meal note
Slot [add note to file]
{special_food} =Y
Pirates special meal
no special meal
not ready to continue
come back soon
Slot [add note to file]
{Pirates_special_food} =10 euro
Food
[iT195]
[iT131]
[iT71]
Meal included
cruise menu
Cruise menu
requestiing food information re specific tour
Pirates Adventure Dinner
Island tour lunch
requesting food information re specific tour
Marineland lunch
Is this a good tour for kids?
good tour for kids
What is the boat like?
Describe type of boat
services on the boat?
services on the boat
Alcohol served at Pirates
Alcohol Pirates
Alcohol on cruise
Alcohol served
Cancellation policy
Ask for tour price
Describe tour price
best means of transport
Getting to tours on your own
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
swimsuit
Bring swimsuit
snorkels and masks
Can we swim
Describe Swimming
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."
What days of the week
[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?
user choice
I think you can delete this
user: Im ready to book tickets for the Pirate Adventure show.
Zbee: Will that be with or without the special meal?
user: With one special meal.
Slots filled:
tour_choice = [189](tour)
special meal = Y(1)
user: without the special meal.
Slots filled:
tour_choice = [189](tour)
Zbee: Great, let's book it.
ACTION: go to Confirmation before booking
user: I still have questions.
ACTION: return to Pirates tour FAQ
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
all with boat
[iT195]
[iT131]
[iT71]
[iT304]
island tour
[iT304]
marineland
[iT237]
pirates
[iT189]
cruises
[iT195]
[iT131]
[iT71]
ACTION: Validate num_child
else
for any field validation (not only for this num_child field), should we always have a min-max value for numeric fields? should we allow a unreasonable large number of children, such as > 10 (or even >100) at this step and then let iticketing's reserve API returns errors and handle the errors at that step later?
@Chiu Hang Tsang I am sure there should be a boundary.
The hard boundary should be related to vacancies of the tour which requires API to return error.
The soft boundary may be the total number of seats in a tour?
I don't have an answer.
Maybe we could ask Raul if they have requirements on this field or similar field.
Invalid number of child
Is Non-negative integer
Slot filled:
{num_child}
FORM: Tour Detail Form
Upon Event
Complete
Check tour vacancies
General flow resume message
Active
General flow suspension message
Inactive
Form Loop
num_infant
How many infants?
Validate num_infant
num_senior
How many seniors do you have?
Validate num_senior
num_child
How many children
What is the age range?
Age range definition
Validate num_child
num_aduit
How many adults
Not any
Pattern: number
Validate num_adult
tour_date
What dates are you looking at?
Random day
Pick a random date by tour
tour operating dates
Describe tour operating dates
next available dates
Check next available date by tour
Loop back
Pattern: date
Validate tour_date
Check tour availability by date
Await user to affirm to book tour
Tell me other tours
Suggest a tour
Let me tell you about {tour_id}
Await user to affirm tour suggestion
Book tour
Let's book it now
I have questions
Do you want to know more about tour?
Await user ask questions about tour
independently on website
Minimise Zbee
I am in training, so want to book independently?
[Undefined State]
cruise menu
Ask which tour
Bye
Session ends
Tours General FAQ
user: Is there a dinosaur exhibition in Mallorca?
iTicket_FAQ
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.
9
neural version
<speak>
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.
</speak>
old version
<speak>
<prosody rate="+1.07" pitch="high" volume="medium">
To be honest, I don't yet know everything about this fascinating island, <amazon:breath duration="x-long" volume="loud"/> but I'll try my best to answer all your questions. </prosody><prosody rate="+1.15" pitch="x-high" volume="medium"> Please, ask away.
</prosody>
</speak>
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?
@Geoffrey Carr-Harris Not entirely sure what needs to be done here as we don't have knowledge graph behind the scene now.
@Simon Ho @Jeanne Lim I'm not sure what to do here. I believe we've asked iTicketing many times for more information about Mallorca, and I believe the plan is to create a larger database/knowledgegraph/data set which could be used here, but I assume this is for future development.
@Geoffrey Carr-Harris I'll just leave this as low priority until we figure out the exact solution.
ACTION: To {Mallorca_knowledge_graph} ?
Zbee: Now are you ready to hear about some of my favorite tours?
Want to chitchat
I am at my job now
All Mallorca tours
I am only trained for some tours
Await user to acknowledge Zbee could handle only some tours
Continue
Stop
User tells his name
Ask why name is needed
[To be defined]
Ask why my name is needed
Need your name later
Validate full_name
if
{full_name} is not set
{full_name} is set
Explicit confirmation of user first name
Make sure the happy path is smooth.
We could implement the full_name validation later.
Await user to confirm the name
Tell user name
Deny
Slots unset: {full_name}
Graceful bypass
Affirm
Slots filled: {first_name} = Ali
Nice to meet you
How can I help?
Await user to ask for help
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
Tell about your favorite tours
Zbee's tour descriptions
Tour Query Form
Ready to book
Tour Book Form
Session starts
Welcome message
What is your name?
Await user tells his name
Phase 1 Zbee Blueprint [final ver]