如何使用 Microsoft Bot Framework 将文件附加到消息?

Posted

技术标签:

【中文标题】如何使用 Microsoft Bot Framework 将文件附加到消息?【英文标题】:How can I attach file to message with Microsoft Bot Framework? 【发布时间】:2016-07-29 06:30:37 【问题描述】:

我有 Web API 服务:

[ActionName("download")]
[HttpGet]
public HttpResponseMessage Download()

    var stream = new FileStream(HostingEnvironment.MapPath("~/tmp/") + "doc.pdf", FileMode.Open);
    var result = new HttpResponseMessage(HttpStatusCode.OK)
    
        Content = new StreamContent(stream)
    ;
    result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
    
        FileName = document.Name + "." + document.AssociatedApplication.Extension
    ;

    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    return result;

机器人的代码:

if (message.Text.StartsWith("/d"))

    var contentType = "application/pdf";
    var attachment = new Attachment(contentType, "https://localhost/api/documents.download");
    var response = await client.GetAsync("https://localhost/api/documents.download");

    var data = await response.Content.ReadAsByteArrayAsync();
    System.IO.File.WriteAllBytes(HostingEnvironment.MapPath("~/tmp/") + document.Name + "." + document.Extension, data);

    var stream = System.IO.File.ReadAllBytes(HostingEnvironment.MapPath("~/tmp/") + document.Name + "." + document.Extension);
    attachment.Content = stream;

    var msg = message.CreateReplyMessage("This is your document: ");
    msg.Attachments = new[]  attachment ;

    await context.PostAsync(msg);

如果我将服务器和客户端上的内容类型更改为“image/png”并将 PNG 图像从服务器发送到客户端,则此示例完美运行 - 在 Bot Framework Emulator 中我收到文本“这是您的文档:”并收到图片。

但是,如果我尝试发送内容类型为“application/pdf”或“application/octet-stream”的 PDF 文档并在内容类型为“application/pdf”的客户端上获取它,那么在 Bot Framework Emulator 上我收到了消息像这样:

这是你的文件:(https://localhost/api/documents.download)

这是否可以进入对话“真实”文档而不是下载链接(它如何与图像一起使用)?

PS:This question 仅适用于“image/png”或类似内容类型。

【问题讨论】:

【参考方案1】:

两件事: 1.您似乎没有为附件设置内容类型(上面的代码使用“”) 2.内容不用于推送媒体文件。我们的消息仅限于 256k 序列化 json。如果要发送文档或图像,请发送带有指向文件的 url 和文件的内容类型的附件 3. 并非所有通道都具有图像以外的文件的语义,它们将它们表示为链接。我们使用 contenttype 来确定我们是否可以针对给定附件执行特定于频道的操作。

【讨论】:

以上是关于如何使用 Microsoft Bot Framework 将文件附加到消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取所有可用的 Microsoft bot Skype 组

具有多个 BOT 集成的 Microsoft Chat BOT

Bot Framework:如何退出对话?

如何使用自适应卡操作从自适应卡获取用户响应。使用 Microsoft Bot Framework 从 MS Teams 频道提交操作?

Direct Line API Microsoft Bot 框架

microsoft botframework bot 如何在自适应卡片中提及用户?