通过向通道发送文件信息,Microsoft Teams Bot文件卡信息已损坏

时间:2019-01-27 08:30:45

标签: c# botframework microsoft-teams

我正在使用Microsoft Bot Framework将文件卡发送给频道或用户, 但文件卡的格式似乎不正确...无法单击文件卡或打开文件...

enter image description here

我如何生成卡:

FileInfoCard card = new FileInfoCard()
    {
        FileType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        UniqueId = driveItemUniqueId,
    };

    Attachment att = card.ToAttachment();
    att.ContentUrl = fileLocation;
    att.Name = fileName;


    replyToConversation.Attachments.Add(att);
    return replyToConversation;

将要发送给团队的json代码如下:

[{
"contentType": "application/vnd.microsoft.teams.card.file.info",
"contentUrl": "https://fileLocation.com/xyz",
"content": {
    "uniqueId": "jfölasjflasjföiu289u9o2or2jor2l1ö1l3jrlö12j4l",
    "fileType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
    "etag": null
},
"name": "Meeting Minutes - testmeeting 2 fso - 26-1-2019.docx",
"thumbnailUrl": null

}]

Microsoft对该主题的资源: https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/bots/bots-files

以以下示例为例:

    {
  "attachments": [{
    "contentType": "application/vnd.microsoft.teams.card.file.info",
    "contentUrl": "https://contoso.sharepoint.com/personal/johnadams_contoso_com/Documents/Applications/file_example.txt",
    "name": "file_example.txt",
    "content": {
      "uniqueId": "1150D938-8870-4044-9F2C-5BBDEBA70C8C",
      "fileType": "txt",
    }
  }]
}

编辑:附加信息。 我不确定uniqueId是否正确。 Word文件将上传到SharePoint网站。这个UniqueId看起来不像示例中的唯一GUID。在Team iOS App上,我可以单击链接,但是会出现一条消息,表明无法访问此文件。

编辑:唯一ID已修复,但在MS Teams Desktop客户端上仍然会出现问题。 我已经从Graph API获得的文件中的Ctag中的GUID替换了唯一ID。在iOs应用程序上,它现在可以工作,但是在桌面客户端上,仍然有红色三角形。

Iphone上的

按钮: enter image description here

1 个答案:

答案 0 :(得分:3)

请将FileType设置为 docx ,如下所示:

        FileInfoCard card = new FileInfoCard()
        {
            FileType = "docx",
            UniqueId = Guid.NewGuid().ToString() // unique id.
        };

        Attachment att = card.ToAttachment();
        att.ContentUrl = contentUrl;
        att.Name = name;