دو نوع حساب Google Ads وجود دارد: حسابهای مدیر Google Ads و حسابهای تبلیغکننده Google Ads. برای توضیح دقیق درباره نحوه ارتباط این شرایط و شرایط دیگر (مانند حساب مشتری و مشتری)، به انواع حساب مراجعه کنید.
حسابهای مدیر میتوانند حسابهای مدیر Google Ads دیگر یا حسابهای تبلیغکننده Google Ads را مدیریت کنند. میتوانید حساب تبلیغکننده را به حساب مدیر پیوند دهید و سپس حساب تبلیغکننده را ازطریق حساب مدیر مدیریت کنید. ساختار پیوندشده کلی یک گراف غیرچرخهای جهتدار با حسابهای تبلیغکننده در سطح برگ است.
میتوانید به کاربران یا حسابهای سرویس بهصورت جداگانه اجازه دسترسی به حسابهای Google Ads بدهید. دو روش برای دادن دسترسی به کاربران به حساب تبلیغکننده وجود دارد:
- با دعوت کردن کاربر به حساب تبلیغکننده، به او دسترسی مستقیم به حساب بدهید.
- با دعوت کردن کاربر به حساب مدیری که به آن حساب پیوند داده شده است، به او دسترسی غیرمستقیم به حساب تبلیغکننده بدهید. کاربر به حساب آگهیدهنده دسترسی پیدا میکند زیرا حساب مدیر به همه حسابهای پیوندشده تحت آن دسترسی دارد.
همچنین میتوانید هنگام دعوت از کاربر برای مدیریت حساب، نقشهای کاربر را اختصاص دهید.
سلسلهمراتب حساب زیر را درنظر بگیرید. فرض کنید همه کاربران دسترسی «استاندارد» دارند.

جدول زیر ساختار این حساب را خلاصه میکند.
| کاربر | دسترسی مستقیم دارد به | دسترسی غیرمستقیم به این موارد دارد |
|---|---|---|
| U1, SA1 | M1 | M2، A1، A2، A3 |
| U2 | M2، M3 | A1، A2، A3، A4 |
| U3 | A4 |
شناسه مشتری ورود به سیستم
کاربر ممکن است به چندین سلسله مراتب حساب دسترسی داشته باشد. هنگام برقراری تماس API در چنین مواردی، باید حساب اصلی را که باید برای تعیین صحیح سطوح دسترسی حساب و مجوز استفاده شود مشخص کنید. برای انجام این کار،
سرصفحه login-customer-id را در درخواست میانای برنامهسازی کاربردی خود اضافه کنید.
جدول زیر از سلسلهمراتب حساب از مثال قبلی استفاده میکند تا نشان دهد از کدام شناسههای مشتری ورود به سیستم میتوانید استفاده کنید و فهرست حسابهای متناظری را که میتوانید با آنها تماس بگیرید نشان میدهد.
| کاربر | شناسه مشتری ورود به سیستم برای استفاده | حسابهایی که فراخوانیهای میانای برنامهسازی کاربردی به آنها انجام میشود |
|---|---|---|
| U1، SA1 | M1 | M1، M2، A1، A2، A3 |
| U2 | M2 | M2، A1، A2، A3 |
| U2 | M3 | M3، A1، A4 |
| U3 | A4 | A4 |
اگر کاربر به حساب Google Ads که با آن تماس میگیرید دسترسی مستقیم داشته باشد، میتوانید از ارائه سرایند login-customer-id رد شوید. برای مثال، هنگام استفاده از اطلاعات اعتباری U3 برای برقراری تماس با A4، نیازی نیست سرصفحه login-customer-id را مشخص کنید، زیرا سرورهای Google Ads میتوانند سطح دسترسی را از شناسه مشتری (A4) بهدرستی تعیین کنند.
اگر از کتابخانه کارخواه Google Ads API استفاده میکنید، از تنظیمات زیر برای مشخص کردن سرصفحه login-customer-id استفاده کنید.
جاوا
تنظیم زیر را به فایل ads.properties خود اضافه کنید.
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
دات نت
وقتی شیء GoogleAdsConfig را مقداردهی اولیه میکنید
و از آن برای ایجاد شیء GoogleAdsClient استفاده میکنید، تنظیم زیر را اضافه کنید.
GoogleAdsConfig config = new GoogleAdsConfig()
{
// ...
LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
};
GoogleAdsClient client = new GoogleAdsClient(config);
Python
تنظیم زیر را به فایل google-ads.yaml اضافه کنید.
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
PHP
تنظیم زیر را به فایل google_ads_php.ini اضافه کنید.
[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
Ruby
تنظیم زیر را به فایل google_ads_config.rb اضافه کنید.
Google::Ads::GoogleAds::Config.new do |c|
c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end
با ارسال مسیر جایی که این فایل را نگه میدارید، نمونهای از GoogleAdsClient ایجاد کنید.
client = Google::Ads::GoogleAds::GoogleAdsClient.new(
'path/to/google_ads_config.rb'
)
پرل
تنظیم زیر را به فایل googleads.properties خود اضافه کنید.
loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
فر کردن
هنگام اجرای فرمان curl، آرگومان خط فرمان زیر را مشخص کنید.
-H "login-customer-id: INSERT_LOGIN_CUSTOMER_ID_HERE"میتوانید از روش
CustomerService.ListAccessibleCustomers
برای بازیابی فهرست حسابهایی که کاربر دسترسی مستقیم به آنها دارد استفاده کنید.
از این حسابها میتوان بهعنوان مقادیر معتبر برای سرصفحه login-customer-id استفاده کرد.
جاوا
private void runExample(GoogleAdsClient client) { // Optional: Change credentials to use a different refresh token, to retrieve customers // available for a specific user. // // UserCredentials credentials = // UserCredentials.newBuilder() // .setClientId("INSERT_OAUTH_CLIENT_ID") // .setClientSecret("INSERT_OAUTH_CLIENT_SECRET") // .setRefreshToken("INSERT_REFRESH_TOKEN") // .build(); // // client = client.toBuilder().setCredentials(credentials).build(); try (CustomerServiceClient customerService = client.getLatestVersion().createCustomerServiceClient()) { ListAccessibleCustomersResponse response = customerService.listAccessibleCustomers( ListAccessibleCustomersRequest.newBuilder().build()); System.out.printf("Total results: %d%n", response.getResourceNamesCount()); for (String customerResourceName : response.getResourceNamesList()) { System.out.printf("Customer resource name: %s%n", customerResourceName); } } }
C#
public void Run(GoogleAdsClient client) { // Get the CustomerService. CustomerServiceClient customerService = client.GetService(Services.V25.CustomerService); try { // Retrieve the list of customer resources. string[] customerResourceNames = customerService.ListAccessibleCustomers(); // Display the result. foreach (string customerResourceName in customerResourceNames) { Console.WriteLine( $"Found customer with resource name = '{customerResourceName}'."); } } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
PHP
public static function runExample(GoogleAdsClient $googleAdsClient) { $customerServiceClient = $googleAdsClient->getCustomerServiceClient(); // Issues a request for listing all accessible customers. $accessibleCustomers = $customerServiceClient->listAccessibleCustomers(new ListAccessibleCustomersRequest()); print 'Total results: ' . count($accessibleCustomers->getResourceNames()) . PHP_EOL; // Iterates over all accessible customers' resource names and prints them. foreach ($accessibleCustomers->getResourceNames() as $resourceName) { /** @var string $resourceName */ printf("Customer resource name: '%s'%s", $resourceName, PHP_EOL); } }
Python
def main(client: GoogleAdsClient) -> None: customer_service: CustomerServiceClient = client.get_service( "CustomerService" ) accessible_customers: ListAccessibleCustomersResponse = ( customer_service.list_accessible_customers() ) result_total: int = len(accessible_customers.resource_names) print(f"Total results: {result_total}") resource_names: List[str] = accessible_customers.resource_names for resource_name in resource_names: # resource_name is implicitly str print(f'Customer resource name: "{resource_name}"')
Ruby
def list_accessible_customers() # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new accessible_customers = client.service.customer.list_accessible_customers().resource_names accessible_customers.each do |resource_name| puts "Customer resource name: #{resource_name}" end end
پرل
sub list_accessible_customers { my ($api_client) = @_; my $list_accessible_customers_response = $api_client->CustomerService()->list_accessible_customers(); printf "Total results: %d.\n", scalar @{$list_accessible_customers_response->{resourceNames}}; foreach my $resource_name (@{$list_accessible_customers_response->{resourceNames}}) { printf "Customer resource name: '%s'.\n", $resource_name; } return 1; }
curl
# Returns the resource names of customers directly accessible by the user # authenticating the call. # # Variables: # API_VERSION, # OAUTH2_ACCESS_TOKEN: # See https://developers.google.com/google-ads/api/rest/auth#request_headers # for details. # curl -f --request GET \ "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
اگر روش ListAccessibleCustomers شناسه مشتری من را بازیابی نکند چه میشود؟
اگر CustomerService.ListAccessibleCustomers
روش شناسه مشتریای را که انتظار داشتید در نتایج نشان داده شود بازیابی نکرد،
چند توضیح احتمالی وجود دارد.
به شناسه مشتری دسترسی دارید، اما این دسترسی ازطریق حساب مدیر اصلی صادر شده است. برای مثال، اگر روش
ListAccessibleCustomersرا با اطلاعات کاربری کاربرU1در مثال قبلی فراخوانی کنید، این روش فقطM1را در نتایج برمیگرداند، هرچندU1به حسابهای بیشتری دسترسی دارد. برای تأیید این احتمال، سلسلهمراتب حساب را با اجرای پُرسمانهایsearchیاsearchStreamدر مقابل منبعcustomer_clientبرای هریک از حسابهای برگرداندهشده توسط روشListAccessibleCustomersبازیابی کنید. برای انجام این کار، هریک از این حسابها را بهعنوانlogin-customer-idتنظیم کنید، همانطور که در بخش قبلی توضیح داده شده است. اگر به حساب هدف دسترسی دارید، میتوانید آن را بهعنوان بخشی از یکی از سلسلهمراتب حساب واکشی کنید.از اعتبارنامههای OAuth نادرست استفاده میکنید. رایجترین سناریو این است که از اعتبارنامه کاربر دیگری استفاده میکنید. برای مثال، ممکن است بهدلیل اشتباه در ترکیب کردن اطلاعات اعتباری محیط آزمایشی یا توسعهدهنده با اطلاعات اعتباری تولید یا خواندن نادرست اطلاعات اعتباری کاربر دیگر از پایگاه داده یا حافظه نهان محلی باشد. یکی از روشهای ممکن برای عیبیابی این مشکل استفاده از Google People API برای بازیابی نام و نشانی ایمیل کاربر واردشده و بررسی مطابقت آن با نشانی ایمیل موردانتظار شما است.
به این حساب دسترسی ندارید. راهنمای دسترسی به حساب را دنبال کنید تا به حساب مشتری درست دسترسی پیدا کنید.
نقشهای کاربر
Google Ads API مدل دسترسی جداگانهای ندارد یا از حوزههای جداگانه OAuth 2.0 برای محدود کردن عملکرد استفاده نمیکند. برای مثال، Google Ads API از دامنههای یکسانی برای عملیات فقط خواندنی درمقایسه با عملیات خواندن-نوشتن استفاده میکند. درعوض، Google Ads API از همان نقشهای کاربر که Google Ads پشتیبانی میکند پیروی میکند. وقتی نقش کاربری به حسابی در سطح مدیر اعطا میشود، حسابهای موجود در سلسلهمراتب آن نقش را بهارث میبرند. اگر کاربری نقشهای متناقضی در یک حساب مشخص داشته باشد،
سطح صحیح توسط حساب login-customer-id مشخصشده در
درخواست API حل میشود.
جدول زیر از سلسلهمراتب حساب مثال قبلی استفاده میکند و تأثیر اعطای نقشهای کاربری مختلف به کاربران را نشان میدهد.
| کاربر | نقش کاربر اعطا شد | login-customer-id | سطح دسترسی مؤثر |
|---|---|---|---|
| SA1 | دسترسی استاندارد در حساب M1 | M1 | دسترسی استاندارد در M1، M2، A1، A2، A3 |
| U2 |
دسترسی استاندارد در M2 دسترسی فقط خواندنی در M3 |
M2 | دسترسی استاندارد در M2، A1، A2، A3 |
| U2 |
دسترسی استاندارد در M2 دسترسی فقط خواندنی در M3 |
M3 | دسترسی فقط خواندنی در M3، A1، A4 |