首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊天机器人项目中使用Dialog实现分支任务

我们本节来学习如何通过的库实现分支任务。

什么是分支任务?就是在和聊天机器人对话的过程中,具有条件判断的业务逻辑执行,例如本例中,如果年龄超过35岁会建议购买一份保险,询问购买保险的这个任务就属于一个分支任务。

在开始本章之前,我们需要使用如下两章创建的代码,请在开始本章之前,先阅读并遵循步骤创建一个项目:

按照上面两篇文章一步一步做完,就有了一个实现了收集用户昵称和年纪的聊天系统了,本章为了说明如何使用分支任务,我们再在里添加一个方法,该方法根据年龄来判断,如果用户的年龄大于35岁,询问用户是否愿意购买一份人身意外保险。

开始代码

首先我们需要打开文件, 添加如下的代码:

添加一个包的引用:

添加一个选择框,询问用户是否要购买保险。

添加一个用于处理选择框的方法。

在头部添加包引用:

usingMicrosoft.Bot.Builder.Dialogs.Choices;

更改构造器函数,添加需要的代码, 完成代码如下:

publicMainDialog() :base(nameof(MainDialog))

{

AddDialog(newTextPrompt("get-nick-name", NickNameNotNull));

AddDialog(newNumberPrompt("get-age"));

AddDialog(newChoicePrompt(nameof(ChoicePrompt)));

AddDialog(newWaterfallDialog(nameof(WaterfallDialog),newWaterfallStep[]{

GetNickName,

GetAge,

SetAgeForHealth,

ShowNickNameAndAge,

}));

InitialDialogId=nameof(WaterfallDialog);

}

注意这里添加的和在里添加的方法名:

我们现在来实现这个方法::

publicasyncTaskSetAgeForHealth(WaterfallStepContextwaterfallStepContext,CancellationTokencancellationToken)

{

varAge=Convert.ToInt32(waterfallStepContext.Result.ToString());

waterfallStepContext.Values["Age"]=Age;

if( Age>35)

{

varoptions=newPromptOptions()

{

Prompt=MessageFactory.Text("您愿意购买一份保险吗?"),

RetryPrompt=MessageFactory.Text("请您选择是否要购买保险。"),

Choices=GetChoices(),

};

returnawaitwaterfallStepContext.PromptAsync(nameof(ChoicePrompt), options, cancellationToken);

}

else

{

returnawaitwaterfallStepContext.NextAsync(cancellationToken);

}

}

从代码里可以看到当年龄大于35周岁时,这个时候开始做分支任务了。

最后我们还需要修一下方法:, 以便处理分支任务。

publicasyncTaskShowNickNameAndAge(WaterfallStepContextwaterfallStepContext,CancellationTokencancellationToken)

{

varAge=Convert.ToInt32(waterfallStepContext.Values["Age"]);

varNickName=waterfallStepContext.Values["NickName"];

varreply=waterfallStepContext.Context.Activity.CreateReply();

reply.Text=$"您好,您输入的昵称是:, 您输入的年龄是:";

if(Age>35)

{

varchoice=((FoundChoice)waterfallStepContext.Result).Value;

if(choice.Equals("购买保险"))

{

reply.Text+="您为自己购买了一份人身保险。";

}

}

awaitwaterfallStepContext.Context.SendActivityAsync(reply, cancellationToken);

returnawaitwaterfallStepContext.EndDialogAsync(null, cancellationToken);

}

最后,需要注意的是,我们使用了这个, 我们需要定义一个返回选项的方法;

privateIListGetChoices()

{

varcardOptions=newList()

{

newChoice() { Value="购买保险", Synonyms=newList() {"买","购买","够"} },

newChoice() { Value="不购买保险", Synonyms=newList() {"不","不买"} },

};

returncardOptions;

}

至此实现分支任务的全部代码都已经完成,运行一下,当问你的年龄的时候,输入36, 可以看到出发了分支任务:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20221104A00SOU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券