c# - 如何在每次输入退出或取消时中断表单流?

标签 c# botframework bots formflow

我正在使用 BotFramework 在 .Net C# 中创建聊天机器人。在我的一个对话框中,当我开始填写表单流程时,我无法退出流程,直到我将填写所有流程为止。存在任何退出和离开表格的可能性吗?

这是我的代码:

LuisDialog.cs:

      [LuisIntent("balance")]
      public async Task balance(IDialogContext context, LuisResult result)
     {

        var balanca = new FormDialog<BalanceForm>(
                    new BalanceForm(),
                    BalanceForm.BuildForm,
                    FormOptions.PromptInStart,
                    result.Entities);
        context.Call<BalanceForm>(balanca, BalanceCompleted);

平衡表.cs

namespace BasicMultiDialog
{

[Serializable]
public class BalanceForm
{

    [Prompt("What is your contract number?")]
    public string contract;

    public static IForm<BalanceForm> BuildForm()
    {
        OnCompletionAsyncDelegate<BalanceForm> wrapUpRequest = async 
    (context, state) =>
        {




                        string wrapUpMessage = "Dear " + house.Firstname + "," + "your  balance is " + house.Balance;
                        await context.PostAsync(wrapUpMessage);


            }
        };
        return new FormBuilder<BalanceForm>().Message
        ("We have to ask you some information")


            .Field(nameof(contract), validate: async (state, response) =>
            {

                var result = new ValidateResult();


                    return result;

                }
            })

            .OnCompletion(wrapUpRequest)
            //.Confirm("Are you sure: Yes or No ")
            .Build();
          }

         }
      }

最佳答案

实际上,取消表单非常容易。如果您键入“help”或“choices”,您可以看到内置表单命令列表,其中之一是“quit”。您可以使用许多术语来表示退出,例如“完成”或“再见”。如果您想定义自己的术语,可以像这样配置表单命令:

var builder = new FormBuilder<BalanceForm>().Message
("We have to ask you some information")
    .Field(nameof(contract), validate: async (state, response) =>
    {
        var result = new ValidateResult();
        return result;
    })
    .OnCompletion(wrapUpRequest)

// Set the command term configuration on its own line
builder.Configuration.Commands[FormCommand.Quit].Terms = new[] { "exit", "cancel" };

return builder.Build();

请记住,当表单被取消时,一个 FormCanceledException<T>被抛出。如果您不希望它显示诸如“抱歉,我的机器人代码有问题”之类的消息,您可以像这样捕获异常:

var balanca = new FormDialog<BalanceForm>(
            new BalanceForm(),
            BalanceForm.BuildForm,
            FormOptions.PromptInStart,
            result.Entities)
    .Catch<BalanceForm, FormCanceledException<BalanceForm>>((dialog, ex) =>
    {
        // Handle the cancellation here and return an IDialog<BalanceForm>
    });

关于c# - 如何在每次输入退出或取消时中断表单流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52622773/

相关文章:

c# - ASP.NET MVC - 未找到 NLog 文件目标

c# - 为什么继承的接口(interface)不能在通用上下文中转换为其基接口(interface)?

c# - 将 MariaDB 与 Entity Framework 结合使用

c# - 在查看 ANTS 分析器时,FirstOrDefault 明显快于 SingleOrDefault

node.js - Azure机器人框架: Show welcome message

javascript - r未定义,获取用户拥有的所有角色

botframework - Direct Line API - 机器人框架

azure - Azure Bot Framework 注册中的 "Enable Streaming Endpoint"有什么作用?

c# - 如何从 MS Bot Framework、Skype For Business 获取除 "conversationUpdate"和 "endOfConversation"之外的其他值

web-crawler - 如何设置只允许网站默认页面的robot.txt