已应用的更改所触及的一切,都在它执行之前从账户里读出并记录下来了。撤销就是重放这些记录,所以是已记录的内容,而不是重建。
按下之前先看
curl -s https://top-rated.team/google-ads/v1/changes/chg_abc123 \ -H "X-API-KEY: $MAKEHYBRID_KEY"
返回的内容带有 revertable,为 false 时还有 not_revertable_because。先读这个:新建了任何东西的更改,无法用这种方式撤销,在更改发生之前 Google 不允许我们读回的内容也是如此。
撤销它
curl -sX POST https://top-rated.team/google-ads/v1/changes/chg_abc123/revert \ -H "X-API-KEY: $MAKEHYBRID_KEY"
它会作为一项独立的更改进入,有自己的记录和自己的撤销 — 所以撤销一件事本身也可以被撤销。原来的那项更改被标记为 reverted,并写明是哪项更改做了这件事。
如果 Google 拒绝了这次撤销,那就什么都没有发生:mutate 要么整块执行,要么完全不执行,所以原来的更改仍是已应用状态,和原来一模一样。拒绝会这样说明,而不是把它留在已撤销的标记下。
记录了什么,什么时候记录
撤销所需的内容,是在更改执行前的那一刻从账户里读出的,而不是执行之后。这个顺序就是它能起作用的全部原因:出价一旦变动,它原来的数值就不在账户里了,除了事先留下的副本,没有任何东西能重建它。所以会先留一份。
记录下来的,恰好是这项更改所触及之物的状态 — 即它的更新掩码里指明的字段,从它指明的资源里读回。暂停一个广告系列的更改,记录的是那个广告系列的状态,而不是账户的快照,所以撤销时不会践踏别人在此期间做的更改。
常见问题
哪些更改无法撤销?
任何新建了东西的更改 — 广告系列、广告、素材资源 — 因为没有可以记录的先前状态。更改会在你按下之前,通过 not_revertable_because 这样说明,而不是在你尝试时失败。
可以撤销这次撤销吗?
可以。撤销一项更改会作为一项独立的更改进入,有自己的记录,以及用同样方式记录的自己的撤销,所以可以再依次撤销。
如果在此期间有人在 Google Ads 里改了同一个东西呢?
撤销更改会把记录下的值写到现在的内容之上。这是撤销应有的诚实行为,也是要在按下之前而不是之后读取账户的原因。