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

Azure Bot Service对接Facebook频道报BadRequest错误求助

排查Azure Bot Service向Facebook频道返回BadRequest错误的原因

1. 异步代码写法错误

你当前用Task.Run包裹异步方法再调用t.Wait()的写法属于同步阻塞异步操作,极易引发上下文异常或死锁,完全没必要这么写。正确写法应直接await异步方法:

// 文本消息的正确调用方式
await turnContext.SendActivityAsync(MessageFactory.Text("Hi hellow", "Hi hellow", InputHints.AcceptingInput), cancellationToken);

// 卡片消息的正确调用方式
await turnContext.SendActivityAsync(MessageFactory.Attachment(card?.ToAttachment(), ssml: ssml), cancellationToken);

这种同步阻塞的写法可能导致请求上下文异常,进而被Facebook频道返回BadRequest。

2. Facebook卡片字段不符合平台约束

从你提供的card对象来看,存在以下可能触发Facebook校验规则的问题:

  • 空title/subtitle:Facebook的Hero Card通常要求title字段非空,空字符串可能被平台判定为无效请求。如果不需要标题,可考虑改用纯文本配合按钮的形式,或给title设置一个非空占位值。
  • PostBack按钮字段冗余:Facebook的PostBack按钮仅需type、title、value(对应Facebook的payload)三个核心字段,你设置的text、displayText属于冗余字段,可能被平台视为无效参数。简化后的按钮结构应为:
    {
       "type":"postBack",
       "title":"Let's Get Started",
       "value":"Let's get started"
    }
    

3. SSML参数格式或有效性问题

如果ssml变量为空,或包含Facebook不支持的SSML语法,会直接触发BadRequest。若不需要语音合成能力,可直接移除ssml参数:

await turnContext.SendActivityAsync(MessageFactory.Attachment(card?.ToAttachment()), cancellationToken);

4. Facebook频道配置异常

  • 检查Azure Bot Service中Facebook频道的页面ID、访问令牌是否有效,确保权限足够(需具备向用户发送消息的权限)。
  • 确认关联的Facebook应用是否通过审核,未通过审核的应用仅能向测试用户发送消息,向普通用户发送会被拒绝。

内容的提问来源于stack exchange,提问作者P John Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:05:25