【问题标题】:Rest API attachment errorRest API 附件错误
【发布时间】:2017-06-06 12:22:08
【问题描述】:

我在使用机器人框架 REST API 通过 Skype 频道发送附件时遇到问题。

我能够使用这样的 json 消息正确发送图像:

{  
   "type":"message",
   "timestamp":"2017-05-22T11:31:36.2281894Z",
   "from":{  
      "name":"MyBot"
   },
   "recipient":{  
      "id":"29:1-Dl1xMx6G2qGya5O5BgTZJhc0fUKOiQLctt74CmwJ3PVJNgkocpf3LY626py9UIO"
   },
   "text":"It works!",
   "attachments": [
        {
            "contentType": "image/jpg",
            "contentUrl": "https://g87a2173.ngrok.io/content/attachments/65f2be10-e61e-424e-9ea1-e05f1002fd19",
            "name": "image.jpg"
        }
    ]
}

但是,如果我发送的文件具有除图像以外的任何内容类型,则会出现错误。

例如,如果我发送

{  
   "type":"message",
   "timestamp":"2017-05-22T11:31:36.2281894Z",
   "from":{  
      "name":"MyBot"
   },
   "recipient":{  
      "id":"29:1-Dl1xMx6G2qGya5O5BgTZJhc0fUKOiQLctt74CmwJ3PVJNgkocpf3LY626py9UIO"
   },
   "text":"Not working!",
   "attachments": [
        {
            "contentType": "audio/wav",
            "contentUrl": "https://g87a2173.ngrok.io/content/attachments/e58bcefa-7060-464f-96ee-78d2795ec80f",
            "name": "audio.wav"
        }
    ]
}

我收到 400 错误

{
    "error": {
        "code": "BadArgument",
        "message": "Unknown attachment type"
    }
}

用于这些测试的其余端点是 https://smba.trafficmanager.net/apis/v3/conversations/29%3A1-Dl1xMx6G2qGya5O5BgTZJhc0fUKOiQLctt74CmwJ3PVJNgkocpf3LY626py9UIO/activities

API reference documentation 声明

附件可以是媒体文件(例如,音频、视频、图像、文件)或 丰富的卡片

我哪里错了?

谢谢

【问题讨论】:

    标签: botframework


    【解决方案1】:

    我对 C# 代码进行了同样的尝试,得到了相同的结论:在 Skype 频道上,我们得到了一个 Unknown attachment type 异常。 使用模拟器和 Slack(获得下载 wav 文件的链接)

    肯定有频道限制是的,或者是bug。

    无论如何你都可以尝试使用AudioCard:我测试了它(在 C# 代码中),它在 Skype 上运行:

    此处的示例代码:https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/cards-RichCards

    【讨论】:

    • 同样的错误。我已经尝试了几种 contentType。它似乎只接受image*video* 和各种application/vnd.microsoft.card.*。会不会是频道限制?
    • 我通过更多测试和可能的解决方案编辑了我的答案
    • @FrancescoMariaMilizia 有用吗?
    • 好的,谢谢。不幸的是,我必须发送其他类型的文件(如 pdf),因此 AudioCard 不符合我的需求,但我感谢您的帮助。
    • 如果在这种情况下有帮助,请验证答案。如果您有其他问题,请发布另一个问题;)
    【解决方案2】:

    我发现的最佳通用解决方案是发送带有指向文件 URI 的 AdaptiveOpenUrlAction 的自适应卡片,如下所示:

    var card = new AdaptiveCard("1.0");
    card.Actions.Add(new AdaptiveOpenUrlAction{
      Title = "myDocument.docx",
      Url = "https://example.com/documents/myDocument.docx"
    });
    var attachment = new Attachment(AdaptiveCard.ContentType, content:card);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多