gpt4 book ai didi

c# - Azure Bot Framework FormFlow 复杂表单

转载 作者:行者123 更新时间:2023-12-03 01:51:01 24 4
gpt4 key购买 nike

我正在尝试使用 Azure 机器人框架创建一个机器人,该机器人将请求未知数量的复杂对象(每个对象需要三个响应)。但我不知道如何为根表单中的每个复杂对象创建表单。请参阅http://docs.botframework.com/sdkreference/csharp/forms.html 。它指出: “为了处理一系列复杂对象,您需要为顶级 C# 类创建一个表单,并为复杂对象创建一个表单。您可以使用对话框系统将表单组合在一起。”这就是我不知道该怎么做。

public enum SystemSelection { SharePoint, BizTalk, Azure, Office365 };

public enum RequestType { Bug, SupportRequest, Question };

public enum Importance { Blocking, High, Medium, Low };

[Serializable]
class Declaration
{
public string Type;
public string Amount;
public string Date;

public static IForm<Declaration> BuildForm()
{
return new FormBuilder<Declaration>()
.Message("Add a declaration")
.Build();
}
}

[Serializable]
class SupportRequest
{

public SystemSelection? SystemSelection;
public RequestType? RequestType;
public Importance? Importance;

public List<Declaration> Declarations;

public static IForm<SupportRequest> BuildForm()
{
IForm<Declaration> aForm = new FormBuilder<Declaration>().Message("Add declaration").Build();

// now what?

return new FormBuilder<SupportRequest>()
.Message("Welcome to the simple support bot!")
.Build();
}
}

Controller :

  [BotAuthentication]
public class MessagesController : ApiController
{
internal static IDialog<SupportRequest> MakeRootDialog()
{
// change something here??
return Chain.From(() => FormDialog.FromForm(SupportRequest.BuildForm));
}

public async Task<Message> Post([FromBody]Message message)
{
if (message.Type == "Message")
{
return await Conversation.SendAsync(message, MakeRootDialog);
}
else
{
return HandleSystemMessage(message);
}
}

最佳答案

您可以使用 Chain 类中的方法来编写对话框。由于这些方法也支持 LINQ 语法,因此您可以在 MakeRootDialog 中编写类似的内容来依次执行 SupportRequest 对话框和 Decalaration 对话框:

    internal static IDialog<SupportRequest> MakeRootDialog()
{
var dlg = from x in FormDialog.FromForm(SupportRequest.BuildForm)
from y in FormDialog.FromForm(Declaration.BuildForm)
select x;
return dlg;
// return Chain.From(() => FormDialog.FromForm(SupportRequest.BuildForm));
}

您还可以像这样手动链接对话框:

        var dlg = Chain.From(() => FormDialog.FromForm(SupportRequest.BuildForm))
.ContinueWith<SupportRequest,Declaration>(async (ctx, sr) =>
{
var res = await sr;
return FormDialog.FromForm(Declaration.BuildForm);
});

关于c# - Azure Bot Framework FormFlow 复杂表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37157347/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com