疑難排解

環境設定不正確、軟體錯誤或使用者輸入無效內容,都可能導致錯誤。無論來源為何,您都需要排解問題,並修正程式碼或新增邏輯來處理使用者錯誤。本指南將說明如何排解 Google Ads API 錯誤。

確保連線能力

  1. 請確認您有權存取 Google Ads API,且設定正確無誤。如果回應傳回任何 HTTP 錯誤,請務必仔細處理這些錯誤,並確認您可從程式碼連上要使用的服務。

  2. 您的憑證會嵌入要求中,以便服務驗證您的身分。請熟悉 Google Ads API 要求和回應的結構,特別是您不打算使用用戶端程式庫處理呼叫時。每個用戶端程式庫都隨附具體操作說明,說明如何在設定檔中加入憑證 (請參閱用戶端程式庫的 README)。

  3. 請確認您使用的憑證正確無誤。快速入門指南會引導您取得所需正確組合。舉例來說,下列回應失敗表示使用者傳送了無效的驗證憑證:

    {
      "error": {
        "code": 401,
        "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. Visit https://developers.google.com/identity/sign-in/web/devconsole-project.",
        "status": "UNAUTHENTICATED",
        "details": [
          {
            "@type": "type.googleapis.com/google.rpc.DebugInfo",
            "detail": "Authentication error: 2"
          }
        ]
      }
    }
    

如果按照上述步驟操作後仍有問題,請著手排解 Google Ads API 錯誤。

判斷問題

Google Ads API 通常會以 JSON 失敗物件的形式回報錯誤,其中包含回應中的錯誤清單。這些物件會提供錯誤代碼,以及說明錯誤發生原因的訊息。這些是問題可能原因的第一個信號。

{
  "errors": [
    {
      "errorCode": { "fieldMaskError": "FIELD_NOT_FOUND" },
      "message": "The field mask contained an invalid field: 'keyword.match_type'.",
      "location": {
        "fieldPathElements": [
          { "fieldName": "operations", "index": 1 }
        ]
      }
    }
  ]
}

我們所有的用戶端程式庫都會擲回例外狀況,封裝回應中的錯誤。建議您先擷取這些例外狀況,並在記錄或疑難排解畫面中列印訊息。將這項資訊與應用程式中的其他記錄事件整合,有助於全面瞭解可能觸發問題的原因。在記錄中找出錯誤後,您需要瞭解錯誤的含義。

研究錯誤

  1. 請參閱常見錯誤說明文件,其中涵蓋最常遇到的錯誤。其中說明錯誤訊息、相關 API 參考資料,以及如何避免或處理錯誤。

  2. 如果常見錯誤說明文件未提及該錯誤,請參閱參考文件,並找出錯誤字串。

  3. 搜尋我們的支援管道,即可與其他開發人員交流,瞭解他們使用 API 的經驗。其他人可能已遇到並解決您目前的問題。

  4. 如需排解驗證或帳戶限制問題,請前往 Google Ads 說明中心。Google Ads API 沿用 Google Ads 核心產品的規則和限制。

  5. 網誌文章有時是排解應用程式問題時的良好參考資料。

  6. 如果遇到未列出的錯誤,請與支援團隊聯絡。

研究錯誤後,接下來要找出根本原因。

找出原因

查看例外狀況訊息,找出錯誤原因。查看回應後,請檢查要求,找出可能的原因。部分 Google Ads API 錯誤訊息會在 GoogleAdsError 的 location 欄位中包含 fieldPathElements,指出要求中發生錯誤的位置。例如:

{
  "errors": [
    {
      "errorCode": {"criterionError": "CANNOT_ADD_CRITERIA_TYPE"},
      "message": "Criteria type can not be targeted.",
      "trigger": { "stringValue": "" },
      "location": {
        "fieldPathElements": [
          { "fieldName": "operations", "index": 0 },
          { "fieldName": "create" },
          { "fieldName": "keyword" }
        ]
      }
    }
  ]
}

排解問題時,您可能會發現應用程式向 API 提供錯誤資訊。強烈建議您使用整合式開發環境 (IDE) 偵錯工具設定中斷點、逐行檢查程式碼,並在傳送前檢查建構的要求酬載。

請仔細檢查,確認要求與應用程式輸入內容相符 (例如,要求中可能沒有廣告活動名稱)。請務必傳送與要進行的更新相符的欄位遮罩,Google Ads API 支援稀疏更新。在變更要求中,從欄位遮罩省略欄位表示 API 應保留該欄位。如果應用程式擷取物件、進行變更並傳回,您可能會寫入不支援更新的欄位。請參閱參考文件中的欄位說明,瞭解更新欄位時是否有任何限制。

如何取得協助

有時您可能無法自行找出並解決問題。如需協助,請聯絡支援團隊。

請盡可能在查詢中提供更多資訊。建議項目包括:

  • 清理過的 JSON 要求和回應。請務必移除機密資訊,例如 OAuth 存取權杖、更新權杖和客戶 ID。
  • 程式碼片段。如果您遇到特定語言的問題,或需要 API 方面的協助,請附上程式碼片段,說明您正在執行的操作。
  • request-id。這樣一來,如果要求是針對正式環境提出,Google 開發人員關係團隊成員就能找到該要求。建議您記錄回應標頭或例外狀況中包含的 request-id (用於封裝回應錯誤),以及比單獨 request-id 更多的背景資訊。
  • 其他資訊 (例如執行階段或解譯器版本和平台) 也可能有助於疑難排解。

修正問題

您已找出問題並提出解決方案,現在可以進行變更,並針對測試帳戶 (建議) 或實際工作環境 (如果錯誤只適用於特定實際工作環境帳戶中的資料) 測試修正。

後續步驟

解決這個問題後,您是否注意到有任何方法可以改善程式碼,從一開始就避免這個問題?

建立一組良好的單元測試,有助於大幅提升程式碼品質和可靠性。此外,這項功能還能加快測試新變更的程序,確保變更不會破壞先前的功能。良好的錯誤處理策略也是關鍵,可確保顯示排解問題所需的所有資料。