C# 使用microsoft bot框架的FormFlow聊天机器人

C# 使用microsoft bot框架的FormFlow聊天机器人,c#,botframework,chatbot,formflow,C#,Botframework,Chatbot,Formflow,我正在尝试使用microsoft bot框架构建聊天机器人。我正在使用formflow构建一个用户引导的机器人。我找不到一个正确的方法来构建一个bot,在这里我为选择显示一组不同的选项。假设我提供的第一个选项是支持、联系人详细信息和其他信息,当用户选择我必须显示一组选项时,当他选择联系人详细信息时,我将显示另一组选项,另一组用于其他信息。我该怎么做? 有人能建议吗 namespace Microsoft.Bot.Sample.FormBot { public enum SupportOption

我正在尝试使用microsoft bot框架构建聊天机器人。我正在使用formflow构建一个用户引导的机器人。我找不到一个正确的方法来构建一个bot,在这里我为选择显示一组不同的选项。假设我提供的第一个选项是支持、联系人详细信息和其他信息,当用户选择我必须显示一组选项时,当他选择联系人详细信息时,我将显示另一组选项,另一组用于其他信息。我该怎么做? 有人能建议吗

namespace Microsoft.Bot.Sample.FormBot
{
public enum SupportOptions
{
    Specific,ErrorInformation,ContactInformation
};

[Serializable]
public class Specific
{        
    public ToolOptions? Tools;        
}

public enum ToolOptions
{
    Merge,Extend,Generate,Calculate,Memory
}

[Serializable]
public class SupportBox
{

    public SupportOptions? Sandwich;        

    public static IForm<SupportBox> BuildForm()
    {
        OnCompletionAsyncDelegate<SupportBox> processOrder = async (context, state) =>
        {
            await context.PostAsync("This is the end of the form, you would give a final confirmation, and then start the ordering process as needed.");
        };

        return new FormBuilder<SupportBox>()
                .Message("Welcome to the Support Bot!")
                .OnCompletion(processOrder)
                .Build();
    }
};
}
名称空间Microsoft.Bot.Sample.FormBot
{
公共枚举支持选项
{
具体的,错误信息,联系信息
};
[可序列化]
公共类特定
{        
公共工具选项?工具;
}
公共枚举工具选项
{
合并、扩展、生成、计算、内存
}
[可序列化]
公共类支持框
{
公共支持选项?三明治;
公共静态表单BuildForm()
{
OnCompletionAsyncDelegate processOrder=async(上下文、状态)=>
{
wait context.PostAsync(“这是表单的结尾,您将给出最终确认,然后根据需要启动订购过程。”);
};
返回新的FormBuilder()
.Message(“欢迎使用支持机器人!”)
.OnCompletion(processOrder)
.Build();
}
};
}
当用户第一次向机器人打招呼时,机器人会要求他在Specfic、ErrorInformation和Contact之间进行选择。现在,当他选择特定的支持时,我想显示工具选项

假设我提供的第一个选项是支持、联系人详细信息和其他信息,当用户选择我必须显示一组选项时,当他选择联系人详细信息时,我将显示另一组选项,另一组用于其他信息。我该怎么做

如果要有条件地显示
toolpoption
和其他字段,可以尝试使用
SetActive
方法指定仅当用户选择特定选项时才应启用该字段。以下代码片段供您参考

return new FormBuilder<SupportBox>()
        .Message("Welcome to the Support Bot!")
        .Field(nameof(supportoption))
        .Field(new FieldReflector<SupportBox>(nameof(tooloption))
        .SetActive(state=>state.supportoption== SupportOptions.Specific)
        )
        .Field(new FieldReflector<SupportBox>(nameof(contactinformation))
        .SetActive(state => state.supportoption == SupportOptions.ContactInformation)
        )
        .OnCompletion(processOrder)
        .Build();
返回新的FormBuilder()
.Message(“欢迎使用支持机器人!”)
.字段(名称(支持选项))
.字段(新字段反射器(名称(工具选项))
.SetActive(state=>state.supportoption==SupportOptions.Specific)
)
.Field(新的FieldReflector(姓名(联系信息))
.SetActive(state=>state.supportoption==SupportOptions.ContactInformation)
)
.OnCompletion(processOrder)
.Build();
测试结果:

假设我提供的第一个选项是支持、联系人详细信息和其他信息,当用户选择我必须显示一组选项时,当他选择联系人详细信息时,我将显示另一组选项,另一组用于其他信息。我该怎么做

如果要有条件地显示
toolpoption
和其他字段,可以尝试使用
SetActive
方法指定仅当用户选择特定选项时才应启用该字段。以下代码片段供您参考

return new FormBuilder<SupportBox>()
        .Message("Welcome to the Support Bot!")
        .Field(nameof(supportoption))
        .Field(new FieldReflector<SupportBox>(nameof(tooloption))
        .SetActive(state=>state.supportoption== SupportOptions.Specific)
        )
        .Field(new FieldReflector<SupportBox>(nameof(contactinformation))
        .SetActive(state => state.supportoption == SupportOptions.ContactInformation)
        )
        .OnCompletion(processOrder)
        .Build();
返回新的FormBuilder()
.Message(“欢迎使用支持机器人!”)
.字段(名称(支持选项))
.字段(新字段反射器(名称(工具选项))
.SetActive(state=>state.supportoption==SupportOptions.Specific)
)
.Field(新的FieldReflector(姓名(联系信息))
.SetActive(state=>state.supportoption==SupportOptions.ContactInformation)
)
.OnCompletion(processOrder)
.Build();
测试结果:


这有点模糊。您是否编写了一些代码?将代码添加到原始问题中。嗨@Manjunath,有更新吗?您是否尝试过我在回复中分享的方法来达到您的要求?非常感谢@FeiHan。它起作用了。现在,当用户选择不同的选项时,我使用多对话框将其路由到不同的对话框。这有点模糊。您是否编写了一些代码?将代码添加到原始问题中。嗨@Manjunath,有更新吗?您是否尝试过我在回复中分享的方法来达到您的要求?非常感谢@FeiHan。它起作用了。现在,当用户选择不同的选项时,我使用多对话框将其路由到不同的对话框。