我正在尝试使用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。
答案 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();
测试结果: