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

Google Ads API更新CampaignBudget的AmountMicros无报错但未生效问题

核心问题

操作类型配置错误,你使用了创建预算的操作来执行更新逻辑:

  • CampaignBudgetOperation下的Create字段专门用于新建预算,哪怕你传入了已有预算的ResourceName和Id,API也会忽略这些标识生成全新的预算实例,不会修改原有预算,因此你原来Campaign绑定的预算不会有任何变化,自然在后台看不到更新效果。
修复步骤
  1. 替换操作类型:将CampaignBudgetOperation的Create属性改为Update即可,修改后代码如下:
CampaignBudget budget = new CampaignBudget()
{
    ResourceName = ResourceNames.CampaignBudget(customerId, budgetId),
    AmountMicros = (price + amount) * 100000,
    Id = budgetId
};

CampaignBudgetOperation budgetOperation = new CampaignBudgetOperation()
{
    // 把原来的Create = budget改为Update = budget
    Update = budget,
    UpdateMask = FieldMasks.AllSetFieldsOf(budget),
};

try
{
    MutateCampaignBudgetsResponse responseBudget = 
    budgetService.MutateCampaignBudgets(
    customerId.ToString(), new CampaignBudgetOperation[] { budgetOperation 
  });

    foreach(MutateCampaignBudgetResult result in responseBudget.Results)
    {
        updateResponse.CampignId = campaignId;
        updateResponse.Updated = true;
        // 调试时可以打印资源名确认修改的是目标预算
        Console.WriteLine($"更新成功,预算资源名:{result.ResourceName}");
    }

    return updateResponse;
}
catch (GoogleAdsException e)
{
    Console.WriteLine("Failure:");
    Console.WriteLine($"Message: {e.Message}");
    Console.WriteLine($"Failure: {e.Failure}");
    Console.WriteLine($"Request ID: {e.RequestId}");
    updateResponse.Updated = false;
    return updateResponse;
}
  1. 可选优化项:
  • 手动指定UpdateMask只更新amount_micros字段,避免误修改其他未明确要调整的属性,写法如下:
    UpdateMask = new FieldMask { Paths = { "amount_micros" } }
  • 原代码catch块中return updateResponse后的throw语句永远不会执行,可以直接删除。
  • 确认你传入的budgetId是对应Campaign实际绑定的预算ID,避免操作错预算对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:42:01