We use cookies for functional and analytical purposes. Please refer to our Privacy Policy for details.

NEW Try Zapier integration to connect Dasha instantly to thousands of the most popular apps!

Skyrocket your shopping cart conversion rate with a simple conversational AI app

Today we’ll be taking a look at how to create a conversational AI app that calls customers who’ve added an item to the cart but haven’t checked out. This app will be most applicable to online tech stores. Yet by following the logic of this demo, you can easily adjust the conversational flow to fit your business.

Set up your conversational AI workplace

You will need VSCode (Visual Studio Code), NPM, and Node.js, all the latest versions. As the next step, join Dasha developer community so that you can get your API key and be able to get assistance from our developers every step of the way.

To ease your coding process, you’ll need to download the Dasha Studio extension right from the VSCode extensions tab.

Once done, download Dasha Blank Slate App, open the folder in VSCode, and install Dasha CLI (command line interface by typing npm i -g "@dasha.ai/cli" in the VSCode terminal. For more on Dasha CLI usage, refer to this post.

In case you need assistance, ask in our developer community, and here is a step-by-step tutorial on getting started.

Now, clone and open a project with this cart checkout app source code here.

Once done with setting everything up you can move on to the coding part itself.

Get to know what you’ll use to create a cart checkout conversational AI app

There are 3 files you’ll be using: main.dsl, data.json, and index.js. Let’s take a quick look at the functions of these three.

Main.dsl - this is where you’ll write your DashaScript Language code to create the workflow of your conversational AI app. With Dasha Studio extension on and with the directions in this post, it’ll be an easy job for you. Data.json - this is where you set the intents and entities(AKA NER, AKA Named Entity Recognition). The neural network will use intents and entities you’ll create to learn. Index.js - it’s the NodeJS file that launches the Dasha SDK. Here you’ll be adding any external functions you deem necessary once adapting the code to your hotel’s needs.

Build your conversational AI app

The most important point to mention is that this app relies heavily on the intents and entities we set in the data.json file. Wherever you see #messageHasIntent(“name of intent”) is what triggers the intent from the data.json file, intents section.

When you open the data.json file, you see the following:

1{
2 "version": "v2",
3 "intents": {
4 "yes": {
5 "includes": [
6 "yes",
7 "correct",
8 "sure",
9 "absolutely",
10 "yes siree bob",
11 "right",
12 "yep",
13 "you got it",
14 "I would",
15 "yeah",
16 "I would",
17 "I'd like that",
18 "I wouldn't mind",
19 "I would not mind",
20 "sure thing",
21 "yeah",
22 "yea",
23 "certainly",
24 "absolutely",
25 "totally",
26 "mhm"
27 ],
28 "excludes": [
29 "fuck off"
30 ]
31 },
32 "no": {
33 "includes": [
34 "no",
35 "definitely not",
36 "wrong",
37 "incorrect",
38 "I do not",
39 "I don't",
40 "I would not",
41 "I wouldn't",
42 "nope",
43 "no, I'm okay",
44 "not right now",
45 "not this time",
46 "nah",
47 "not this moment",
48 "not now"
49 ],
50 "excludes": [
51 "yes"
52 ]
53 },
54 "price_too_high": {
55 "includes": [
56 "cost too much",
57 "price was too high",
58 "the price was too high",
59 "way too high of a price",
60 "cost was too high",
61 "price was too much",
62 "pay that much",
63 "pay so much",
64 "too expensive",
65 "expensive",
66 "price was a deal breaker",
67 "cost too much",
68 "cost way too much",
69 "costs a lot",
70 "couldn't afford",
71 "couldn't afford at this price"
72 ]
73 },
74 "free_delivery_sounds_good": {
75 "includes": [
76 "free delivery sounds good",
77 "free delivery sounds lovely",
78 "free delivery sounds fantastic",
79 "free delivery sounds awesome",
80 "free delivery sounds great",
81 "love free delivery",
82 "wouldn't mind a free delivery",
83 "like not having to pay for the delivery",
84 "love not having to pay for the delivery"
85 ]
86 },
87 "found_it_elsewhere": {
88 "includes": [
89 "found it elsewhere",
90 "found another place",
91 "found a better place",
92 "found a new place",
93 "found another website",
94 "found a new website",
95 "found a better site",
96 "found a better company",
97 "found it at another company",
98 "founding it at another website"
99 ]
100 },

The list of intents goes on and on. You write the intents down yourself based on what you think the user might say or what they have historically said in similar situations.

Entities come into play when you write down #messageHasData(“entity name”) (or #messageGetData(“entity name”). Here’s an example:

1 "entities": {
2 "laptop_model": {
3 "open_set": true,
4 "values": [
5 {
6 "value": "A11",
7 "synonyms": [
8 "A 11",
9 "A eleven",
10 "the A 11 model",
11 "A11 model",
12 "model A11",
13 "2011 model",
14 "year two thousand eleven model"
15 ]
16 },
17 {
18 "value": "A12",
19 "synonyms": [
20 "A 12",
21 "A twelve",
22 "A twelve model",
23 "model from two thousand twelve",
24 "the 2012 model",
25 "year 2012 model"
26 ]
27 },
28 {
29 "value": "A13",
30 "synonyms": [
31 "A 13",
32 "A thirteen",
33 "A thirteen model",
34 "model from two thousand thirteen",
35 "the 2013 model",
36 "year 2013 model"
37 ]
38 },
39 {
40 "value": "A14",
41 "synonyms": [
42 "A 14",
43 "A fourteen",
44 "A fourteen model",
45 "model from two thousand fourteen",
46 "the 2014 model",
47 "year 2014 model"
48 ]
49 },
50 {
51 "value": "A15",
52 "synonyms": [
53 "A 15",
54 "A fifteen",
55 "A fifteen model",
56 "model from two thousand fifteen",
57 "two thousand fifteen model",
58 "the 2015 model",
59 "year 2015 model"
60 ]
61 }
62 ],
63 "includes": [
64 "I'm looking for the (A 14)[laptop_model] model",
65 "I'd like an (A twenty)[laptop_model] model",
66 "I want to get an (A seventeen)[laptop_model] laptop model",
67 "buy the (two thousand fifteen model)[laptop_model]"
68 ]
69 }
70 }
71}

At this point, go to the main.dsl file and delete everything from there. Then, just follow the instructions to create the cart checkout AI app!

Now that you have your main.dsl file empty, it’s time to take a step forward and import the common libraries. Then, set your variables. In this case, we’ll have one input variable, which is the user’s phone number.

Right after that write a start node named root. It’s where you’ll establish a connection with the user’s phone, say the welcome message, and go from there.

After you’ve written out the start node, we can move forward with the nodes and digressions that can appear throughout the conversation with the user. At this point, we want to make sure the user has enough time to talk about their cart checkout. If the call was made at a convenient time and the user lets us know so, we transition to node how_can_i_assist. If Dasha called at an inconvenient time, the conversation will move to the node bye where we thank the user for the time and end the call.

1// Import the commonReactions library so that you don't have to worry about coding the pre-programmed replies
2import "commonReactions/all.dsl";
3context
4{
5// Declare the input variable - phone. It's your hotel room phone number and it will be used at the start of the conversation.
6 input phone: string;
7// Storage variables. You'll be referring to them across the code.
8 new_model: string="";
9}
10// A start node that always has to be written out. Here we declare actions to be performed in the node.
11start node root
12{
13 do
14 {
15 #connectSafe($phone); // Establishing a safe connection to the user's phone.
16 #waitForSpeech(1000); // Waiting for 1 second to say the welcome message or to let the user say something
17 #sayText("Hi, this is Dasha with JJC Group. I see you have the latest model of the Pear laptop in your cart and haven't completed the order on our website. Is it a good time to talk?"); // Welcome message
18 wait *; // Wating for the user to reply
19 }
20 transitions // Giving directions to which nodes the conversation will go to
21 {
22 how_can_i_assist: goto how_can_i_assist on #messageHasIntent("yes");
23 bye: goto bye on #messageHasIntent("no");
24 }
25}
26node how_can_i_assist
27{
28 do
29 {
30 #sayText("Wonderful! This won't take too long. I was just wondering if you have any concerns regarding the purchase of the laptop that's in your cart?");
31 wait*;
32 }
33 transitions
34 {
35 }
36}
37node bye
38{
39 do
40 {
41 #sayText("Thanks for your time. We're looking forward to you shopping with us! Have a great day. Bye!");
42 exit;
43 }
44}

If the user decides to continue the conversation regarding their cart checkout, we need to consider the possible reasons why the user hasn’t checked out in the first place. For the purpose of this demo, let’s consider the following reasons:

the price of the wanted item might have been too high; the item was found elsewhere, where the price/delivery/etc was more appealing; the user decided he needed to get some other item instead; they decided to get a different model of the item; the user might not have had enough money to complete the purchase for various reasons (waiting for a paycheck, not enough money in the bank account, etc); the delivery price was too high; the company doesn’t ship to their country; they might have been simply browsing your website, considering their options.

These are just a few reasons. However, when you adjust this code to your business’s needs, you should thoroughly think about all the possible reasons for your user not going through the funnel till the very end.

Now, let’s take a look at each of these in detail and write down the ways to change the user’s mind and help him decide to go complete the cart checkout process.

Say the user found the price to be too high, in this case scenario we could offer them a discount on the current or the next purchase. If they don’t accept this offer, we can program the conversation to go to the node where we ask if they have any other issues or concerns. If they do accept it, we go to the node complete_purchase.

1digression offer_discount
2{
3 conditions {on #messageHasIntent("price_too_high");}
4 do
5 {
6 #sayText("I totally understand your concern and I have a sweet offer for you to consider! How would you feel about a 3 percent discount on this purchase?");
7 wait*;
8 }
9 transitions
10 {
11 any_other_concern: goto any_other_concern on #messageHasIntent("no");
12 complete_purchase: goto complete_purchase on #messageHasIntent("yes");
13 }
14}
15node complete_purchase
16{
17 do
18 {
19 #sayText("Fantastic, glad you liked it! I've added the discount for the purchase to your account, hope you enjoy your shopping experience with us! Bye bye!");
20 exit;
21 }
22}

Let’s say the user says they’ve found the same item elsewhere. We can ask about what made the user want to look for the item they wanted at another place, and then go from there:

1digression found_it_elsewhere
2{
3 conditions {on #messageHasIntent("found_it_elsewhere");}
4 do
5 {
6 #sayText("Well, that happens! I'm glad you were able to find what you were looking for, even if it wasn't with us. But could I ask you what made you decide to look at another place?");
7 wait*;
8 }
9 transitions
10 {
11 ask_if_purchased: goto ask_if_purchased on #messageHasIntent("cheaper_elsewhere");
12 free_delivery_elsewhere: goto free_delivery_elsewhere on #messageHasIntent("free_delivery_elsewhere") or #messageHasIntent("delivery_price_too_high");
13 more_options_elsewhere: goto more_options_elsewhere on #messageHasIntent("more_options_elsewhere") or #messageHasIntent("another_option_elsewhere");
14 future_discount: goto future_discount on #messageHasIntent("price_too_high");
15 }
16}
17node more_options_elsewhere
18{
19 do
20 {
21 #sayText("Ah, I understand. JJC group has lots of different options of various laptops you can choose from. I just sent a selection of different laptop models you might like. It's now available on your web account. I hope you like the seleciton and find some options you like most. Does this sound good?");
22 wait*;
23 }
24 transitions
25 {
26 bye: goto bye on #messageHasIntent("sounds_good") or #messageHasIntent("free_delivery_sounds_good");
27 final_offer_bye: goto final_offer_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure") or #messageHasIntent("sounds_bad");
28 }
29}
30node future_discount
31{
32 do
33 {
34 #sayText("I totally understand your concern. What I can do for you is offer a 5 percent discount on your next purchase. I hope this improves your shopping experience with us! Would you be okay with this future discount?");
35 wait*;
36 }
37 transitions
38 {
39 bye: goto bye on #messageHasIntent("sounds_good") or #messageHasIntent("yes");
40 final_offer_bye: goto final_offer_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure") or #messageHasIntent("sounds_bad");
41 }
42}

In case the user only said they’ve found the item elsewhere but said nothing about purchasing it, we can ask whether the item was actually bought:

1node ask_if_purchased
2{
3 do
4 {
5 #sayText("Uh-huh, understood. May I ask if you've bought it at that other place?");
6 wait*;
7 }
8 transitions
9 {
10 offer_new_item_discount: goto offer_new_item_discount on #messageHasIntent("yes") or #messageHasIntent("purchased_elsewhere");
11 offer_discount: goto offer_discount on #messageHasIntent("no") or #messageHasIntent("didn't_purchase_elsewhere");
12 }
13}
14node offer_new_item_discount
15{
16 do
17 {
18 #sayText("Gotcha. I hope you enjoy your new purchase! And just as a small gift from us I'd like to offer you a 5 percent discount on all the laptop accessories we have.");
19 wait*;
20 }
21 transitions
22 {
23 bye: goto bye on #messageHasIntent("no") or #messageHasIntent("sounds_bad");
24 offer_expires_soon_bye: goto offer_expires_soon_bye on #messageHasIntent("yes") or #messageHasIntent("sounds_good");
25 }
26}

Now let’s write down the way the conversation should go in case the user says they need another model of the laptop:

1digression ask_another_model
2{
3 conditions {on #messageHasIntent("another_model");}
4 do
5 {
6 #sayText("Do you have a specific model in mind?");
7 wait*;
8 }
9 transitions
10 {
11 other_models: goto other_models on #messageHasIntent("no") or #messageHasIntent("unsure");
12 another_model: goto another_model on #messageHasData("laptop_model");
13 }
14}
15digression other_models
16{
17 conditions {on #messageHasIntent("unsure") or #messageHasIntent("models_available");}
18 do
19 {
20 #sayText("I just sent a link to all the similar models we have to your email. You'll find all the features, price, and all the other info you need right there. It's gonna be a pretty useful link for you! Now, do you have any other concerns regarding your purchase?");
21 wait*;
22 }
23 transitions
24 {
25 how_may_i_help: goto how_may_i_help on #messageHasIntent("yes");
26 email_sent_bye: goto email_sent_bye on #messageHasIntent("no");
27 }
28}
29node how_may_i_help
30{
31 do
32 {
33 #sayText("What may I help you with?");
34 wait*;
35 }
36 transitions
37 {
38 }
39}
40digression how_may_i_help
41{
42 conditions {on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure");}
43 do
44 {
45 #sayText("Is there anything I can do to improve your shopping experience with us or help you in any kind of way?");
46 wait*;
47 }
48}
49node email_sent_bye
50{
51 do
52 {
53 #sayText("Awesome. The email must have reached you by now, so check it out! Thank you for taking the time to talk, have an awesome day! Bye!");
54 exit;
55 }
56}
57node other_models
58{
59 do
60 {
61 #sayText("I just sent a link to all the similar models we have to your email. You'll find all the features, price, and all the other info you need right there. It's gonna be a pretty useful link for you! Now, do you have any other concerns regarding your purchase?");
62 wait*;
63 }
64 transitions
65 {
66 how_may_i_help: goto how_may_i_help on #messageHasIntent("yes");
67 email_sent_bye: goto email_sent_bye on #messageHasIntent("no");
68 }
69}
70digression another_model
71{
72 conditions {on #messageHasData("laptop_model");}
73 do
74 {
75 set $new_model = #messageGetData("laptop_model")[0]?.value??"";
76 #sayText("We have " + $new_model + " available! I've just added to your cart. And as a small gift I'll added a 3 percent discount coupon to your next purchase. Does this offer sound good to you?");
77 wait *;
78 }
79 transitions
80 {
81 send_link_to_purchase: goto send_link_to_purchase on #messageHasIntent("yes") or #messageHasIntent("sounds_good");
82 final_offer_bye: goto final_offer_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure");
83 }
84}
85node send_link_to_purchase
86{
87 do
88 {
89 #sayText("Perfect, I'm glad to hear that! You'll see the laptop added to your cart and also I'm about to send a link to your email which will let you complete the purchase in one click. Thank you for taking the time to talk, have an awesome day! Bye!");
90 exit;
91 }
92}
93node another_model
94{
95 do
96 {
97 set $new_model = #messageGetData("laptop_model")[0]?.value??"";
98 #sayText("We have " + $new_model + " available! I've just added to your cart. And as a small gift I'll added a 3 percent discount coupon to your next purchase. Does this offer sound good to you?");
99 wait *;
100 }
101 transitions
102 {
103 send_link_to_purchase: goto send_link_to_purchase on #messageHasIntent("yes") or #messageHasIntent("sounds_good");
104 final_offer_bye: goto final_offer_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure");
105 }
106}

Note that in this part of the code we have nodes and digressions with the same name. It’s not a mistake - nodes and digressions serve different purposes. Digressions exist to enter the conversation once the conversation goes off on a tangent. You can read more about digressions in this post.

Let’s consider the reason being the user not having enough money to fund complete the cart checkout process:

1digression payment_options
2{
3 conditions {on #messageHasIntent("waiting_for_salary") or #messageHasIntent("not_enough_money");}
4 do
5 {
6 #sayText("Gotcha. I wanted to let you know that we have an installment plan you can take advantage of. Is it something you feel like considering?");
7 wait*;
8 }
9 transitions
10 {
11 confirm_installment: goto confirm_installment on #messageHasIntent("yes") or #messageHasIntent("agreed_installment");
12 trade_in: goto trade_in on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure");
13 }
14}
15digression installment_plan
16{
17 conditions {on #messageHasIntent("installment_plan");}
18 do
19 {
20 #sayText("That's right, we have an installment plan you can take advantage of. Is it something you feel like considering?");
21 wait*;
22 }
23 transitions
24 {
25 confirm_installment: goto confirm_installment on #messageHasIntent("yes") or #messageHasIntent("agreed_installment");
26 trade_in: goto trade_in on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure");
27 }
28}
29node confirm_installment
30{
31 do
32 {
33 #sayText("Alright, you can now use the installment plan option for your purchase! Is there anything else I can help you with?");
34 wait*;
35 }
36 transitions
37 {
38 bye: goto bye on #messageHasIntent("no");
39 how_may_i_help: goto how_may_i_help on #messageHasIntent("yes") or #messageHasIntent("something_else_to_ask");
40 }
41}
42node trade_in
43{
44 do
45 {
46 #sayText("Oh, by the way, there's also a trade in option. You can bring your old laptop to us and have a heavy discount for a new one. Does this sound like a plan?");
47 wait*;
48 }
49 transitions
50 {
51 confirm_trade_in: goto confirm_trade_in on #messageHasIntent("yes") or #messageHasIntent("agreed_trade_in") or #messageHasIntent("sounds_good");
52 final_offer_bye: goto final_offer_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure") or #messageHasIntent("sounds_bad");
53 }
54}
55digression trade_in
56{
57 conditions {on #messageHasIntent("trade_in");}
58 do
59 {
60 #sayText("Absolutely! We do have a trade in option. You can bring your old laptop to us and have a heavy discount for a new one. Does this sound like a plan?");
61 wait*;
62 }
63 transitions
64 {
65 confirm_trade_in: goto confirm_trade_in on #messageHasIntent("yes") or #messageHasIntent("agreed_trade_in") or #messageHasIntent("sounds_good");
66 final_offer_bye: goto final_offer_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure") or #messageHasIntent("sounds_bad");
67 }
68}
69node confirm_trade_in
70{
71 do
72 {
73 #sayText("Alright, I've made a note of this. You can come to any convenient location for the trade-in, or send your laptop to us via mail and do the rest online. Is there anything else I can help you with?");
74 wait*;
75 }
76 transitions
77 {
78 bye: goto bye on #messageHasIntent("no");
79 how_may_i_help: goto how_may_i_help on #messageHasIntent("yes") or #messageHasIntent("something_else_to_ask");
80 }
81}
82node final_offer_bye
83{
84 do
85 {
86 #sayText("As a final offer I would like to give you a 5 percent discount coupon, I just added it to your account. It expires in two weeks so make sure you don't lose the opportunity to use the discount! Thank you for taking the time to chat, bye bye!");
87 exit;
88 }
89}

The following digressions and nodes follow the same logic at the previous ones, so it will be easy for you to navigate. Let’s now write out the way the conversation should go in case the user has concerns regarding the delivery/shipping:

1digression delivery_price_too_high
2{
3 conditions {on #messageHasIntent("delivery_price_too_high");}
4 do
5 {
6 #sayText("I'm sorry you feel that way! What I can do for you this time is offer you a one-time free delivery. How does that sound?");
7 wait*;
8 }
9 transitions
10 {
11 offer_expires_soon_bye: goto offer_expires_soon_bye on #messageHasIntent("yes") or #messageHasIntent("sounds_good");
12 final_offer_bye: goto final_offer_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure");
13 }
14}
15digression country_delivery
16{
17 conditions {on #messageHasIntent("my_country_delivery");}
18 do
19 {
20 #sayText("I apologize for the inconvenience! We can think of a way to send you your purchase. We have a USPS delivery option and it does deliver to your country. The delivery costs 57 dollars. How does this sound to you?");
21 wait*;
22 }
23 transitions
24 {
25 send_with_usps: goto send_with_usps on #messageHasIntent("yes") or #messageHasIntent("sounds_good");
26 no_dice_bye: goto no_dice_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("sounds_bad") or #messageHasIntent("unsure");
27 }
28}
29node offer_expires_soon_bye
30{
31 do
32 {
33 #sayText("Okay! Just to let you know this offer expires in 2 weeks, so make sure you use it before it expires. Is there anything else I could help you with?");
34 wait*;
35 }
36 transitions
37 {
38 bye: goto bye on #messageHasIntent("no");
39 how_may_i_help: goto how_may_i_help on #messageHasIntent("yes") or #messageHasIntent("something_else_to_ask");
40 }
41}
42node send_with_usps
43{
44 do
45 {
46 #sayText("Perfect, you'll have an option in your account to check out and get your laptop delivered by USPS. Do you have any questions?");
47 wait*;
48 }
49 transitions
50 {
51 bye: goto bye on #messageHasIntent("no");
52 how_may_i_help: goto how_may_i_help on #messageHasIntent("yes") or #messageHasIntent("something_else_to_ask");
53 }
54}
55node free_delivery_elsewhere
56{
57 do
58 {
59 #sayText("Got that. I understand what you mean. We care about our customers having the best experience possible, so I would like to offer you free delivery for your next purchase. How does that sound to you?");
60 wait*;
61 }
62 transitions
63 {
64 bye: goto bye on #messageHasIntent("sounds_good") or #messageHasIntent("free_delivery_sounds_good");
65 final_offer_bye: goto final_offer_bye on #messageHasIntent("no") or #messageHasIntent("need_to_consider") or #messageHasIntent("unsure") or #messageHasIntent("sounds_bad");
66 }
67}

Considering that the user might have simply been browsing the website, let’s write down a node for that:

1digression was_just_browsing
2{
3 conditions {on #messageHasIntent("was_just_browsing");}
4 do
5 {
6 #sayText("Haha okay, that's fine too! Just so you know, we have a big sale coming up, so watch out for an email announcement! Thank you for taking the time to talk, have an awesome day! Bye!");
7 exit;
8 }
9}

Don’t forget that the user might not be sure about something and have concerns or issues they haven’t spoken about yet:

1node any_other_concern
2{
3 do
4 {
5 #sayText("Do you have any other concerns regarding completing the purchase?");
6 wait*;
7 }
8 transitions
9 {
10 }
11}
12digression not_sure
13{
14 conditions {on #messageHasIntent("unsure");}
15 do
16 {
17 #sayText("In this case, may I ask what are you concerned about?");
18 wait*;
19 }
20}

Here the transitions section is empty since the nature of the concern could be anything and the conversation would move to one of the digressions from here.

Almost done!

There are going to be times when there’s no way to convince the user to finish the cart checkout process. Let’s account for that with node no_dice_bye:

1node no_dice_bye
2{
3 do
4 {
5 #sayText("I'm sorry I couldn't be of help to you today. Thank you for taking the time to talk, have an awesome day! Bye!");
6 exit;
7 }
8}

And done!

I suggest you adjust this conversational AI app to the needs of your business and to the industry your business is in. Don’t forget to join Dasha developer community for guidance throughout this exciting journey. It’s a great community to meet like-minded developers.

Enjoy the coding process and godspeed!

Related Posts

Contact sales