C# Microsoft Bot使用FormFlow从用户接收附件

C# Microsoft Bot使用FormFlow从用户接收附件,c#,bots,botframework,botbuilder,C#,Bots,Botframework,Botbuilder,我正在使用FormFlow设计一个机器人,其中一个输入将要求用户附加一个文件以继续。 我可以看到下面的链接解决了类似的问题。 链接中提供的解决方案是使用自定义iRecogniter或如下所示 a) 将其放入不暴露于FormFlow的私有字段/属性中 b) 将其作为暴露于表单流的字段的值输入 c) 使用private属性动态生成一个允许在它们之间进行选择的字段 我对Bot框架很幼稚。在收到客户使用的附件时,是否有实施此操作的示例 下面是我的代码片段 enter code here [Ser

我正在使用FormFlow设计一个机器人,其中一个输入将要求用户附加一个文件以继续。 我可以看到下面的链接解决了类似的问题。

链接中提供的解决方案是使用自定义iRecogniter或如下所示

a) 将其放入不暴露于FormFlow的私有字段/属性中

b) 将其作为暴露于表单流的字段的值输入

c) 使用private属性动态生成一个允许在它们之间进行选择的字段

我对Bot框架很幼稚。在收到客户使用的附件时,是否有实施此操作的示例

下面是我的代码片段

enter code here 

 [Serializable]
public class DocBot
{
    [Prompt("What's your name?")]
    public string Name { get; set; }

    [Prompt("Hey {&} , Choose the options below? {||}")]
    public Service? shaun;

    [Prompt("Attach the Document required for further processing?")]
    public string Document { get; set; }
    -- Need Suggestion on receiving documents attachment  from the user here 

    [Prompt("What is your Job Title there?")]
    public string JobTitle { get; set; }
    [Prompt("What's the best number to contact you on?")]

    public string Phone { get; set; }


    public enum Service
    {
        Consultancy, Support, ProjectDelivery, Unknown
    }


     public static IForm<DocBot> BuildEnquiryForm()
    {
        return new FormBuilder<DocBot>()
            .Message("Welcome to Doc BOT!!!")

            .Field(nameof(Name))
     //       .Field(nameof(Document))

     -- Need Suggestion on receiving documents attachment from the user here 

  .Build();
     }
     }
在此处输入代码
[可序列化]
公共类DocBot
{
[提示(“你叫什么名字?”)]
公共字符串名称{get;set;}
[提示(“嘿{&},选择下面的选项?{|}”)]
公共服务?肖恩;
[提示(“附上进一步处理所需的文件?”)]
公共字符串文档{get;set;}
--需要从用户处收到文件附件的建议吗
[提示(“你在那里的职位是什么?”)]
公共字符串JobTitle{get;set;}
[提示(“与您联系的最佳电话号码是什么?”)]
公用字符串电话{get;set;}
公共枚举服务
{
咨询、支持、项目交付、未知
}
公共静态表单BuildInquiryForm()
{
返回新的FormBuilder()
.Message(“欢迎使用Doc BOT!!!”)
.字段(名称)
//.字段(文件名称))
--需要从用户处收到文件附件的建议吗
.Build();
}
}
更新 中添加了对FormFlow中附件的支持

有一个例子演示了如何实现这一点。对于表单本身,您需要查看

--------- 目前这是不受支持的。在浏览了BotBuilder代码之后,我能提供的唯一解决方法是重建库代码,因为您必须在中进行一些更新,才能对其进行一些修改以获得附件url

如果您想尝试解决方案(同样,是解决方案,我还没有完全测试过,这可能有其他我不知道的影响),获取BotBuilder代码,找到FormDialog类,然后替换为以下代码:

var message = toBot != null ? (await toBot) : null;
var toBotText = message != null ? message.Text : null;
var toBotAttachments = message != null ? message.Attachments : null;

var stepInput = (toBotAttachments != null && toBotAttachments.Any()) ? toBotAttachments.First().ContentUrl : (toBotText == null) ? "" : toBotText.Trim();

此解决方法的作用是检查传入邮件是否有附件。如果有,则丢弃文本并使用第一个附件的ContentUrl。然后,在表单模型属性中,您将获得附件url。

我认为线程中提出的替代解决方案适用于在调用FormFlow之前提供图片的场景。在我的情况下,当我有字符串字段并且在连续流中接收附件时,如何才能完成此任务。有人能确认此解决方案是否有效吗?ThanksFYI-中添加了对附件的支持