This is a revamped version of the OLD design

Phase 1 Zbee Blueprint [final ver]

Session starts

Welcome message

l

What is your name?

l

Await user tells his name

l

Await user to ask for help

Ready to book

l

Tour Book Form

Tour Book Form

Tell about your favorite tours

l

Zbee's tour descriptions

l

Tour Query Form

Show me what else you can do

l

I am in Mallorca

l

Shall I tell about my favorite tours

l

Await user to reply if Zbee should tell her favourite tours

l

Await user to confirm the name

Affirm

l

Slots filled: {first_name} = Ali

Nice to meet you

l

How can I help?

l

Await user to ask for help

l

Deny

l

Slots unset: {full_name}

Graceful bypass

l

How can I help?

Await user to ask for help

l

Tell user name

l

Slots unset: {full_name}

Graceful bypass

l

How can I help?

Await user to ask for help

l

Make sure the happy path is smooth.
We could implement the full_name validation later.

Await user tells his name

Tell user name

l

Validate full_name

l

if

{full_name} is set

Explicit confirmation of user first name

l

Await user to confirm the name

l

{full_name} is not set

Graceful bypass

l

How can I help?

l

Await user to ask for help

l

Ask why my name is needed

l

Need your name later

l

How can I help?

l

Await user to ask for help

l

[Undefined State]

Ask why name is needed

[To be defined]

User tells his name

[To be defined]

Stop

[To be defined]

Continue

[To be defined]

Show me what else you can do

I am in Mallorca

l

Shall I tell about my favorite tours

Await user to reply if Zbee should tell her favourite tours

I am in Mallorca

All Mallorca tours

I am only trained for some tours^

l

Await user to acknowledge Zbee could handle only some tours

Want to chitchat

I am at my job now^

Mallorca General Information

user: I have some questions about Mallorca

p

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.

r

9neural 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.  

p

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?

c3
p
GC

ACTION: To {Mallorca_knowledge_graph} ?

Zbee: Now are you ready to hear about some of my favorite tours?

Tours General FAQ

user: Is there a dinosaur exhibition in Mallorca?

iTicket_FAQ

Bye

Bye

Session ends

cruise menu

Ask which tour

Await user to reply if Zbee should tell her favourite tours

Tell about your favorite tours

l

Zbee's tour descriptions

l

Tour Query Form

Affirm

l

Zbee's tour descriptions

l

Tour Query Form

Deny

l

I am in training, so want to book independently?

l

Await user to acknowledge Zbee could handle only some tours

Affirm

independently on website

Minimise Zbee

Await user to affirm to book tour

I have questions

l

Do you want to know more about tour?

l

Await user ask questions about tour

l

Book tour

l

Let's book it now

l

Tour Book Form

l

Affirm

l

Let's book it now

l

Tour Book Form

l

Tell me other tours

Suggest a tour

Let me tell you about {tour_id}

l

Await user to affirm tour suggestion

l

FORM: Tour Detail Form

Form Loop

tour_date

What dates are you looking at?

l

Pattern: date

Validate tour_date

l

Check tour availability by date

l

next available dates

l

Check next available date by tour

l

Loop back

tour operating dates

l

Describe tour operating dates

l

Loop back

Random day

l

Pick a random date by tour

l

Loop back

num_aduit

How many adults

l

Pattern: number

Validate num_adult

l

Not any

l

Validate num_adult

l

num_child

How many children

l

Pattern: number

Validate num_child

l

Not any

l

Validate num_child

l

What is the age range?

l

Age range definition

l

Loop back

num_senior

How many seniors do you have?

Pattern: number

Validate num_senior

l

Not any

l

Validate num_senior

l

num_infant

How many infants?

l

Pattern: number

Validate num_infant

l

Not any

l

Validate num_infant

l

Upon Event

Active

Stop

General flow suspension message

l

Inactive

Inactive

Continue

General flow resume message

l

Active

Complete

Check tour vacancies

l

ACTION: Validate num_child

Is Non-negative integer

Slot filled:
{num_child}

else

c2

Invalid number of child

l

Loop back

cruises

[iT195]
[iT131]
[iT71]

pirates

[iT189]

marineland

[iT237]

island tour

[iT304]

all with boat

[iT195]
[iT131]
[iT71]
[iT304]

user: Are there other Dolphin tours less than 4 hours?

Zbee: yes, there are shorter tours but I'm not trained yet to help you book them. If you wish you can check them out and book a shorter tour directly on our site.

user: OK

ACTION: go to Other tours beside Zbee's Choice Tours

user choice

c1SH

user: I still have questions.

ACTION: return to Pirates tour FAQ

user: Im ready to book tickets for the Pirate Adventure show.

Zbee: Will that be with or without the special meal?

user choice

user: without the special meal.

Slots filled:
tour_choice = [189](tour)

Zbee: Great, let's book it.

ACTION: go to Confirmation before booking

user: With one special meal.

Slots filled:
tour_choice = [189](tour)
special meal = Y(1)

Zbee: Great, let's book it.

ACTION: go to Confirmation before booking

Await user ask questions about tour

What days of the week

Describe tour operating dates

l

[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?

l

Await user to affirm to book tour

l

tour duration

General duration question

l

[iT71](Duration): slot = "4 hours"
[iT189](Duration): slot = "show is 2 hours, but it is best to arrive an hour early"
[iT131](Duration): slot = "4 hours"
[iT195](Duration): slot = "4 hours"
[iT237](Duration): slot = "It is open all day."
[iT304](Duration): slot = "It is an all-day trip."

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Can we swim

Describe Swimming

Are you ready to book or any question?

l

Await user to affirm to book tour

l

snorkels and masks

snorkels and masks

Are you ready to book or any question?

l

Await user to affirm to book tour

l

swimsuit

Bring swimsuit

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Is pickup included in price

[iT71](pickup) slot = N
[iT189](pickup) slot = N
[iT195](pickup) slot = N
[iT131](pickup) slot = Y
[iT237](pickup) slot = N
[iT304](pickup) slot = Y

Pickup is included in the price

Are you ready to book or any question?

l

Await user to affirm to book tour

l

best means of transport

Getting to tours on your own

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Ask for tour price

Describe tour price

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Cancellation policy

Cancellation policy

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Alcohol on cruise

Alcohol served

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Alcohol served at Pirates

Alcohol Pirates

Are you ready to book or any question?

l

Await user to affirm to book tour

l

services on the boat?

services on the boat

Are you ready to book or any question?

l

Await user to affirm to book tour

l

What is the boat like?

Describe type of boat

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Is this a good tour for kids?

good tour for kids

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Food

[iT237]

requesting food information re specific tour

Marineland lunch

Are you ready to book or any question?

l

Await user to affirm to book tour

l

[iT304]

requesting food information re specific tour

Island tour lunch

Are you ready to book or any question?

l

Await user to affirm to book tour

l

[iT189]

requestiing food information re specific tour

Pirates Adventure Dinner

Are you ready to book or any question?

l

Await user to affirm to book tour

l

[iT195]
[iT131]
[iT71]

Meal included

cruise menu

Cruise menu

Are you ready to book or any question?

l

Await user to affirm to book tour

l

special food options

Pirates special meal

Affirm

Slot [add note to file]
{Pirates_special_food} =10 euro

Are you ready to book or any question?

l

Await user to affirm to book tour

l

not ready to continue

come back soon

no special meal

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Special meal note

Affirm

Slot [add note to file]
{special_food} =Y

Are you ready to book or any question?

l

Await user to affirm to book tour

l

no special meal

Are you ready to book or any question?

Await user to affirm to book tour

l

not ready to continue

come back soon

ACTION: Validate full_name

Recognised Names
(Ali Adbul Al Nasri)

Slot filled: {full_name} = Ali Adbul Al Nasri

Slots filled: {first_name} = Ali

Unrecognised Names
(&^%$#)

Slot unset: {full_name}

ACTION: Validate tour_name

Recognised Tours
(Found in catalogue)

Slot filled: {tour_name}

Slot filled: {tour_info}

r

Action Class loads tour database and save tour metadata as slot.

Unrecognised Tours
(Not found in catalogue)

Slot unset: {tour_name}

Simon:
I think these questions could be asked anytime, meaning that we might not constrain them to certain paths. Now these questions can only be asked right after a tour is picked.
If the user hasn't mentioned a tour before, the system would need to ask to pick a tour before answering these questions.

Need deeper discussion.

TO FIX:
Seems like a dialogue specific to Dolphin Watch.

Need discussion.

c2

Simon:
Based on the responses, seems like this ("Food" intent) should be split into multiple intents.

Simon:
Looks like "Special food options" doesn't need to follow after "food"?

GCH:
I agree, it doesn't need to be there the link was to the one above at the higher level so it is gone.

"Are there other food options available, like vegetarian, vegan, gluten-free?" can be asked independently as long as the user mentioned which tour.

GCH:
In fact when does an even need to mention the tour, it can be any tour with the exception of the Pirates which is different because it actually costs money.

c1

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.

c1

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.

c1

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.

c1

GCH:
Having travel travelled with people with gluten problem and with vegetarians, this was always a question whenever we booked a restaurant etc. Maybe it's not a big issue for a lot of people, but I cannot speak to that.

I think the form is a good idea and I don't think it's very complicated, as for all the tours with the exception of Pirates, we just need to put a note in the file for iTicketing listing the number and type of special meals gluten-free, vegan, vegetarian.

For pirates it's a bit more complicated as a special meal cost €10.

GCH:
I thought it would be more streamlined with the one food intent which is "is there food?", and the sub-intents determined by what tour is in the slot, with responses as description of the actual food on that particular tour.
I'm the creative guy, you have to decide how it works best with your dialogue engine.

Floating topic

User info

Zbee: Now we just need your personal information to pay for your tickets, OK?

user: Fine. What do you need?

Zbee: What is your name? Just tell me or type it in the form here if it is easier

Edit personal info on screen

ACTION: Zbee shrinks down to reveal the booking form.

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.

user: Sure. Filling in my data.

Zbee: Press next when you have entered your information.

ACTION: go to Entered info is correct

Continue with voice

user: My full name is Peter Rawlings.

Zbee: So, Did I get it right? Peter Rawlings?

user: No

Zbee: I'm sorry. Perhaps you want to type that in the box on the screen labelled name.

ACTION: go to Edit personal info on screen

user: Yes

Zbee: Great. And you email address where we can send your tickets and receipt.

user: My email is joe@me.com [xxx@xxx.xxx](email)

Zbee: So, that is joe@me.com

user: No

Zbee: I'm sorry. Perhaps you'd prefer to type that in the box on the screen labelled email.

ACTION: go to Edit personal info on screen

user: Yes

Zbee: OK {first_name}, now what is your cell number?

user: My current phone number is 123-234-3434 [nnn](phone_number)

Zbee: Ok, so your number is 123-234-3434. Is that correct?

user: No

Zbee: I'm sorry. We could try that again, but perhaps you want to type that in the box on the screen labelled phone number.

ACTION: go to Edit personal info on screen

user: yes.

Send to iT API
[first_name, last_name] (full name) = Y
[xxx@xxx.xxx](email) = Y
[nnn](phone_number) = Y

Zbee: Excellent. Please double check the information. Is it correct?

Zbee: Excellent. Please double check the information. Is it correct?

user choice

Entered info is correct

Zbee: After you accept the booking conditions please press the button PAY WITH CARD and you will be able to enter your card information.

Zbee: After you accept the booking conditions please press the button PAY WITH CARD and you will be able to enter your card i

user: I am typing in my card info.

Zbee: When you are done make sure to double check your card information and then press the button PAY.

user: I clicked Pay.

Interface with Stripe

Payment failure

Zbee: I'm sorry. there seems to be a bit of a problem with your card. Could you try again, maybe with a different card if you have one.

Repeated payment failure

Zbee: well, let's give it one last try.

final payment failure

Zbee: Well, that's really unfortunate. Our bank doesn't seem to be able to confirm payment with your cards. But now that you know how easy, and how much fun it is to book tickets with me, just come back and we'll book some new tickets as soon as you've solved this issue with your bank.

user: Thank you, Zbee, I will check with my bank. Good bye.

Zbee: Ok, yes, I look forward to seeing you again soon.

END SESSION

Payment success

Zbee: Congratulations! Your [iTnnn](tour) fully is booked. You'll receive your tickets in your email.

Zbee: Congratulations! Your [iTnnn](tour) fully is booked. You'll receive your tickets in your email.

ACTION: go to What else

Change the reservation

user: Can I add two more people?

Zbee: Let me try.

new data sent to iT API
along with old ID number

Entered info is incorrect

No: There's a mistake with my information.

Zbee: Can you edit it on-screen?

ACTION: go to Edit personal info on screen

Ticket quantity

Zbee: So, you want to book for how many people?

user: 2 adults and two children

Zbee: How old are the children

user: 3 and 6

Zbee: OK, the children are aged 3 and 6

Zbee: Any of the adults a Senior?

user: Yes, one senior.

Slots filled:
{senior_ticket} = 1
{adult_ticket} = 1
{older_child_ticket} = 1
{younger_child_ticket} = 1

Zbee: Just a sec and let me make sure we have availability for four people.

Slots sent to iT API:
{tour_choice} = Y
{tour_date_booked} = Y
{tot_pp_qty} = 4
{senior_ticket} = 1
{adult_ticket} = 1
{older_child_ticket} = 1
{younger_child_ticket} = 1

results from iTicketing

Availability = N

Zbee: I am so sorry we don't have any availability that day. Shall I try the next available date

e1

ACTION: go to General date question

Availability = Y

Zbee: Good we have availabilities for all of you on the tour and the date of your choice.

ACTION: go to Ticket price

GCH:
I think this is something that needs to be implemented later. Especially when there are many more than 6 tours.

Need tour on a specific date

We're looking for a tour or excursion on {date}

Tours availabe on specific date

CHECK if tour_choice = [nnn](tour) operates on (date)

Good, on that date we have the dolphin watch and the around the island cruise, and we have tickets for marineland everyday.

Weather queries

user: What is the weather forecast for {next_available_date}?

CHECK weather API for
{next_available_date}
{next_available_date+1}
{next_available_date+2}

Zbee: 80% chance of rain on {next_available_date} overcast and 24 on {next_available_date+1} and beautiful sunny day, 29 degrees on {next_available_date+2}.

user: Can you check the following week?

CHECK weather API for
{specific period}

Zbee: Well the {specific period} looks generally nice weather with little chance of rain.

user: Great lets book next week.

Zbee: Can you give me a specific date and we'll check the availability.

ACTION: go to Determine specific dates

user: Lets book on {next_available_date+2}

Zbee: Okay, let's book you on {next_available_date+2}.

Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y

ACTION: go to Ticket quantity and price

user: What is 29 degrees in fahrenheit?

Zbee: 84.2

user: Perfect.

Zbee: Okay, let's book you on {next_available_date+2}.

Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y

ACTION: go to Ticket quantity and price

Ticket price

user: So how much will that cost all together?

Send/receive API

Zbee: That will be [xxx euros](total_price) altogether.

Slots filled:
{total_ticket_price} = Y

Zbee: Does anyone in you party require special meals? gluten-free, vegetarian or vegan?

user: No

ACTION: go to User location

user: yes

ACTION: go to alternative food choices

alternative food choices

Zbee: Tell me about your special meals requirements. Does someone in your party require gluten-free, vegetarian or vegan meals?

user: Yes, but we don't need to worry you with that now.

Zbee: It is no worry. If you have special requirements we will be very happy to assist.

user: Not necessary.

ACTION: go to User location

user: Ok.

ACTION: go to Special food required

Special food required

user: A gluten free for my wife and a vegetarian meal for my daughter.

Zbee: So you want 1 vegetarian and 1 Gluten-free meal correct?

If [189] Pirate tour

Zbee: The Pirate adventure dinner does not contain gluten except the bun, and they can serve a vegetarian burger or a tofu vegan burger. The theatre does charge 10 euro for a special meal, so if you wish to order one we will add 10 euros to the bill. Is that alright?

user: Not necessary.

ACTION: go to User location

user: yes, lets add that.

Slots:
{pirate_food_extra} 1 (10)
{total_ticket_price} + 10

Zbee: We have added the special meal to your order. The new total will be 85 euro., alright?

user: Perfect.

ACTION: go to User location

If not [189]

Slots:
tour_no = [nnn]
vegetarian_meal = 1
GF_meal = 1

Zbee: OK, we have added that information to your file.

ACTION: go to User location

User location

DECISION: [iTnnn](tour) pickup = Y/N
[iT71](pickup) slot = N
[iT189](pickup) slot = N
[iT195](pickup) slot = N
[iT131](pickup) slot = Y
[iT237](pickup) slot = N
[iT304](pickup) slot = Y

Pickup = N

Zbee: The [iTnnn](tour) does not include a pickup, so your ticket will clearly state the place and time for the beginning of the tour. You will have to get yourself to the venue, OK?

user: No problem. What is the best way to get there?

Zbee: The time and the venue address will be on your tickets. It will depend on where you are staying, but generally I would recommend you take a taxi or a bus.

ACTION: go to Customer satisfaction

Pickup = Y

Zbee: The price of your tour (iT304, iT131) includes a free pickup from your hotel or from a meeting place convenient to where you are staying, so we'll need to determine the best pickup location for you. Shall we do that now?

user: Sounds good.

Zbee: If you are using your phone at the location where you will want to be picked up, with your permission we can automatically determine your location.

user: No I am not at that location now.

not locatable

Zbee: Do you know where you will be staying on the day of the tour?

user: I havent decided on the hotel yet.

Zbee: That is not a problem. I'll send a map along with your tickets with all the times and pickup locations. So once you know where you are staying you'll be able to find the nearest pickup point.

ACTION: go to Customer satisfaction

user: Sure, the address is 24 Harbour street Palma [address](location)

Zbee: So that is 24 Harbour street Palma, is that correct.

ACTION: check iTicketing/google maps API to determine location found/not found

Zbee: Hmmm, my brain mapping faculties seem to be malfunctioning today, but dont worry, I'll send a map along with your tickets with all the times and pickup locations.

ACTION: go to Customer satisfaction

Zbee: Perfect. We have your [user_location](location).

Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
{tot_pp_qty} = 4
{user_location} = Y

Zbee: Ok, so now lets figure out the best time and place for your pickup.

ACTION: go to Pickup time and place

Subtopic

Pickup time and place

Zbee: So we have confirmed your address in Mallorca as [address](location)

ACTION: Call to iT API
CALCULATE/REQUEST
[meet](pickup) and
[time](pickup) for
[iTnnn](tour) for
[address](location).

Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
{user_location} = Y
{pickup_time&location} = Y

Zbee: The pickup location for [iTnnn](tour) for your [address](location) is [meet](pickup) at [time](pickup).

user: let me get a pen to write down...

Zbee: We are sending you a message/email and the time and place will be very clear. There will also be a link that you should be able to open in your phone's map application.

user: Ok, great.

ACTION: go to Customer satisfaction

user: Yes I am where I want to be picked up

locatable

Zbee: Do you have any privacy concerns about us knowing your location?

user: no

Zbee: If you permit me (click to agree?) we shall try to determine your location automatically.

user: I give you permission (click to agree?) to determine your location automatically

Zbee: That doesnt seem to be working. Lets try that another way.

ACTION: go to not locatable

Zbee: From your phones location we have determined your location as [user_location](location).

Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
{tot_pp_qty} = 4
{user_location} = Y

Zbee: Ok, so now lets figure out the best time and place for your pickup.

ACTION: go to Pickup time and place

Zbee: From the code you used to come to us today it looks that you are at the [xxx](hotel) so we can pick you up there.

user: Perfect.

Slots filled:
{tour_choice} = Y
{tour_date_booked} = Y
{tot_pp_qty} = 4
{user_location} = Y

Zbee: Ok, so now lets figure out the best time and place for your pickup.

ACTION: go to Pickup time and place

Pickup time and place

Raul structure

booking conversation (from (raul)

user

Excursion? n°Tickets? Date?

ZBEE

OK: you can book

user

I want to book

ZBEE

Your reservation has been confirmed. Check your email.

Instant-Ticketing out

lapi-ext/1/get-availabilities

[widgetjor (window) src="https://travel.instant-ticketing.com/payment?zbeeBooking Reference=&reservation Reference=&reservation Expiration="

click Button

gateway

Instant-Ticketing back

vacancies,pickup-points

reservation Reference

<HTML>Summary booking and button to pay with card</HTML>

redirect stripe web

Callback payment status OK

Reservation Confirmed* <html> SUCCESS</html>

redirect to <HTML>Summary booking and button to pay with card</HTML>

Callback payment status ko

------------------------ Error generic page HTTP 500 ---------------

Stripe

OK

Update reserve

ERROR-back button in Stripe Web

BACK

renew Stripe code!

OTHER ERROR

ΚΟ - -

Intents

INTENT: Tell user name

Hi, Zeebee, nice to meet you. My name is {Ali Abdul Al Nasri}.

full_name = Ali Abdul Al Nasri

My name is {Ali Abdul Al Nasri}.

full_name = Ali Abdul Al Nasri

INTENT: Ask why user name is needed

Why do you need my name?

What is the reason you need my name?

INTENT: Affirm

Yes

Sure

INTENT: Deny

No

Definitely not!

INTENT: Stop

Stop

Hold it!

INTENT: Continue

Continue

Let's get back where we are

INTENT: Ready to book

I already know exactly which tour I want to book.

INTENT: Tell about your favorite tours

Tell me about your favorite tours.

INTENT: Book tour

Yes I want to book the {Dolphin Watch}

tour_name = Dolphin Watch

INTENT: All Mallorca tours

I want to know about all the tours in Mallorca.

INTENT: Independently on website

It's been fun getting to know you, but I want to book a tour on your website on my own.

INTENT: Show me what else you can do

What else can you do besides telling me about tours?

INTENT: Tell me about specific tour

Tell me about {Dolphin Watch}

tour_name = Dolphin Watch

Details for {Pirates Adventure}

tour_name = Pirates Adventure

Book iT304

I want to book the Island tour.

Slots filled:
tour_choice = iT304

INTENT: I have questions

I still have questions.

I have questions about the {Island Tour}.

tour_choice = Island Tour

INTENT: Want to chitchat

I just want to chat with you, Zbee.

INTENT: good tour for kids

Is this a good tour for kids?

INTENT: Food

Is there a place to eat?

Is there a cafe or restaurant?

Is food provided?

INTENT: Alcohol on cruise

Is alcohol available on the boat?

INTENT: Alcohol served at Pirates

Is alcohol served?

INTENT: What is the boat like?

What is it like on the boat?

INTENT: Is pickup included

Is hotel pick up included in the price of the ticket?

INTENT: best means of transport

What's the best way to get to the tours or excursions?

INTENT: Is pickup included in price

Is hotel pick up included in the price of the ticket?

INTENT: Days of the week

What days of the week does the tour operate?

INTENT: Tell me other tours

Please tell me about your other tours.

Tell me about another tour.

INTENT: Tour duration

How long does it last?

INTENT: Ask for tour price

How much does this tour cost?

How much is it?

INTENT: special food options

Are there other food options available, like vegetarian, vegan, gluten-free?

INTENT: cruise menu

What is the menu?

What food do they serve?

INTENT: Pirate Food menu

What type of food do they serve?

INTENT: not ready to continue

I need time to decide before I finalize the booking.

INTENT: Bye

Thanks so much for all your help. Hope to talk again soon.

INTENT: no special meal

It's Okay, we won't need any special meals

INTENT: Can we swim

Do we get a chance to have a swim?

INTENT: swimsuit

Should I bring my swim suit?

INTENT: snorkels and masks

Are snorkels and masks available on the boat?

INTENT: services on the boat?

What services are available on board the boat?

INTENT: Cancellation policy

What if I book and pay and then can't make it? Will you give me my money back?

What is the company's cancellation policy?

INTENT: next available dates

What are the next available dates?

INTENT: tour operating days

On what days of the week does this tour operate?

INTENT: {next_available_date}

{next_available_date} sounds perfect.

INTENT: {next_available_date+1}

Lets try {next_available_date+1}

INTENT: {next_available_date+2}

Lets try {next_available_date+2}

INTENT: {next_available_date+3}

Lets try {next_available_date+3}

INTENT: Random day

I want to go at the end of next week [random day].

INTENT: tell me about a tour (random)

Tell me about a tour you like.

INTENT: tell me about a tour (random)

Tell me about a tour you like.

INTENT: tell me about another tour

Tell me about another tour.

INTENT: Not any

No adults.

No children.

No seniors.

No infants.

I don't have any.

Not any

INTENT: What is the age range?

So what ages are seniors and children?

Intent: Another meeting point?

Is it possible to be picked up at a different meeting point?

INTENT: Request recommendations unrelated to tours

user: Restaurant recommendation, for sure. Can you recommend the best vegetarian restaurant in town

INTENT: Nothing else right now

Nothing else right now, but thank you so much.

INTENT: Book another tour

Can I book another tour?

INTENT: Specific failed expectations

_____________
_____________
_____________

Fill slot with {failed_expectation}

INTENT: Satisfaction level

user: [1-2-3-4-5]

Fill slot with {satisfaction} = n

INTENT: Final suggestions

_________________________ {improve_suggestion}

Fill slot with {improve_suggestion}

INTENT: No final suggestions

No, I have no suggestions. Thanks

INTENT: Thanks goodbye

Thanks for everything. Bye-bye.

Thank you, Zbee, for everything. Good Bye.

OK, I look forward to hanging out together. Bye.

ACTION: Check tour availability by date

Available

Slot filled:
{tour_suggested_date}

Date is available

l

Not available

Date unavailable

l

Loop back

ACTION: Validate tour_date

In reservation period

Slot filled:
{tour_date}

Outside reservation period

Must be positive integer

Loop back

Responses

RESPONSE: Welcome message

Hi! I'm Zeebee. Welcome to the Island of Mallorca. I am so excited you have joined me. I want to help you get acquainted with this wonderful island. But I must warn you, {whispers} you might just fall in love with this place! Anyway, that's what happened to me! This is so exciting!

RESPONSE: What is your name?

So, who do I have the pleasure of talking with today?

RESPONSE: Explicit confirmation of user first name

Hello may I call you [Ali]?

RESPONSE: Graceful bypass user name

That's a nice name. So good to meet you.

RESPONSE: Need your name later

I always like to get to know who I'm talking with, but I really don't need you name now. Of course, if you wish me to book a tour for you later on we will need your personal information then.

RESPONSE: Nice to meet you

It's so nice to meet you, {first_name}.

RESPONSE: How can I help?

Shall I tell you about my favorite tours? Or do you already have a tour in mind you want to book?

RESPONSE: General flow suspension message

It's ok to stop now. Just say do you want to continue and we will resume the flow.

RESPONSE: General flow resume message

Ok. Let's go back where we were.

RESPONSE: Nothing to stop

[To be defined]

Oct27

RESPONSE: Nothing to continue

[To be defined]

Oct27

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.

So, here are my tour picks. Choose a cruise, or you can tour the island, or perhaps you prefer entertainment closer to town. Can you tell me the name or number of the tour or excursion you'd like me to tell you about?

RESPONSE: Let's book it now

Great, let's book {tour_name}.

RESPONSE: Tell tours I can book

I am sorry, that doesn't seem to be one of the tours I can book for you. Shall I describe some of the tours I can book?

RESPONSE: I am in training, so want to book independently? ^

There are lots of different tours and excursions available in Mallorca, but I am currently only trained to describe and book my choice tours. If you like, it's always possible to book tours directly on our website, OK?

RESPONSE: I am in Mallorca

Right now I am in Mallorca and this is my full time job. I'm still learning and need to stay focussed on helping people like you choose and book tickets for local tours and attractions.

RESPONSE: Shall I tell about my favorite tours

Shall I tell you about my favorite tours.

RESPONSE: Which tour shall I describe?

Any specific tour you'd like me to tell you about?

RESPONSE: Let me tell you about {tour_id}

ACTION: Tour title with photo

tour_id = iT71

The four hour dolphin watch

tour_id = iT131

The paradise cruise with hotel transfers

tour_id = iT189

The Pirate adventure dinner show.

tour_id = iT195

The paradise cruise

tour_id = iT237

booking tickets for the Marineland theme park

tour_id = iT304

The tour around the island by bus, train, boat and tram.

RESPONSE: Describe tour

ACTION:
Get tour description

tour_id = iT71

Watching the dolphins is an experience you'll remember for the rest of your life. The boat sails along the coastline then heads out to high seas. You will be amazed as you observe these animals in their natural environment. Dolphins are extremely sociable, they love to swim in the bow wave of the ship and they surprise passengers with their jumps. After that you will sail into a beautiful cove for lunch and a swim. On the way back you'll have another chance to swim, this time in the most awesome clear blue waters.

Watching the dolphins is an experience you'll remember for the rest of your life. The boat sails along the coastline then hea

tour_id = iT131

The paradise cruise is a truly amazing trip on board an exclusive triple-decker catamaran. After anchoring in a beautiful bay you might want to take a refreshing swim in a paradise of clear waters and enjoy the submarine vision through the bottom of the boat. Then you'll witness the remarkable southwest coast and the Natural Marine Reserve around the Malgrat Islands as you cruise to Port Andratch, one of the most exclusive harbours of Mallorca. Spend a truly incredible day relaxing and cruising around our spectacular island. This tour includes a transfer from where you are staying.

The paradise cruise is a truly amazing trip on board an exclusive triple-decker catamaran. After anchoring in a beautiful bay

tour_id = iT189

The Pirates Adventure is a magical journey in a time when pirates ruled the seven seas! An amazing night of entertainment for the whole family and an unforgettable experience. You will live an authentic adventure with acrobats who will amaze you, and dancers who will dazzle you. Feel the heat of the fire, hear the sound of swords and look up as pirates fly overhead! This award-winning show has been enjoyed by millions, it starts at 6:00 p.m and lasts about two hours.

The Pirates Adventure is a magical journey in a time when pirates ruled the seven seas! An amazing night of entertainment for

tour_id = iT195

The paradise cruise is a truly amazing trip on board an exclusive triple-decker catamaran. After anchoring in a beautiful bay you might want to take a refreshing swim in a paradise of clear waters and enjoy the submarine vision through the bottom of the boat. Then you'll witness the remarkable southwest coast and the Natural Marine Reserve around the Malgrat Islands as you cruise to Port Andratch, one of the most exclusive harbours of Mallorca. Spend a truly incredible day relaxing and cruising around our spectacular island. This tour does not include transfer from where you are staying.

The paradise cruise is a truly amazing trip on board an exclusive triple-decker catamaran. After anchoring in a beautiful bay

tour_id = iT237

Marineland is a complete theme park located in a magical location housing a large collection of dolphins and fish, sea lions, exotic birds, reptiles and so much more. There is also a serviced picnic area and a beach for swimming.

Marineland is a complete theme park located in a magical location housing a large collection of dolphins and fish, sea lions,

tour_id = iT304

This very special tour takes you all around the island on an all-day trip. After an hour travelling on the famous century old wooden railway that connects Palma with Soyer and a vintage tram from Soyer to the harbour, we continue on a spectacular boat trip along cliffs and impressive landscapes to dock at Sa Calobra and Torrent de Pareis. There, we will have 2 hours to sightsee, have lunch and even swim if you wish. Lunch is not included in the price of the ticket. You can bring your own picnic, or choose from one of the exotic eateries in the town. After lunch, we continue a panoramic bus trip and after a stop in the Natural Park we head home.

This very special tour takes you all around the island on an all-day trip. After an hour travelling on the famous century old

RESPONSE: Are you ready to book or any question?

So, are we ready to book {tour_name}, or do you have some questions about this tour? Or shall I tell you about one of our other tours?

RESPONSE: Tell me about other tours

So you would like me to tell you about one of our other available tours?

RESPONSE: good tour for kids

Yes they love it. There is plenty to explore.

RESPONSE: Island tour lunch

There are different options for buying your lunch during our stay in Sa Calobra, or you can take some food along and enjoy a picnic.

RESPONSE: Marineland lunch

Yes, there are self-service restaurants and a pizzeria and there is also a picnic area if you prefer to bring your own food.

RESPONSE: Meal included

A meal is included in the price

RESPONSE: Cruise menu

It is a fixed menu. They prepare a beautiful buffet with pasta Bolognese and salads.

RESPONSE: Pirates Adventure Dinner

It is a dinner show. They serve you dinner during the evening entertainment.

RESPONSE: Pirates menu

All tickets include a meal of roast chicken, potato wedges and corn on the cob and an ice cream cup and water or soft drinks

RESPONSE: Special meal note

Yes, there are options, but we need to make a note of them when we finalize your order.

RESPONSE: Pirates special meal

Yes, they can provide a vegetarian burger instead of the chicken, and a tofu burger if you are vegan. Zbee: The meal is gluten free all except the bread roll, which is served separately. The theatre charges 10 euros for a special meal.

RESPONSE: come back soon

I understand. When you are ready just come back and tell me which tour you want to book and we will do it.

RESPONSE: Bye

Yes, hope to see you soon. Bye.

RESPONSE: Alcohol Pirates

There are bars inside the theatre selling alcoholic drinks and there is a price list and menu on every table.

RESPONSE: Alcohol served

There are two bars on board serving drinks. We recommend our delicious sangria.

RESPONSE: Describe type of boat

ACTION:
Get type of boat description

tour_id IN [iT71, iT131, iT195]

It is a glass bottom boat so you can watch the underwater marine life. The waters are crystal and vision is unequaled.

tour_id = iT189

Actually it is a theatre not a boat, but once it starts you will really believe you are on the Seven Seas with the pirates.

else

[TO BE DEFINED]

RESPONSE: Describe swimming

ACTION:
Get swimming description

tour_id IN [iT71, iT131, iT195, IT304]

Yes, there is swimming in the crystal clear sea is a real treat.

tour_id = iT237

Yes, you can swim at Marineland. There is a beach and a children's pool for the younger ones.

else

[TO BE DEFINED]

RESPONSE: Bring swimsuit

ACTION:
Get swimsuit description

tour_id IN [iT71, iT131, iT195, iT237, IT304]

Do not forget your towel and swimsuit!

else

[TO BE DEFINED]

RESPONSE: snorkels and masks

ACTION:
Get snorkel and mask description

tour_id IN [iT71, iT131, iT195]

Snorkels and masks are available for rent, but remember, we do not take cash on board.

else

[TO BE DEFINED]

RESPONSE: services on the boat

[iT195]
[iT131]
[iT71]

There are places to sightsee and places to relax. There are toilets of course, and a bar. You can also rent a mask and snorkel

RESPONSE: Pickup is included in the price

[iT131](pickup) = Y
[iT304](pickup) = Y

The price of this tour includes a free pickup from your hotel or from a meeting place convenient to where you are staying.

RESPONSE: Pickup is not included in the price

[iT71](pickup) = N
[iT189](pickup) = N
[iT195](pickup) = N
[iT237](pickup) = N

The price of this tour does not include a pickup, so your ticket will clearly state the place and time for the beginning of the tour.

RESPONSE: Getting to tours on your own

The time and the venue address will be on your tickets. It will depend on where you are staying, but generally I would recommend you take a taxi or a bus.

RESPONSE: Describe tour operating dates

[iT71](Operating_days): slot = M,W,F
[iT189](Operating_days): slot = M,W,F
[iT131](Operating_days): slot = "Several days a week. We'll check availability when we book."
[iT189](Operating_days): slot = "Several days a week. We'll check availability when we book."
[iT237](Operating_days): slot = "everyday"
[iT304](Operating_days): slot = "T,Th,SA"

That [tour] operates on (Operating_days).

RESPONSE: General duration question

[iT71](Duration): slot = "4 hours"
[iT189](Duration): slot = "show is 6pm to 8, but it is best to arrive at 5"
[iT131](Duration): slot = "4 hours"
[iT195](Duration): slot = "4 hours"
[iT237](Duration): slot = "It is open all day."
[iT304](Duration): slot = "It is an all-day trip."

That [tour] is (Duration).

RESPONSE: Describe tour price

ACTION:
Get tour price description

tour_id = iT71

On the 4 hour Dolphin watch, Adults are 45 euros, seniors 40 euros and children 4 to 12 are 22.5 euros. Infants under 4 are free.

tour_id = iT131

On the Paradise tour including pick up and dropoff at your hotel adults are 49 euros, children 3 to 10, 30 euros. Infants 2 and under are free.

tour_id = iT189

On the Pirates adventure an adult ticket is 39.99 euros and children aged 2 to 12 are 24.99 euros. Infants under 2 are free but they need a ticket but do not have an allocated seat or a meal.

tour_id = iT195

On the Paradise tour without hotel transfers adults, everyone over 12 years, pay 39 euros, children 3 to 11 years pay 18.50 euros and infants from 0 to 2 are free.

tour_id = iT237

Adult tickets for Marineland cost 27 euros, tickets for seniors over 65 and for children aged 5 to 10 cost 18 euros and tickets for infants aged 3 and 4 cost 12 euros. Babies under the age of 3 are free of charge.

tour_id = iT304

Adult tickets for the Island tour are 83 euros, children 4 to 12 are 41.50 euros and Infants 3 and under are free.

RESPONSE: Cancellation policy

ACTION:
Get cancel policy description

tour_id IN [iT71, iT131, iT195]

We provide a 100% refund of the total reservation if you cancel more than 3 days before the tour. If it is less than 3 days then it is 20% of the total reservation. Of course, if you are sick and have a doctor's certificate then there is always a full refund.

tour_id = iT189

These tickets are non-refundable after purchase. Sometimes the theater is able to switch tickets to another date, but this is not always possible.

tour_id = iT237

Tickets are non-refundable. But we can try helping if you run into a serious problem.

tour_id = iT304

I have no information about cancellation policy for this tour, but of course if you run into unforeseen circumstances we can try to help.

RESPONSE: Choose date for specific tour

ACTION:
Get {dates} for specific tour_id

{next_available_date}

The next available date for this tour is {next_available_date}. Does that work for you?

{next_available_date+1}

The next available date after that is {next_available_date+1}. Is that better for you?

{next_available_date+2}

Okay, the one after that is {next_available_date+2}.

{next_available_date+3}

Okay, that would be {next_available_date+2}. Is that a good day for you?

RESPONSE: What dates are you looking at?

Do you have a specific date in mind?

RESPONSE: Check specific date and tour

Let check if your tour operates on that date.

RESPONSE: Confirming tour choice

You have chosen {[nnn](tour)}, am I right? So, are we ready to book and pay for it?

RESPONSE: How many adults

How many adults in your group?

RESPONSE: How many children

How many children in your group?

RESPONSE: Age range definition

ACTION:
Get age definition by tour

tour_id = iT71

{senior_ticket} = > 65
{adult_ticket} = 13-64
{child_ticket} 4-12
{infant<4} = not necessary

On the 4 hour Dolphin watch, we have discounted tickets for Seniors, over 65, those over 12 are Adults and children are 4 to 12. and we dont need to reserve a ticket for those under 4.

tour_id = iT131

{adult_ticket} = >10
{child_ticket} 3-10
{infant<3} = not necessary

On the Paradise tour including pick up and dropoff at your hotel everyone over 10 years needs an adult ticket, and children tickets are for children 3 to 10 and we dont need to reserve a ticket for those under 2.

tour_id = iT189

{adult_ticket} = >12
{child_ticket} 2-12
{younger_child_ticket} = 1
{infant<2} = ticket is necessary

For the Pirates adventure dinner show we have adult tickets and children's tickets for those aged 2 to 12. Infants under 2 are free but they need a ticket.

tour_id = iT195

{adult_ticket} = >10
{child_ticket} 3-10
{infant<3} = not necessary

On the Paradise tour without hotel transfers everyone over 10 years needs an adult ticket, and children tickets are for children 3 to 10, and we dont need to reserve a ticket for those under 2.

tour_id = iT237

{senior_ticket} = > 65
{adult_ticket} = 13-64
{older_child_ticket} = 5-10
{younger_child_ticket} = 3-4
{infant<3} = not necessary

For Marineland we have special prices for Seniors over 65, for older children aged 5 to 10 and younger children aged 3 and 4. and we dont need to reserve a ticket for those under 3.

tour_id = iT304

{adult_ticket} = >12
{child_ticket} 4-12
{younger_child_ticket} = 1
{infant<3} = not necessary

For the Island tour we have adult tickets and children's tickets for those aged 4 to 12, and we dont need to reserve a ticket for those under 3.

RESPONSE: How many seniors

How many seniors?

RESPONSE: How many infants

How many infants?

RESPONSE: Availabilities confirmed

Great! We have places for all of you on the tour that day.

RESPONSE: Total price is...

That will be {total_price} euros altogether.

RESPONSE: Any special meals requirements

Does anyone in you party require special meals? gluten-free, vegetarian or vegan?

RESPONSE: You are at hotel XYZ...^

You are at hotel XYZ...

RESPONSE: Let's meet at {}.^

Let's meet at {}.

RESPONSE: Let's sort out best time and place for pickup

Let's sort out the best time and place for pickup

RESPONSE: No availability that day, try next available date?

I am so sorry we don't have any availability that day. Shall I try the next available date

RESPONSE: Next available date is ...

The next available date is ...

RESPONSE: No more available date

I am so sorry we don't have any availability dates for that tour.

RESPONSE: The tour is available on ...

The tour is available on ...

RESPONSE: Date unavailable

I am so sorry that date is not available.

RESPONSE: Date is available

That date is available.

RESPONSE: Sorry, that's it for now, please come back

I am sorry I wasn't able to find you the right tour on the right day. I suppose that's it for today. Perhaps you'll come back again when you want to book a different tour or different dates.

RESPONSE: Check other tours on that date?

If that's the date you want shall we see if there's vacancy on any other tours on that date?

RESPONSE: We have found one on {date}

Great, I found one on {date}

RESPONSE: Proceed to book it?

Shall we book it?

RESPONSE: What else can I tell you about that tour?

What else can I tell you about that tour?

RESPONSE: Will send message with time and place

We are sending you a message/email and the time and place will be very clear. There will also be a link that you should be able to open in your phone's map application.

RESPONSE: Meeting point is {tour_suggested_meeting_point}.

I found a meeting point for you. It is {tour_suggested_meeting_point}. Is it okay?

RESPONSE: Anything else?

Is there anything else I can help you with before we go?

RESPONSE: See you on the tour

I look forward to seeing you on the tour. Make sure you have your phone with you, otherwise I'll have a bit of trouble showing up.

RESPONSE: Don't forget

And don't forget your swim suits for all the tours except the Pirates Adventure. And when you go to the Pirate Adventure remember to get there early at 5:00 p.m. to get your seats and to enjoy the pre-show entertainment.

RESPONSE: Thanks. Bye for now.

Oh, thank you so much. Bye for now.

RESPONSE: Final suggestions

And lastly, do you have any suggestions on ways I can improve?

Can you give me any specific pointers on how I might be better in the future?

RESPONSE: Satisfaction level

Could you rate your general satisfaction with your experience with me today, with a number on scale of 1 to 5, where 1 is very unsatisfied and 5 is very satisfied?

RESPONSE: We will review this

We will review this so I can be better in my next conversation.

RESPONSE: I'm sorry I was unable to satisfy your requirements.

I'm sorry I was unable to satisfy your requirements.

RESPONSE: Thank you for the compliment

Thank you, that's so nice to hear!

RESPONSE: Did I provide the service you required?

So, before we say goodbye, may I ask if I was able to provide you with what you were looking for today? A simple yes or no would be great.

RESPONSE: Specific failed expectations

Okay, so may I ask how was I specifically unable to meet your expectations?

RESPONSE: Ask traveler name

May I have your full name please?

RESPONSE: I can't recognize your name.

My bad, I am still learning to recognize human names.

RESPONSE: Confirm traveler name

So, Did I get it right? {traveler_name}?

RESPONSE: Please type traveler name

I'm sorry. Would you mind if I asked you to type your full name in the space provided on the screen?

RESPONSE: Ask traveler email

And we will need your email address to send your tickets and receipt.

RESPONSE: I can't recognize your email.

That's a fail. I am still learning to recognize email addresses.

RESPONSE: Confirm traveler email

So, Did I get it right? {traveler_email}?

RESPONSE: Please type traveler email

Perhaps you would type your email address for me in the proper place on the screen.

RESPONSE: Ask traveler phone

May I have your cell number please?

RESPONSE: I can't recognize your phone.

I'm sorry, I thought I was getting better at recognizing phone numbers.

RESPONSE: Confirm traveler phone

So, Did I get it right? {traveler_phone}?

RESPONSE: Please type traveler phone

I'm sorry. Would you mind if I asked you to type your phone number in the space provided on the screen?

RESPONSE: Invalid number for adult

Please provide a valid number. You must have at least one adult for the tour.

RESPONSE: Invalid number for child

Please provide a valid number for child.

RESPONSE: Invalid number for senior

Please provide a valid number for senior.

RESPONSE: Invalid number for infant

Please provide a valid number for infant.

ACTION:
Check next available date by tour

Available date is found

Slot filled:
{tour_suggested_date}

Next available date is ...

l

No more available date

No more available date

l

ACTION: Validate num_adult

Is positive integer

Slot filled:
{num_adult}

else

Invalid number of adult

l

Loop back

ACTION:
Pick a random date by tour

A random date is available

Slot filled:
{tour_suggested_date}

The tour is available at ...

l

No more available date

No more available date

l

ACTION: Validate num_senior

Is Non-negative integer

Slot filled:
{num_senior}

else

Invalid number of senior

l

Loop back

ACTION: Validate num_infant

Is Non-negative integer

Slot filled:
{num_infant}

else

Invalid number of infant

l

Loop back

If a tour doesn't offer senior tickets, the system sets num_senior = 0 at the moment when the tour is determined.

In this case, the form will skip this slot.

If a tour doesn't offer infant tickets, the system sets num_senior = 0 at the moment when the tour is determined.
In this case, the form will skip this slot.

FORM: Tour Meeting Point Form

Form Loop

tour_meeting_point

Meeting point is {tour_suggested_meeting_point}

l

affirm

l

Will send message with time and place

l

deny

l

Get next meeting point

l

Slots filled:
{tour_suggested_meeting_point}

Loop back

Another meeting point?

l

Get next meeting point

l

Slots filled:
{tour_suggested_meeting_point}

Loop back

Upon Event

Active

Stop

General flow suspension message

l

Inactive

Inactive

Continue

General flow resume message

l

Active

Complete

Traveler Name Form

l

User co-ordinate is hardcoded for now.
This is a temporary workaround of not having user location detected.

Will sort this out later.

Depends on what is returned from iTicketing API.

Seems like the place and time are concatenated together from iTicketing.

So we can only show the string all at once.

Simon:
I have simplify the dialogue and revamp this as a form.
There is assumption, please note.

Please check FORM: Tour Pickup Form

l

Simon:
I have simplified the dialogue and revamped this as a form.
The form will ask slot on by one.
This is the easiest way for us now.

Please check FORM: Tour Detail Form

By unsetting the tour_date, the form will ask this information again if the user enters the form again.

GCH: This is just the name of the tour and photo poster. After seeing the poster the user may say "next" before hearing the description.

ACTION: Validate number of descriptions

if

first time

tell me about a tour (random)

l

Let me tell you about {tour_id}

l

Affirm

l

Describe Tour

l

Tell me other tours

l

not first time

ACTION: Pick another tour description

r

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)

Let me tell you about {tour_id}

l

Affirm

l

Describe Tour

l

Tell me other tours

l

Tell me other tours

l

Load metadata for the tour and set into tour_info slot

FORM: Tour Query Form

Form Loop

tour_name

Which tour have you chosen?

l

Pattern: tour_name

Validate tour_name

l

tell me about a tour (random)

l

Let me tell you about {tour_id}

l

Await user to affirm tour suggestion

l

Upon Event

Active

Stop

l

General flow suspension message

l

Inactive

Inactive

Continue

l

General flow resume message

l

Active

Completed

Describe Tour

l

Are you ready to book or any question?

l

Await user to affirm to book tour

l

Await user to affirm tour suggestion

Affirm

l

Describe Tour

l

Are you ready to book or any question?

l

Await user to affirm to book tour

l

tell me about a tour (random)

l

Suggest a tour

Let me tell you about {tour_id}

l

Await user to affirm tour suggestion

l

Tell me other tours

l

Suggest a tour

Let me tell you about {tour_id}

l

Await user to affirm tour suggestion

l

Not sure how to do it now?
Maybe just random it first.

ACTION:
Suggest a tour

Slot filled: {suggested_tour_info}

FORM: Tour Book Form

Form Loop

tour_name

Which tour shall I describe?

l

Pattern: tour_name

Validate tour_name

l

Tell me about specific tour

l

Validate tour_name

l

if

{tour_name} is set

Describe Tour

l

Are you ready to book or any question?

l

Await user to affirm to book tour

l

{tour_name} is not set

Tour Query Form

tell me about a tour (random)

l

Let me tell you about {tour_id}

l

Await user to affirm tour suggestion

l

Upon Event

Active

Stop

General flow suspension message

l

Inactive

Inactive

Continue

General flow resume message

l

Active

Completed

Tour Detail Form

What happens next?
Delete this block when you are done

Await user try booking with next available date

Affirm

l

Check next available date by tour

l

We have found one on {date}

l

Proceed to book it?

l

Await user to affirm with the tour on next available date

l

Deny

l

Check other tours on that date?

l

Affirm

l

Validate tour_date

l

Check tour availability by date

l

Deny

l

Sorry, that's it for now, please come back

l

ACTION: Check tour vacancies

l

Available seats

Availabilities confirmed

l

Total price is...

l

Get best meeting point

l

if

No pickup options

Let's meet at {tour_meeting_point}.

l

Traveler Name Form

Has pickup options

You are at hotel XYZ...

l

Let's sort out best time and place for pickup

l

Tour Meeting Point Form

l

Not enough seats

Slots unset:
{tour_date}

No availability that day, try next available date?

l

Await user try booking with next available date

l

Await user to affirm with the tour on next available date

Affirm

l

Traveler Detail Form

Deny

l

Sorry, that's it for now, please come back

l

TODO:

Bridge Alternative food choices...

If time is not enough, I really suggest to omit this path.

ACTION:
Get best meeting point

l

No pickup options

Slots filled:
{tour_meeting_point}

Has pickup options

Slots filled:
{tour_suggested_meeting_point}

FORM: Traveler Name Form

Form Loop

traveler_name

Ask traveler name

l

Pattern: human name

Validate traveler_name

l

if

{traveler_name} is not set

I can't recognize your name.

l

Loop Back

l

traveler_name_confirm

Confirm traveler name

l

affirm

l

Affirm traveler name

l

deny

l

Deny traveler name

l

traveler_name_widget

Please type traveler name

l

Entire string

Validate traveler_name_widget

Upon Event

Active

Stop

General flow suspension message

l

Inactive

Inactive

Continue

General flow resume message

l

Active

Complete

Set traveler name in info

l

Traveler Email Form

ACTION: Validate traveler_name

Recognised name
(Ali Adbul Al Nasri)

Slot filled: {traveler_name} = Ali Adbul Al Nasri

Unrecognised name
(&^%$#)

Slot unset: {traveler_name}

[Need help]

GCH:
If the user says "oh no I want to book something after all", it will go back to the conversation above?


Simon:
If the user gives up here, I think Zbee simply resets the form. So next time when the user comes back, she will need to start again.

Zbee has tried her best to suggest alternatives but the user simply doesn't want that suggestion. So I think here Zbee should reset the form.

c4

Anything else?

l

Request recommendations unrelated to tours

l

Nothing else right now

l

Did I provide the service you required?

l

Affirm

l

Thank you for the compliment

l

Deny

l

I'm sorry I was unable to satisfy your requirements.

l

Specific failed expectations

l

Specific failed expectations

l

Fill slot with {failed_expectation}

We will review this

l

Book another tour

l

Satisfaction level

l

Satisfaction level

l

Fill slot with {satisfaction} = n

Final suggestions

l

No final suggestions

l

Final suggestions

l

Fill slot with {improve_suggestion}

Thanks. Bye for now.

l

Thanks goodbye

l

See you on the tour

l

Don't forget

l

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

Slot filled: {traveler_name} = Ali Adbul Al Nasri

ACTION: Deny traveler name

Slot filled: {traveler_name_confirm} = False

FORM: Traveler Email Form

Form Loop

traveler_name

Ask traveler email

l

Pattern: email address

Validate traveler_email

l

if

{traveler_email} is not set

I can't recognize your email

l

Loop Back

l

traveler_email_confirm

Confirm traveler email

l

affirm

l

Affirm traveler email

l

deny

l

Deny traveler email

l

traveler_name_widget

Please type traveler email

l

Entire string

Validate traveler_email_widget

Upon Event

Active

Stop

General flow suspension message

l

Inactive

Inactive

Continue

General flow resume message

l

Active

Complete

Set traveler email in info

l

Traveler Phone Form

ACTION: Set traveler name in info

Name
(Ali Adbul Al Nasri)

Slot filled: {traveler_info.full_name} = Ali Adbul Al Nasri

Slots filled: {traveler_info.first_name} = Ali Adbul Al

Slots filled: {traveler_info.last_name} = Nasri

QUESTIONS
These seem overlapping responses? Which ones should be deleted?

c1SH

Is this the intention you have in mind?

"Is it possible to be picked up at a different meeting point?"

c1

ACTION: Validate traveler_email

Recognised email
(amit@beingai.com)

Slot filled: {traveler_email} = amit@beingai.com

Unrecognised email

Slot unset: {traveler_email}

ACTION: Affirm traveler email

Slot filled: {traveler_email_confirm} = True

Slot filled: {traveler_email_widget} = {traveler_email}

ACTION: Validate traveler_email_widget

Slot filled: {traveler_name_widget} = amit@beingai.com

Slot filled: {traveler_email} = amit@beingai.com

ACTION: Deny traveler email

Slot filled: {traveler_email_confirm} = False

ACTION: Set traveler email in info

Slot filled: {traveler_info.email} = amit@beingai.com

FORM: Traveler Phone Form

Form Loop

traveler_phone

Ask traveler phone

l

Pattern: phone number

Validate traveler_phone

l

if

{traveler_phone} is not set

I can't recognize your phone

l

Loop Back

l

traveler_phone_confirm

Confirm traveler phone

l

affirm

l

Affirm traveler phone

l

deny

l

Deny traveler phone

l

traveler_phone_widget

Please type traveler phone

l

Entire string

Validate traveler_phone_widget

Upon Event

Active

Stop

l

General flow suspension message

l

Inactive

Inactive

Continue

l

General flow resume message

l

Active

Complete

Set traveler phone in info

l

(?)

ACTION: Validate traveler_phone

Recognised phone
(0123456789)

Slot filled: {traveler_phone} = 0123456789

Unrecognised phone

Slot unset: {traveler_phone}

ACTION: Affirm traveler phone

Slot filled: {traveler_phone_confirm} = True

Slot filled: {traveler_phone_widget} = {traveler_phone}

ACTION: Deny traveler phone

Slot filled: {traveler_phone_confirm} = False

ACTION: Set traveler phone in info

Phone
(0123456789)

Slot filled: {traveler_info.phone} = 0123456789

FORM: Special Meal Requirement Form

Form Loop

special_meal_needed

Any special meals requirements

l

Affirm

l

Slot filled:
{special_meal_needed} = True

ACTION: go to alternative food choices

Deny

l

Slot filled:
{special_meal_needed} = False

Tour Meeting Point Form

l

Upon Event

Active

Stop

General flow suspension message

l

Inactive

Inactive

Continue

General flow resume message

l

Active

Complete

Set special meal requirement in info

Traveler Email Form

Go back to Traveler Detail Form to trigger the actions upon completion

TODO:

Implement form here...

ACTION: Validate traveler_phone_widget

Input
(0123456789)

Slot filled: {traveler_phone_widget} = 0123456789

Slot filled: {traveler_phone} = 0123456789

ACTION:
Get next meeting point

l

Slots filled:
{tour_suggested_meeting_point}

Now simply loop over the list

(?)

Zbee: Excellent. Please double check the information. Is it correct?

Zbee: Excellent. Please double check the information. Is it correct?

user choice

Entered info is correct

Zbee: After you accept the booking conditions please press the button PAY WITH CARD and you will be able to enter your card information.

Zbee: After you accept the booking conditions please press the button PAY WITH CARD and you will be able to enter your card i

user: I am typing in my card info.

Zbee: When you are done make sure to double check your card information and then press the button PAY.

user: I clicked Pay.

Interface with Stripe

Payment failure

Zbee: I'm sorry. there seems to be a bit of a problem with your card. Could you try again, maybe with a different card if you have one.

Repeated payment failure

Zbee: well, let's give it one last try.

final payment failure

Zbee: Well, that's really unfortunate. Our bank doesn't seem to be able to confirm payment with your cards. But now that you know how easy, and how much fun it is to book tickets with me, just come back and we'll book some new tickets as soon as you've solved this issue with your bank.

user: Thank you, Zbee, I will check with my bank. Good bye.

Zbee: Ok, yes, I look forward to seeing you again soon.

END SESSION

Payment success

Zbee: Congratulations! Your [iTnnn](tour) fully is booked. You'll receive your tickets in your email.

Zbee: Congratulations! Your [iTnnn](tour) fully is booked. You'll receive your tickets in your email.

ACTION: go to What else

Change the reservation

user: Can I add two more people?

Zbee: Let me try.

new data sent to iT API
along with old ID number

Entered info is incorrect

No: There's a mistake with my information.

Zbee: Can you edit it on-screen?

ACTION: go to Edit personal info on screen