c# - 询问用户是否要更改 OnInterruptDialogAsync 中的技能
问题描述
目前我正在使用虚拟助手(4.x)框架。我在实施允许用户在使用特定技能时更改技能的流程时遇到困难。意思是他们是否在技能 A 中,如果他们触发了技能 BI 的意图,想问他们是否真的想去技能 B 或者他们是否想留在技能 A。我目前添加了代码,可以看到用户触发了不同技能的意图。询问用户输入以查看用户是否真的想在另一个技能中间转移到另一个技能的最佳方法是什么?
解决方案
我建议您将您的技能视为复杂的对话而不是实际技能。这样,如何处理这种类型的中断应该是相对清楚的。
就个人而言,我是瀑布的粉丝。
//FIRST
AddDialog(new ConfirmPrompt(nameof(ConfirmPrompt)));
AddDialog(new WaterfallDialog(nameof(STARTSKILLB), new WaterfallStep[]
{
AskStepAsync,
LoopStepAsync
}));
//LATER, ON CHECKING INTENTS
switch(intent)
{
case "SkillA":
await KEEPONSKILLA(turnContext, cancellationToken);
break;
case "SkillB":
await stepContext.BeginDialogAsync(nameof(STARTSKILLB), cancellationToken);
break;
}
//THEN THIS
private async Task<DialogTurnResult> AskStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var messageText = $"Would you like to go chill in Skill B?";
var promptMessage = MessageFactory.Text(messageText, messageText, InputHints.ExpectingInput);
return await stepContext.PromptAsync(nameof(ConfirmPrompt), new PromptOptions { Prompt = promptMessage }, cancellationToken);
}
}
private async Task<DialogTurnResult> LoopStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
if ((bool)stepContext.Result)
{
//shift on over to skill B
}
//End this dialog, routing back up to where you left off in Skill A
return await stepContext.EndDialogAsync(null, cancellationToken);
}
推荐阅读
- azure - 错误 - 访问被拒绝 - 部署到 Azure 应用服务
- javascript - React Native map() 和数组中的 JSX 元素
- python - MSC 构建的 Python 和 GCC 构建的 Python 有什么区别?
- javascript - React - Native:可能未处理的承诺拒绝(id:120)
- r - 比较 R 中的字符列表
- javascript - 我怎样才能从这个单一的类中创建一个单独的类?
- javascript - Angular ClickEvent 只能绑定到完整文档而不是剑道树视图
- sql - Report Builder 3.0 - 如何使用大型数据集运行此报告?
- c++ - CcInitializeCacheMap 发生崩溃
- python - 如何将列表映射到具有重复值的列python