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

Google Ads API PHP SDK 删除广告系列排除IP报错解决方案

问题根因

Google Ads PHP SDK 中所有*Operation类的setRemove()方法,入参都只接受待删除实体的字符串格式资源名,不接受完整的实体对象。你直接传入构造的CampaignCriterion实例时,SDK内部会尝试把入参强转为字符串,就会触发你看到的对象转字符串报错。
REMOVE操作本身不需要传实体的完整字段信息,只需要传能唯一定位到目标实体的资源名即可,和你要删的是IP排除项还是其他类型的Campaign准则没有关系。

正确删除流程
  • 第一步:获取待删除IP排除项对应的CampaignCriterion资源名
    IP排除项作为负向Campaign准则,资源名格式为customers/{你的客户ID}/campaignCriteria/{广告系列ID}~{准则ID},这个准则ID无法通过IP地址、广告系列ID直接拼出来,两种常用获取方式:
    • 新增IP排除项时,保存接口返回结果中自动生成的criterion_id,删除时直接拼接资源名
    • 删除前先通过GAQL语句查询对应广告系列下匹配目标IP的负向IP_BLOCK类型准则,拿到资源名,查询示例代码:
// 替换为你自己的客户ID、广告系列ID、待删除IP
$targetCampaignId = $item['campaignId'];
$targetIp = $item['ip'];
$gaql = <<<EOF
SELECT campaign_criterion.resource_name 
FROM campaign_criterion 
WHERE 
  campaign.id = {$targetCampaignId}
  AND campaign_criterion.type = 'IP_BLOCK'
  AND campaign_criterion.ip_block.ip_address = '{$targetIp}'
  AND campaign_criterion.negative = TRUE
EOF;

$searchResponse = $googleAdsServiceClient->search($customerId, $gaql);
$targetCriterionResourceName = null;
foreach ($searchResponse->iterateAllElements() as $row) {
    $targetCriterionResourceName = $row->getCampaignCriterion()->getResourceName();
    break;
}
  • 第二步:构造删除操作,直接传入拿到的资源名
    不需要构造IpBlockInfo实例,也不需要构造完整的CampaignCriterion对象,直接把字符串格式的资源名传给setRemove()即可:
$operation = new CampaignCriterionOperation();
// 注意入参是字符串类型的资源名,不要传实体对象
$operation->setRemove($targetCriterionResourceName);
  • 第三步:将构造好的operation传入你之前用的mutateCampaignCriteria接口提交请求,即可完成IP排除项的删除。
注意事项

不要尝试通过清空IpBlockInfo字段、传入带IP信息的新建CampaignCriterion对象的方式实现删除:Google Ads API的所有删除类操作都只认目标实体的资源名,和实体上的字段内容无关,不管是删除IP排除、否定关键词、受众排除项,逻辑都是一致的。IpBlockInfo自带的清空IP地址方法仅用于修改/新建场景下重置对象字段,无法用于删除操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:21:46