トラブルシューティング

エラーは、環境設定の誤り、ソフトウェアのバグ、ユーザーからの無効な入力が原因で発生する可能性があります。原因が何であれ、問題をトラブルシューティングして、コードを修正するか、ユーザー エラーを処理するロジックを追加する必要があります。このガイドでは、Google Ads API のエラーをトラブルシューティングする際のベスト プラクティスについて説明します。

接続を確認する

  1. Google Ads API にアクセスできるようにし、正しい設定を行ってください。レスポンスから HTTP エラーが返された場合は、それらに慎重に対処し、使用する予定のサービスにご自身のコードからアクセスしていることを確認してください。

  2. サービスがユーザーを認証できるように、認証情報はリクエストに埋め込まれています。特にクライアント ライブラリを使用せずに呼び出しを処理する場合は、Google Ads API の 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 広告ヘルプセンターをご覧ください。Google Ads API は、Google 広告コアプロダクトのルールと 制限を継承しています。

  5. ブログ投稿は、アプリケーションの トラブルシューティングを行う際に役立つことがあります。

  6. ドキュメントに記載されていないエラーが発生した場合は、 サポートにお問い合わせください。

エラーを調査したら、根本原因を特定します。

原因を特定する

例外メッセージを調べて、エラーの原因を調べます。レスポンスを確認してから、リクエストを調べて、考えられる原因を探します。一部の Google Ads API エラー メッセージには、fieldPathElements が location フィールドの GoogleAdsError に含まれており、 リクエスト内のエラーが発生した場所を示しています。次に例を示します。

{
  "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)デバッガを使用してブレークポイントを設定し、コードを 1 行ずつステップ実行して、送信前に構築されたリクエスト ペイロードを検査することを強くおすすめします。

リクエストがアプリケーションの入力と一致していることを再確認します(たとえば、キャンペーンの名前がリクエストに反映されていない可能性があります)。更新する内容と一致するフィールド マスクを送信してください。Google Ads API はスパース更新をサポートしています。変更リクエストのフィールド マスクからフィールドを省略すると、API はそのフィールドをそのままにします。アプリケーションがオブジェクトを取得して変更し、送信し直す場合、更新をサポートしていないフィールドに書き込んでいる可能性があります。フィールドを更新できるタイミングや更新できるかどうかについては、リファレンス ドキュメントのフィールドの説明をご覧ください。

サポートの利用方法

問題を特定して解決することが常に可能とは限りません。サポートに お問い合わせください。

クエリにはできるだけ多くの情報を含めてください。推奨される項目は次のとおりです。

  • 不要な情報を削除した JSON リクエストとレスポンス。OAuth アクセス トークン、更新トークン、顧客 ID などの機密情報は削除してください。
  • コード スニペット。言語固有の問題や API の操作についてのサポートを求めている場合は、コードのスニペットを提供すると、行おうとしていることの説明に役立ちます。
  • request-id。これにより、本番環境に対してリクエストが行われた場合に、Google Developers チームのメンバーがリクエストを見つけることができます。レスポンス エラーをカプセル化するレスポンス ヘッダーまたは例外に含まれる request-id と、request-id 単独よりも多くのコンテキストを記録することをおすすめします。
  • ランタイムやインタープリタのバージョン、プラットフォームなどの追加情報も、トラブルシューティングに役立ちます。

問題を解決する

問題を特定でき、解決方法が判明したら、実際に修正を加えて修正箇所をテストします。このとき、できればテスト アカウントを使用することをおすすめします。ただし、特定の本番用アカウントのデータにのみ起こるバグの場合には、本番環境でテストする必要があります。

次のステップ

問題の解決の過程で、コードを改良して問題の発生を未然に防ぐ方法がみつかる場合があります。

適切な単体テストを作成すると、コードの品質と信頼性が大幅に向上します。また、新しい変更をもすぐにテストできるため、以前の機能を壊すことがありません。適切なエラー処理戦略も、トラブルシューティングに必要なすべてのデータを表面化するうえで重要です。