You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON FormFlow对话框使用问询及C#实现代码解析

在JSON FormFlow对话框中支持“其他”自定义输入的实现方案

我来帮你搞定在JSON FormFlow里添加自定义“其他”答案的问题,结合你的代码场景,分步骤给你讲清楚怎么做:

1. 修改JSON表单定义,添加“其他”选项与关联字段

首先要在你的JSON表单配置里,给枚举字段加一个Other选项,同时新增一个字符串字段用来接收用户的自定义输入,关键是用Dependencies让这个字段只在用户选了Other时才出现。

举个示例(假设你的枚举字段是FavoriteColor):

{
  "Fields": [
    {
      "Name": "FavoriteColor",
      "Prompt": "What's your favorite color?",
      "Type": "Enum",
      "EnumValues": [
        {"Value": "Red", "DisplayName": "Red"},
        {"Value": "Blue", "DisplayName": "Blue"},
        {"Value": "Green", "DisplayName": "Green"},
        {"Value": "Other", "DisplayName": "Other (specify)"}
      ]
    },
    {
      "Name": "FavoriteColorOther",
      "Prompt": "Please enter your custom color:",
      "Type": "String",
      "Dependencies": [{"Field": "FavoriteColor", "Value": "Other"}]
    }
  ]
}

2. 在C#代码中处理表单提交后的逻辑

当用户完成表单后,你需要在DialogCompleted方法里判断用户是否选了Other,然后把自定义字段的值作为最终结果使用。给你补全这个方法的示例:

private async Task DialogCompleted(IDialogContext context, IAwaitable<JObject> result)
{
    var formResponse = await result;
    string selectedValue = formResponse["FavoriteColor"].ToString();
    
    // 如果用户选了Other,替换为自定义输入的内容
    if(selectedValue == "Other")
    {
        selectedValue = formResponse["FavoriteColorOther"]?.ToString() ?? "No custom input provided";
    }
    
    // 这里写你的后续业务逻辑,比如回复用户
    await context.PostAsync($"Got it! Your selection is: {selectedValue}");
    context.Wait(MessageReceivedAsync);
}

3. 额外优化建议

  • 添加输入验证:给自定义字段加验证规则,确保用户输入不为空,比如在JSON的FavoriteColorOther字段里加:
    "Validation": {
      "Regex": "^.+$",
      "ErrorMessage": "Please enter a valid custom value."
    }
    
  • 简化启动逻辑:你的StartAsync方法可以直接启动FormDialog,不用先等待消息,简化后代码更简洁:
    public async Task StartAsync(IDialogContext context)
    {
        var formDialog = FormDialog.FromForm(() => BuildJsonForm(), FormOptions.PromptInStart);
        context.Call(formDialog, DialogCompleted);
    }
    
  • 统一字段处理:如果有多个枚举字段需要支持“其他”,可以把这个逻辑封装成通用方法,避免重复代码。

内容的提问来源于stack exchange,提问作者Vladimir B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:25:41