问题排查

错误可能是由环境设置不正确、软件中的 bug 或用户输入无效引起的。无论来源如何,您都需要排查问题,并修复代码或添加逻辑来处理用户错误。本指南讨论了排查 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 支持稀疏更新。在 mutate 请求中,如果字段掩码中省略了某个字段,则表示 API 应保持该字段不变。如果您的应用检索对象、进行更改并将其发送回来,则您可能正在写入不支持更新的字段。请查看参考文档中对该字段的说明,了解更新该字段的时间或是否可以更新该字段。

如何获取帮助

您不一定能自行找出并解决问题。您可以与支持团队联系以寻求帮助。

请尽量在查询中提供尽可能多的信息。推荐的商品包括:

  • 经过整理的 JSON 请求和响应。请务必移除敏感信息,例如 OAuth 访问令牌、刷新令牌和客户 ID。
  • 代码段。如果您遇到与特定语言相关的问题,或者需要有关 API 使用方面的帮助,可以提供代码段来解释您的操作。
  • request-id。这样,Google Developers 关系团队成员就可以找到您针对生产环境发出的请求。我们建议您记录响应标头或封装响应错误的异常中包含的 request-id,以及比单独的 request-id 更多的上下文。
  • 其他信息(例如运行时或解释器版本以及平台)在排查问题时也很有用。

解决问题

现在您已经确定问题并知道了解决方案,接下来您应该在测试账号中进行更改并测试修复结果(这是推荐的做法;但如果错误仅适用于特定生产账号中的数据,请在生产环境中进行)。

后续步骤

现在您已经解决了问题,那么是否注意到有什么方法可以改进代码,从而提前避免出现此类问题呢?

创建一组良好的单元测试有助于显著提高代码质量和可靠性。此外,这还可以加快新的更改的测试过程,确保它们不会破坏以前的功能。良好的错误处理策略也是提供问题排查所需的所有必要数据的关键。