API 結構

影片:2019 工作坊的「服務與資源」講座

本指南將介紹 Google Ads API 的主要元件。Google Ads API 包含資源服務。資源代表 Google Ads 實體,而服務則會擷取及操作 Google Ads 實體。

物件階層

Google Ads 帳戶可視為物件的階層。

廣告活動模式

  • 帳戶的頂層資源是客戶

  • 每位客戶都包含一或多個有效的廣告活動

  • 每個廣告活動都包含一或多個廣告群組,用於將廣告分組成邏輯集合。

  • 廣告群組廣告代表您正在放送的廣告。除了應用程式廣告活動 (每個廣告群組只能包含一則廣告群組廣告) 之外,每個廣告群組都包含一或多則廣告群組廣告。

您可以將一或多個 AdGroupCriterionCampaignCriterion 附加至廣告群組或廣告活動。這些條件代表定義廣告觸發方式的條件。

評估條件類型有很多種,例如關鍵字、年齡範圍和地點。在廣告活動層級定義的條件會影響廣告活動中的所有其他資源。您也可以指定廣告活動的預算和日期。

最後,您可以在帳戶、廣告活動或廣告群組層級附加額外資訊。您可以使用額外資訊為廣告提供額外資訊,例如電話號碼、街道地址或促銷活動。

資源

資源代表 Google Ads 帳戶中的實體。CampaignAdGroup 是兩個資源範例。

物件 ID

Google Ads 中的每個物件都會透過專屬 ID 識別。其中部分 ID 在所有 Google Ads 帳戶中都是全球唯一,其他則僅在特定範圍內不重複。

物件 ID 唯一性範圍 是否全域專屬?
預算 ID 全域
廣告活動編號 全域
AdGroup 編號 全域
廣告編號 廣告群組 否,但 (AdGroupIdAdId) 組合在全球範圍內是唯一的
AdGroupCriterion 編號 廣告群組 否,但 (AdGroupIdCriterionId) 組合在全球範圍內是唯一的
CampaignCriterion 編號 廣告活動 否,但 (CampaignIdCriterionId) 組合在全球範圍內是唯一的
廣告額外資訊 廣告活動 否,但 (CampaignIdAdExtensionId) 組合在全球範圍內是唯一的
動態饋給ID 全域
資訊提供項目編號 全域
資訊提供屬性編號 資訊提供
資訊提供對應編號 全域
標籤編號 全域
使用者名單 ID 全球

設計 Google Ads 物件的本機儲存空間時,這些 ID 規則可能會很實用。

部分物件可用於多種實體類型。在這種情況下,物件會包含 type 欄位,用於說明其內容。舉例來說,AdGroupAd 可以參照文字廣告、飯店廣告或本地廣告等物件。您可以透過 AdGroupAd.ad.type 欄位存取這個值,並傳回 AdType 列舉中的值。

資源名稱

每項資源都由 resource_name 字串唯一識別,該字串會將資源及其父項連結成路徑。舉例來說,廣告活動資源名稱的格式如下:

customers/customer_id/campaigns/campaign_id

因此,如果 Google Ads 帳戶 (客戶 ID 為 1234567) 中的廣告活動 ID 為 987654resource_name 會是:

customers/1234567/campaigns/987654

服務

服務可讓您擷取及修改 Google Ads 實體。服務分為三種類型:修改、物件和統計資料擷取,以及中繼資料擷取服務。

修改 (變異) 物件

這些服務會使用 mutate 要求修改相關資源類型的執行個體。它們也會提供 get 要求,用於擷取單一資源例項,這對於檢查資源結構很有幫助。

服務範例:

每個 mutate 要求都必須包含對應的 operation 物件。舉例來說,CampaignService.MutateCampaigns 方法預期會有一或多個 CampaignOperation 例項。如要進一步瞭解操作,請參閱「變更及檢查物件」一文。

同時變更

Google Ads 物件無法同時由多個來源修改,如果有多位使用者透過應用程式更新相同物件,或是您使用多個執行緒同時變更 Google Ads 物件,就可能發生錯誤。這包括從同一個應用程式中的多個執行緒,或從不同應用程式 (例如您的應用程式和同時進行的 Google Ads UI 工作階段) 更新物件。

API 不會提供在更新前鎖定物件的方法;如果兩個來源同時嘗試變更物件,API 會擲回 DatabaseError.CONCURRENT_MODIFICATION_ERROR

非同步與同步變異

Google Ads API 變異方法為同步方法。API 呼叫只會在物件經過變異之後傳回回應,因此您必須等待每項要求的回應。雖然這種方法的程式碼相對簡單,但如果程序被迫等待呼叫完成,可能會對負載平衡造成負面影響,並浪費資源。

另一種做法是使用 BatchJobService 以非同步方式變更物件,這樣就能在多個服務上執行批次作業,而無須等待作業完成。提交批次作業後,Google Ads API 伺服器會以非同步方式執行作業,釋出可執行其他作業的程序。您可以定期檢查工作狀態,確認工作是否已完成。

如要進一步瞭解非同步處理作業,請參閱批次處理指南

變更驗證

大多數的變異要求都可以驗證,而不需要實際對實際資料執行呼叫。因此,您可以在不實際執行作業的情況下,測試遺漏的參數和不正確的欄位值。

如要使用這項功能,請將要求的選用 validate_only 布林值欄位設為 true。系統會對要求進行完整驗證,就像要執行要求一樣,但會略過最終執行作業。如果沒有發現任何錯誤,系統會傳回空白回應。如果驗證失敗,回應中的錯誤訊息會指出失敗點。

validate_only 特別適合用於測試廣告是否違反常見的政策。如果廣告違反政策 (例如含有特定字詞、標點符號、大寫字母或長度),系統會自動拒登。單一廣告有問題,可能會導致整個批次失敗。在 validate_only 要求中測試新廣告,即可找出任何違規情形。如要瞭解這項功能的實際運作方式,請參閱處理政策違規錯誤的程式碼範例。

取得物件和成效統計資料

GoogleAdsService 是用於擷取物件和成效統計資料的單一整合服務。

所有 SearchSearchStream 要求 (適用於 GoogleAdsService) 都需要查詢,以指定要查詢的資源、要擷取的資源屬性和成效指標、用於篩選要求的述詞,以及用於進一步細分成效統計資料的區隔。如要進一步瞭解查詢格式,請參閱 Google Ads 查詢語言指南

擷取中繼資料

GoogleAdsFieldService 會擷取 Google Ads API 中資源的中繼資料,例如資源的可用屬性和資料類型。

這項服務會提供建構 GoogleAdsService 查詢所需的資訊。為方便起見,GoogleAdsFieldService 傳回的資訊也提供於欄位參考說明文件中。