当前位置: 首页 > 编程语言 > C#

LUIS-BotFrameworkMultipleDialogs,MoveIntentHandlingtoAnotherDialog分享

时间:2023-04-11 12:08:16 C#

LUIS/BotFrameworkMultipleDialogs,MoveIntentHandlingtoAnotherDialog我的目标是使用它们C#SDK将对话框和LUIS实现到MicrosoftBot框架应用程序。我正在尝试关注此线程https://github.com/Microsoft/BotBuilder/issues/127及其相关帖子(最后引用),但无法让我的代码在实践中发挥作用。这是我的RootDialog类。请注意,我创建了一个处理“GetProduct”意图的方法,当它获得这个意图时,它应该使用context.Forward()方法将LuisResult转发到ProductsDialog,但我只能看到它直接转到ResumeAfter方法,ProductsDialogCompleted。现在,这可能是我失败的地方,但我找不到显示多个LUIS对话框的示例。公共类RootDialog:LuisDialog{[LuisIntent("GetProduct")]privateasyncTaskGetProduct(IDialogContextcontext,LuisResultresult){awaitcontext.PostAsync("CallingProductsDialog...");awaitcontext.Forward(Chain.From(()=>newProductsDialog()),ProductsDialogCompleted,context.Activity,CancellationToken.None);}privateasyncTaskProductsDialogCompleted(IDialogContextcontext,IAwaitableresult){varresult=awaitresult;context.PostAsync("ProductsDialogCompleted)"+context.Wait(this.MessageReceived);}}publicclassProductsDialog:LuisDialog{publicasyncTaskStartAsync(IDialogContextcontext){awaitcontext.PostAsync("EnteredProductsDialog");context.Wait(this.MessageReceived);}[LuisIntent("None")]privateasyncTaskNone(IDialogContextcontext,LuisResultresult){context.Done(true);预期行为如下用户触发GetProduct意图Bot创建一个新对话框并转到StartAsync方法,等待另一个用户输入用户触发无意图对话框关闭,返回true并触发ProductsDialogCompleted。好像我没有正确绑定对话框。我怎么解决这个问题的?//publicasyncTaskPost([FromBody]Activityactivity){if(activity.Type==ActivityTypes.Message){awaitConversation.SendAsync(activity,()=>newRootDialog());}else{HandleSystemMessage(activity);}varresponse=Request.CreateResponse(HttpStatusCode.OK);返回响应;}privateActivityHandleSystemMessage(Activitymessage){if(message.Type==ActivityTypes.DeleteUserData){//在这里实现用户删除//如果我们处理用户删除,返回一个真实的消息}elseif(message.Type==ActivityTypes.ConversationUpdate){//处理对话状态变化,例如添加和删除成员//使用Activity.MembersAdded和Activity.MembersRemoved和Activity.Action获取信息//并非在所有频道中可用}elseif(message.Type==ActivityTypes.ContactRelationUpdate){//处理从联系人列表中添加/删除//Activity.From+Activity.Action代表发生了什么}elseif(message.Type==ActivityTypes.Typing){//处理知道用户是输入}elseif(message.Type==ActivityTypes.Ping){}returnnull;}}尝试从context.Forward调用中删除Chain.From(()Activity,CancellationToken.None);顺便说一句,如果您转发的消息命中None意图,那么ProductsDialogCompleted方法将被命中,因为您正在执行context.Done,这基本上结束了ProductsDialog。另外,请记住有一个LuisDialog基类中的LuisDialog方法,所以需要加上override关键字以上是C#学习教程:LUIS/BotFrameworkMultipleDialogs,MovingIntentHandling转到另一个对话框分享所有内容,如果有用给大家和需要了解更多C#学习教程的朋友多多关注,本文整理自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载,请注明出处:

最新推荐
猜你喜欢