使用Microsoft bot框架的FormFlow ChatBot

时间:2018-08-10 16:25:48

标签: c# botframework chatbot formflow

我正在尝试使用Microsoft bot框架构建一个聊天机器人。我正在使用formflow构建用户指导的机器人。我无法找到构建机器人的正确方法,在该机器人中我会显示一组不同的选项。假设我提供的第一个选项是支持,联系方式和其他信息,当用户选择“我必须显示一组选项”时,当他选择联系方式时,我将显示另一组选项,另一组用于其他信息。我该怎么做? 有人可以建议吗?

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();
    }
};
}

当用户第一次向机器人打个招呼时,它会要求他在Specfic,ErrorInformation和Contact之间进行选择。现在,当他选择“特定支持”时,我要显示ToolOptions。

1 个答案:

答案 0 :(得分:2)

  

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

如果您想有条件地显示tooloption和其他字段,则可以尝试使用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();

测试结果:

enter image description here