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