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

Facebook Messages Webhook JSON结构差异的产生原因是什么?

Meta(原Facebook)消息API结构差异解答

结构差异的官方说明与产生原因

这三类结构的差异是官方明确定义的,对应消息流转的三个完全不同的链路场景:

  • 第一类顶层直接带message字段的结构:属于单条消息详情接口/主动发消息响应结构,当你调用Send API主动给用户发消息、或者单独调用接口查询某条消息的详情时,返回的就是这个结构,没有外层封装是因为接口本身仅返回单条消息的完整数据。
{
  "sender":{
    "id":"<PSID>"
  },
  "recipient":{
    "id":"<PAGE_ID>"
  },
  "timestamp":1458692752478,
  "message":{
    "mid":"mid.1457764197618:41d102a3e1ae206a38",
    "text":"hello, world!",
    "quick_reply": {
      "payload": "<DEVELOPER_DEFINED_PAYLOAD>"
    }
  }
}    
  • 第二类外层带id、time字段,内层封装messaging数组的结构:属于旧版单页面Webhook通知结构,外层的id是触发事件的Facebook页面ID,time是Meta服务器生成的事件触发时间,这个结构仅在早期旧版Webhook、且只订阅单个页面事件的场景下返回。
{
  "id": "682498302938465",
  "time": 1518479195594,
  "messaging": [
    {
      "sender": {
        "id": "<PSID>"
      },
      "recipient": {
        "id": "<PAGE_ID>"
      },
      "timestamp": 1518479195308,
      "message": {
        "mid": "mid.$cAAJdkrCd2ORnva8ErFhjGm0X_Q_c",
        "attachments": [
          {
            "type": "<image|video|audio|file>",
            "payload": {
              "url": "<ATTACHMENT_URL>"
            }
          }
        ]
      }
    }
  ]
}
  • 第三类带object: page、外层封装entry数组的结构:是当前官方通用的标准Webhook通知结构,entry数组支持同时推送多个订阅页面的事件,兼容性最强,也是现在官方推荐开发者适配的结构。
{
    "object": "page",
    "entry": [
        {
            "id": "<PAGE_ID>",
            "time": 1583173667623,
            "messaging": [
                {
                    "sender": {
                        "id": "<PSID>"
                    },
                    "recipient": {
                        "id": "<PAGE_ID>"
                    },
                    "timestamp": 1583173666767,
                    "message": {
                        "mid": "m_toDnmD...",
                        "text": "This is where I want to go: https://youtu.be/bbo_fZAjIhg",
                        "attachments": [
                            {
                                "type": "fallback",
                                "payload": {
                                    "url": "<ATTACHMENT_URL >",
                                    "title": "TAHITI - Heaven on Earth"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    ]
}

messaging字段为数组的设计原因

设计为数组是为了批量推送同一时间窗口内产生的多条消息事件,减少Webhook的HTTP请求频次,降低两端的传输开销。

数组是否支持存放多条消息

支持,同一个messaging数组内可以存放同一页面、同一批触发的多条消息交互事件,开发时直接遍历数组处理即可,无需限制单条逻辑。


内容的提问来源于stack exchange,提问作者Pop Flamingo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:04