You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#开发的Bot发送HeroCard至Facebook时返回BadRequest错误

解决Bot发送带附件消息到Facebook时的BadRequest错误

我之前处理过不少跨渠道Bot适配的问题,你遇到的这个BadRequest错误大概率是HeroCard的格式不符合Facebook Messenger的专属规范——毕竟WebChat和模拟器对微软原生卡片的兼容性很好,但Facebook有自己一套严格的消息格式要求,稍有不符就会返回错误。

下面是几个针对性的排查和解决方向:

1. 检查按钮类型与参数是否符合Facebook要求

Facebook不支持HeroCard里的所有按钮类型,即使是通用的OpenUrl也有细节需要注意:

  • 避免使用相对路径或本地图片/链接,必须提供公开可访问的完整HTTPS链接
  • 如果你用的是PostBack按钮,要确保Value参数的格式符合Facebook的要求(不能包含特殊字符或过长内容)

举个修正后的C#代码示例:

var heroCard = new HeroCard
{
    Title = "测试卡片",
    Images = new List<CardImage> { new CardImage("https://your-public-image-url.com/image.jpg") },
    Buttons = new List<CardAction>
    {
        // 适配Facebook的OpenUrl按钮要求
        new CardAction(ActionTypes.OpenUrl, "查看详情", value: "https://your-public-url.com/detail")
    }
};

2. 改用Facebook原生模板(通过ChannelData发送)

如果HeroCard的跨渠道适配始终有问题,最稳妥的方式是直接构造Facebook Messenger的原生卡片格式,通过ChannelData发送,绕过微软的卡片转换逻辑:

var facebookMessage = Activity.CreateMessageActivity();
facebookMessage.ChannelData = JObject.Parse(@"
{
    ""attachment"": {
        ""type"": ""template"",
        ""payload"": {
            ""template_type"": ""generic"",
            ""elements"": [
                {
                    ""title"": ""测试原生卡片"",
                    ""image_url"": ""https://your-public-image-url.com/image.jpg"",
                    ""buttons"": [
                        {
                            ""type"": ""web_url"",
                            ""url"": ""https://your-public-url.com/detail"",
                            ""title"": ""查看详情""
                        }
                    ]
                }
            ]
        }
    }
}");

await turnContext.SendActivityAsync(facebookMessage);

3. 排查附件本身的合规性

  • 图片大小不能超过Facebook的限制(建议单张不超过2MB)
  • 图片尺寸尽量符合Facebook的推荐比例(比如通用卡片的图片建议1200x675像素)
  • 确保图片/链接没有被Facebook的安全机制拦截(可以先在浏览器里直接访问链接测试)

4. 检查Facebook开发者平台配置

  • 确认你的Bot在Facebook开发者后台已经启用了messaging权限
  • 检查Webhook的订阅状态是否正常,有没有报错记录
  • 如果是公开Bot,确认已经通过Facebook的审核(未审核的Bot只能给测试用户发消息)

内容的提问来源于stack exchange,提问作者Sowmyan Soman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:27:57