Google 广告 API - "failed with status "PERMISSION_DENIED" - "User doesn't have permission to access customer."
Google Ads API - "failed with status "PERMISSION_DENIED" - "User doesn't have permission to access customer."
我正在尝试使用 Google-ads-API。 运行 Ubuntu 20.04,Python 3.9(客户端库工作的最低要求是 3.6),使用 google-ads-api V6。这是我痛苦的故事。
我创建了一个测试经理帐户[A],生成了一个开发者令牌,并且拥有“测试级”访问权限以使用 API,这很棒。测试级别允许您调用 API 关于 information\reports 处理测试帐户(非生产)。
此外,检查了帐户 [A] 的整个 Oauth2 凭据,允许测试电子邮件,并且在 运行 宁“examples/authentication/authenticate_in_web_application.py”之后,我被重定向到一个网页,允许我的main test manager account访问第二个test manager account[B](按照文档的指示,创建另一个test manager account[B],除了主account[A]和开发者令牌),刷新令牌生成成功从这个 OAuth2 提示中,为了允许帐户 [B] 管理我的帐户 [A],将刷新令牌添加到我的 google-ads.yaml 文件,一切都很好。
当我 运行 来自示例的这个 .py 文件时
python3 google-ads-python/examples/account_management/list_accessible_customers.py
结果是这样的:
Total results: 2
Customer resource name: "customers/1792845307"
Customer resource name: "customers/5341438919"
太好了,花了 2 天时间才走到这一步。现在已经两天了,试图通过以下内容。
请注意,以上结果均来自我的帐户 [B],API 请求获取这些结果是在 google-[=51 中设置帐户 [A] 的开发人员令牌时发出的=] 文件.
因此,.yaml 文件现在包含帐户 [A] 的开发人员帐户令牌,云控制台 (.json) 文件中帐户 [A] 的 OAuth 凭据。由步骤 1 中的身份验证生成的帐户 [B] 的刷新令牌。
继续,通过 运行ning“get_account_information.py”,它也在示例文件夹中,并将上述结果中的帐户之一传递给它[强制标志 --c,这是客户端 ID),我不断收到拒绝访问错误:
python3 get_account_information.py --c 5341438919
我明白了:
Request with ID "LhKeU9ZI4zZgnp05VSHbjg" failed with status "PERMISSION_DENIED" and includes the following errors:
Error with message "User doesn't have permission to access customer. Note: If you're accessing a client customer, the manager's customer id must be set in the 'login-customer-id' header. See https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid".```
我试过设置“经理的客户 ID 必须在 'login-customer-id' 中设置”,这个 login-customer-id 位于 .yaml 文件中。我已尝试将其设置为步骤 2 中的调用结果。我还尝试从帐户 [A] 添加客户经理 ID。我尝试通过 google-ads 的 UI 手动添加帐户 [A] 作为帐户 [B] 的帐户经理,然后尝试为所有这些链接的帐户再次设置“登录客户 ID”进程,然而,惨败。
示例目录中的所有 .py 文件都被拒绝访问。在这个冗长的过程中,尽量做到详尽和详细,希望它有意义。如果您尝试过使用这个 API,您就会理解我的意思,并且我期待任何关于此的 insight\help\input,即使您没有使用过这个 API。
在文档中,指南说在创建测试开发人员经理帐户后,该帐户下的所有帐户也将是测试帐户,并会以红色标签标明“TEST”,否则就是生产帐户。上面的 [A]+[B] 两个帐户都是测试 manager\developer 帐户,但没有任何红色标签表明它们是测试帐户,也没有我尝试在其下创建的任何子帐户。所以我想知道我面临的 error\roadblock 是否是因为他们没有被指定为测试账户?但是为什么他们在步骤 2 中被列为“可访问帐户”。
非常感谢!如果需要任何其他信息,我会提供。
----------------已解决-------------
更新,几个小时后。我创建了另一个新的经理帐户,使用问题中提到的经理帐户 [B] 中使用的相同电子邮件。按照上面提到的相同步骤,但是这次创建后,我得到了这个“RED TEST ACCOUNT FLAG”。
我在终端中 运行 这是第 678 次,在之前大约一百次尝试之后:
u@ROOT:~/google-ads-python$ python examples/account_management/list_accessible_customers.py
[2021-01-12 11:30:08 - INFO] Request made: ClientCustomerId: None, Host: googleads.googleapis.com:443, Method: /google.ads.googleads.v6.services.CustomerService/ListAccessibleCustomers, RequestId: XIkvfX4b-xxNql705r_jbQ, IsFault: False, FaultMessage: None
Total results: 3
Customer resource name: "customers/1792845307"
Customer resource name: "customers/5341438919"
Customer resource name: "customers/3740041699"
所以,实际识别为测试的新账号是“3740041699”。记下这个数字,它被保存在 google-ads.yaml 文件中。将它添加到“login_customer_id:”下,因为它是一个“经理帐户”[B],它管理着我在其下创建的子帐户。号码991738295.
我的 .YAML 看起来像这样
# OAuth2 configuration
###############################################################################
# The below configuration parameters are used to authenticate using the #
# recommended OAuth2 flow. For more information on authenticating with OAuth2 #
# see: https://developers.google.com/google-ads/api/docs/oauth/overview #
###############################################################################
developer_token: ******** #[ from Account A]
client_id: ******.apps.googleusercontent.com #[From account A's email, that was used in google cloud console for API OAuth2]
login_customer_id: 3740041699 [The manager test account B, mentioned above]
client_secret: ******** #[From account A's email, that was used in google cloud console for API OAuth2]
refresh_token: 1//********* [After authenticating account A to have access to account B]
现在当运行把樱桃放在上面时,我们有这个:
u@ROOT:~/examples/basic_operations/get_campaigns.py -c 9917382925 #ID of child of test manager mentioned above, this is the result:
Campaign with ID 12058644642 and name "Website traffic-Search-1" was found.
[2021-01-12 11:36:39 - INFO] Request made: ClientCustomerId: 9917382925, Host: googleads.googleapis.com:443, Method: /google.ads.googleads.v6.services.GoogleAdsService/SearchStream, RequestId: Py4oeSqyYiQpBFIWuRYgEg, IsFault: False, FaultMessage: None
这正是那里的东西,如图所示:
终于在 5 天后。现在它开始工作了,实际上开始发展了。如果有人正在使用 python 客户端,并且发现这很有用,我将不胜感激,以建议有关服务器和路由的任何最佳实践或他们在使用这个有趣的 API.
进行开发时学到的东西
谢谢!祝你有美好的一天。
我正在尝试使用 Google-ads-API。 运行 Ubuntu 20.04,Python 3.9(客户端库工作的最低要求是 3.6),使用 google-ads-api V6。这是我痛苦的故事。
我创建了一个测试经理帐户[A],生成了一个开发者令牌,并且拥有“测试级”访问权限以使用 API,这很棒。测试级别允许您调用 API 关于 information\reports 处理测试帐户(非生产)。
此外,检查了帐户 [A] 的整个 Oauth2 凭据,允许测试电子邮件,并且在 运行 宁“examples/authentication/authenticate_in_web_application.py”之后,我被重定向到一个网页,允许我的main test manager account访问第二个test manager account[B](按照文档的指示,创建另一个test manager account[B],除了主account[A]和开发者令牌),刷新令牌生成成功从这个 OAuth2 提示中,为了允许帐户 [B] 管理我的帐户 [A],将刷新令牌添加到我的 google-ads.yaml 文件,一切都很好。
当我 运行 来自示例的这个 .py 文件时
python3 google-ads-python/examples/account_management/list_accessible_customers.py
结果是这样的:
Total results: 2
Customer resource name: "customers/1792845307"
Customer resource name: "customers/5341438919"
太好了,花了 2 天时间才走到这一步。现在已经两天了,试图通过以下内容。 请注意,以上结果均来自我的帐户 [B],API 请求获取这些结果是在 google-[=51 中设置帐户 [A] 的开发人员令牌时发出的=] 文件.
因此,.yaml 文件现在包含帐户 [A] 的开发人员帐户令牌,云控制台 (.json) 文件中帐户 [A] 的 OAuth 凭据。由步骤 1 中的身份验证生成的帐户 [B] 的刷新令牌。
继续,通过 运行ning“get_account_information.py”,它也在示例文件夹中,并将上述结果中的帐户之一传递给它[强制标志 --c,这是客户端 ID),我不断收到拒绝访问错误:
python3 get_account_information.py --c 5341438919
我明白了:
Request with ID "LhKeU9ZI4zZgnp05VSHbjg" failed with status "PERMISSION_DENIED" and includes the following errors:
Error with message "User doesn't have permission to access customer. Note: If you're accessing a client customer, the manager's customer id must be set in the 'login-customer-id' header. See https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid".```
我试过设置“经理的客户 ID 必须在 'login-customer-id' 中设置”,这个 login-customer-id 位于 .yaml 文件中。我已尝试将其设置为步骤 2 中的调用结果。我还尝试从帐户 [A] 添加客户经理 ID。我尝试通过 google-ads 的 UI 手动添加帐户 [A] 作为帐户 [B] 的帐户经理,然后尝试为所有这些链接的帐户再次设置“登录客户 ID”进程,然而,惨败。
示例目录中的所有 .py 文件都被拒绝访问。在这个冗长的过程中,尽量做到详尽和详细,希望它有意义。如果您尝试过使用这个 API,您就会理解我的意思,并且我期待任何关于此的 insight\help\input,即使您没有使用过这个 API。
在文档中,指南说在创建测试开发人员经理帐户后,该帐户下的所有帐户也将是测试帐户,并会以红色标签标明“TEST”,否则就是生产帐户。上面的 [A]+[B] 两个帐户都是测试 manager\developer 帐户,但没有任何红色标签表明它们是测试帐户,也没有我尝试在其下创建的任何子帐户。所以我想知道我面临的 error\roadblock 是否是因为他们没有被指定为测试账户?但是为什么他们在步骤 2 中被列为“可访问帐户”。
非常感谢!如果需要任何其他信息,我会提供。
----------------已解决-------------
更新,几个小时后。我创建了另一个新的经理帐户,使用问题中提到的经理帐户 [B] 中使用的相同电子邮件。按照上面提到的相同步骤,但是这次创建后,我得到了这个“RED TEST ACCOUNT FLAG”。
我在终端中 运行 这是第 678 次,在之前大约一百次尝试之后:
u@ROOT:~/google-ads-python$ python examples/account_management/list_accessible_customers.py
[2021-01-12 11:30:08 - INFO] Request made: ClientCustomerId: None, Host: googleads.googleapis.com:443, Method: /google.ads.googleads.v6.services.CustomerService/ListAccessibleCustomers, RequestId: XIkvfX4b-xxNql705r_jbQ, IsFault: False, FaultMessage: None
Total results: 3
Customer resource name: "customers/1792845307"
Customer resource name: "customers/5341438919"
Customer resource name: "customers/3740041699"
所以,实际识别为测试的新账号是“3740041699”。记下这个数字,它被保存在 google-ads.yaml 文件中。将它添加到“login_customer_id:”下,因为它是一个“经理帐户”[B],它管理着我在其下创建的子帐户。号码991738295.
我的 .YAML 看起来像这样
# OAuth2 configuration
###############################################################################
# The below configuration parameters are used to authenticate using the #
# recommended OAuth2 flow. For more information on authenticating with OAuth2 #
# see: https://developers.google.com/google-ads/api/docs/oauth/overview #
###############################################################################
developer_token: ******** #[ from Account A]
client_id: ******.apps.googleusercontent.com #[From account A's email, that was used in google cloud console for API OAuth2]
login_customer_id: 3740041699 [The manager test account B, mentioned above]
client_secret: ******** #[From account A's email, that was used in google cloud console for API OAuth2]
refresh_token: 1//********* [After authenticating account A to have access to account B]
现在当运行把樱桃放在上面时,我们有这个:
u@ROOT:~/examples/basic_operations/get_campaigns.py -c 9917382925 #ID of child of test manager mentioned above, this is the result:
Campaign with ID 12058644642 and name "Website traffic-Search-1" was found.
[2021-01-12 11:36:39 - INFO] Request made: ClientCustomerId: 9917382925, Host: googleads.googleapis.com:443, Method: /google.ads.googleads.v6.services.GoogleAdsService/SearchStream, RequestId: Py4oeSqyYiQpBFIWuRYgEg, IsFault: False, FaultMessage: None
这正是那里的东西,如图所示:
终于在 5 天后。现在它开始工作了,实际上开始发展了。如果有人正在使用 python 客户端,并且发现这很有用,我将不胜感激,以建议有关服务器和路由的任何最佳实践或他们在使用这个有趣的 API.
进行开发时学到的东西谢谢!祝你有美好的一天。