0

我正在使用 SDK V4 中的 C# 创建一个 WebChatBot,其中包含多个具有瀑布步骤的对话框类。在成功验证后我重定向 int 的一个 dialogClass 中

第 1 步:我在 PromptOptions 中使用 PromptText、Choices 和 RetryPrompt 为用户提供一组 ChoicePrompt。我想要做或实现的是,如果用户输入或键入除了选项以外的任何内容,它应该接受文本并回复适当的消息。我不是在谈论重试提示文本,而是在下面的示例中试图解释的内容:

1. 第 1步:为用户提供选择提示类型的 PomptOptions,例如返回

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# 中的瀑布在 V4 中完成,任何人都可以详细说明一步一步的指南或方式如何实现这一目标吗?

还是无法实现这是不正确的期望?

语言:C# SDK:V4 所有 Nuget 包和机器人模拟器都是最新的

请让我逐步或尽可能详细地告诉我,因为我是编码新手,也是在 Bot 中,我需要详细了解它。

没有得到任何东西如何在 V4 C# 中实现它?

不适用,因为我现在不知道该怎么做。

预期结果:作为 PromptOptions 的一部分显示的 ChoiceOptions 应与提供的文本输入一起使用,并基于提供的文本输入 dsiplay 自定义消息,如果输入不正确,或者如果它是同义词或在 STEP# 中选择了给定选项,则再次显示选项1 然后在 STEP#2 中执行相关的过程。

实际结果:不适用

4

1 回答 1

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;

}

作为案例陈述,您可以编写不同的用户输入场景。

我发现这个文档很有用: https ://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-handle-user-interrupt?view=azure-bot-service-4.0&tabs=csharp

于 2019-05-14T04:56:51.090 回答