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

使用facebook/php-ads-sdk 2.11获取FB Insights时ad_id等字段为空

问题原因与解决方案

你遇到的ad_name、ad_id等字段为空的问题,核心原因很明确:你设置的Insights查询级别是campaign,但请求的却是ad/adset层级的字段。

Facebook Insights API的层级规则是严格对应的:当你选择在campaign级别聚合数据时,系统只会返回属于campaign层级的字段(比如campaign_id、campaign_name),以及该层级下的聚合指标(spend、impressions等)。而ad_id、adset_name这类属于更细粒度层级的字段,在campaign层级下没有统一值(一个campaign包含多个adset和ad),所以API会返回空值。

解决方法有两种,根据你的需求选择:

  1. 调整查询层级到对应粒度
    如果你确实需要获取ad或adset的字段,把level参数改成adset或者ad,这样API就会返回对应层级的所有字段:
$account = new AdAccount('act_' . $this->account_id); 
$fields = array( 
    'spend', 
    'clicks', 
    'impressions', 
    'campaign_name', 
    'campaign_id', 
    'inline_link_clicks', 
    'actions', 
    'ad_name', 
    'ad_id', 
    'adset_id', 
    'adset_name', 
    'account_id', 
    'account_name', 
); 
$param = $this->filters; 
// 根据需要选择'adset'或'ad'层级
$param['level'] = 'adset'; 
$cursor = $account->getInsights($fields, $param); 
  1. 移除不匹配层级的字段
    如果你的分析只需要campaign层级的数据,直接从$fields数组里删掉ad/adset相关的字段即可,避免无效请求:
$fields = array( 
    'spend', 
    'clicks', 
    'impressions', 
    'campaign_name', 
    'campaign_id', 
    'inline_link_clicks', 
    'actions', 
    'account_id', 
    'account_name', 
); 

额外说明

如果你的需求是在campaign层级下同时查看每个ad/adset的明细数据,那Facebook API无法直接返回这种混合层级的结果。你需要先查询ad或adset层级的全量数据,然后在自己的代码中根据campaign_id进行分组聚合。

另外,虽然你使用的是2.11版本的php-ads-sdk(这个版本确实比较老旧),但Insights API的层级对应逻辑是长期一致的,所以不需要担心是版本兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:37