我正在SDK V4中使用C#创建WebChatBot,其中包含具有瀑布步骤的多个对话框类。 在我在
成功认证后重定向int的dialogClass之一中STEP1:我在PromptOptions内为用户提供ChoicePrompt,并带有PromptText,Choices和RetryPrompt。 我想做或要实现的是,如果用户输入或键入的内容不是“选择”,则应该输入文本并回复适当的消息。我不是在谈论重试提示文本,而是在下面的示例中试图解释的内容:
1。步骤#1 :为用户提供选择提示类型的PomptOptions,例如return
await stepContext.PromptAsync(
"SchedulechoicePrompt",
new PromptOptions
{
Prompt = stepContext.Context.Activity.CreateReply("Please choose any of the following options: "),
Choices = new[] { new Choice { Value = "one" }, new Choice { Value = "Two" }, new Choice { Value = "Three" } }.ToList(),
RetryPrompt = stepContext.Context.Activity.CreateReply("Sorry, I did not understand that. Please choose/click on any one of the options displayed in below list to proceed"),
});
现在,如果用户输入的是上面不存在的内容,可以说四
当前它显示重试提示文本
我要实现的目标是使用此4并显示自定义消息,这不是有效的选项 如果我输入在重定向到此对话框之前用于身份验证的登录ID,我应该说一条自定义消息,说您已经登录,这里是您的选项,其中1,2,3选项再次显示 如果我输入另一个登录ID,则应该显示一条自定义消息,而不是应该显示用于登录的用户ID,并再次显示提示选项
现在,如果我输入的内容与显示的选项同义,例如:1,那么它应该转到下一个步骤,即
STEP#2 并执行相关功能。
如果显示其他任何内容,则应显示“重试提示”文本,并再次显示提示选项
步骤2:如果所选选项匹配,将执行所需的操作
如果您看到同时出现文本提示和选择提示(同时显示提示选项),或者两者都应该并行工作?
现在,如果可以使用C#中的Waterfall在V4中完成,那么任何人都可以详细地逐步说明如何实现它吗?
或 无法实现,这是不正确的期望吗?
语言:C# SDK:V4 所有的Nuget软件包和bot模拟器都是最新的
请让我逐步了解或尽可能详细地介绍我刚接触编码的情况,在Bot中,我需要详细了解它。
在V4 C#中没有获得任何实现方法的方法吗?
n / a,因为我现在不知道怎么做。
预期结果:作为PromptOptions的一部分显示的ChoiceOptions应该与提供的文本输入一起使用,并基于文本输入 提供了dsiplay自定义消息,如果是,则再次显示选项 输入错误,否则为同义词或给定选项为 在步骤1中选择,然后在步骤2中进行相关处理 被执行。
实际结果: n / a
答案 0 :(得分:1)
我已经尝试过类似的方法。您可以使用父对话框,并让当前对话框继承它。检查转弯级别是否中断,处理用户输入,然后从对话框停止的地方继续。
在父对话框中,实现InterruptAsync方法并处理用户输入。
private async Task<DialogTurnResult> InterruptAsync(DialogContext innerDc,CancellationToken cancellationToken)
{
if (innerDc.Context.Activity.Type == ActivityTypes.Message)
{
var text = innerDc.Context.Activity.Text.ToLowerInvariant();
switch (text)
{
case "help":
case "?":
await innerDc.Context.SendActivityAsync($"Show Help...", cancellationToken: cancellationToken);
return new DialogTurnResult(DialogTurnStatus.Waiting);
case "cancel":
case "quit":
await innerDc.Context.SendActivityAsync($"Cancelling", cancellationToken: cancellationToken);
return await innerDc.CancelAllDialogsAsync();
}
}
return null;
}
作为案例陈述,您可以编写不同的用户输入方案。