Categorie: Tutti - form - travel - validation - tour

da Geoffrey Carr-Harris mancano 2 anni

93

Phase 1 Zbee Blueprint [final ver] bck nov 3 750pm

The text outlines a process involving a chatbot designed to assist travelers by collecting and validating their names via a form. The form contains specific fields for the traveler'

Phase 1 Zbee Blueprint [final ver] bck nov 3 750pm

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]