حسابهای مدیر ، حسابهای Google Ads هستند که برای اهداف اداری و نه برای ارائه تبلیغات استفاده میشوند. آنها به عنوان نقاط دسترسی واحد برای حسابهایی که مدیریت میکنند عمل میکنند، بنابراین در تنظیم صورتحساب تلفیقی و سایر ویژگیها در چندین حساب استفاده میشوند.
خدمات
دو سرویسی که برای ایجاد پیوند بین دو حساب در Google Ads API استفاده میشوند، CustomerClientLinkService
و CustomerManagerLinkService
هستند. در نام این خدمات، کلمه "مشتری" به حساب جاری در متن درخواست اشاره دارد.
اگر یک حساب مدیر هستید که به مشتریان مدیریت شده خود نگاه می کنید، از
CustomerClientLinkService
استفاده می کنید.اگر یک حساب مشتری هستید که علاقه مند به پیوند به یک حساب مدیر بالاتر از شما در سلسله مراتب هستید،
CustomerManagerLinkService
را انتخاب کنید.
این دو سرویس در اصل دو دیدگاه متفاوت از یک پیوند هستند. اگر حساب مدیر M
حساب مشتری C
را مدیریت کند، در آن صورت CustomerClientLink
وقتی از حساب M
مشاهده میشود، همان موجودیت CustomerManagerLink
است که از حساب C
مشاهده میشود.
رویه
پیوند دو حساب باید همیشه از حساب مدیر شروع شود و سپس پیوند باید از حساب مشتری پذیرفته شود. وضعیت پیوند در قسمت status
CustomerClientLink
یا CustomerManagerLink
ذخیره می شود. لیست وضعیت های معتبر را ببینید. از PENDING
برای شروع پیوند و از ACTIVE
برای پذیرش پیوند استفاده کنید.
پیوند دو حساب Google Ads از قبل موجود در سه مرحله قابل انجام است.
- در حین احراز هویت بهعنوان حساب مدیر، با ایجاد یک
CustomerClientLink
با وضعیتPENDING
، دعوتنامهای را برای حساب مشتری ارسال کنید. - هنگام احراز هویت بهعنوان حساب مدیر، از
GoogleAdsService
پرس و جو کنید تاmanager_link_id
ازCustomerClientLink
که ایجاد کردهاید را بیابید. - هنگام احراز هویت به عنوان حساب مشتری، دعوت حساب مدیر را با تغییر دادن
CustomerManagerLink
برای داشتن وضعیتACTIVE
بپذیرید.
مثال
مثال کد زیر نحوه ایجاد پیوند بین یک حساب مدیر و مشتری آن را نشان می دهد:
جاوا
private void runExample(GoogleAdsClient googleAdsClient, long clientCustomerId, long managerId) { // This example assumes that the same credentials will work for both customers, but that may not // be the case. If you need to use different credentials for each customer, then you may either // update the client configuration or instantiate two clients, one for each set of credentials. // Always make sure you use a GoogleAdsClient with the proper credentials to fetch any services // you need to use. // Extend an invitation to the client while authenticating as the manager. googleAdsClient = googleAdsClient.toBuilder().setLoginCustomerId(managerId).build(); CustomerClientLinkOperation.Builder clientLinkOp = CustomerClientLinkOperation.newBuilder(); clientLinkOp .getCreateBuilder() .setStatus(ManagerLinkStatus.PENDING) .setClientCustomer(ResourceNames.customer(clientCustomerId)); String pendingLinkResourceName; try (CustomerClientLinkServiceClient customerClientLinkServiceClient = googleAdsClient.getLatestVersion().createCustomerClientLinkServiceClient()) { MutateCustomerClientLinkResponse response = customerClientLinkServiceClient.mutateCustomerClientLink( String.valueOf(managerId), clientLinkOp.build()); pendingLinkResourceName = response.getResult().getResourceName(); System.out.printf( "Extended an invitation from customer %s to customer %s with client link resource name" + " %s%n", managerId, clientCustomerId, pendingLinkResourceName); } // Find the manager_link_id of the link we just created, so we can construct the resource name // for the link from the client side. String query = "SELECT customer_client_link.manager_link_id FROM customer_client_link WHERE" + " customer_client_link.resource_name = '" + pendingLinkResourceName + "'"; long managerLinkId; try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) { SearchPagedResponse response = googleAdsServiceClient.search(String.valueOf(managerId), query); GoogleAdsRow result = response.iterateAll().iterator().next(); managerLinkId = result.getCustomerClientLink().getManagerLinkId(); } // Accept the link using the client account. CustomerManagerLinkOperation.Builder managerLinkOp = CustomerManagerLinkOperation.newBuilder(); managerLinkOp .getUpdateBuilder() .setResourceName( ResourceNames.customerManagerLink(clientCustomerId, managerId, managerLinkId)) .setStatus(ManagerLinkStatus.ACTIVE); managerLinkOp.setUpdateMask(FieldMasks.allSetFieldsOf(managerLinkOp.getUpdate())); googleAdsClient = googleAdsClient.toBuilder().setLoginCustomerId(clientCustomerId).build(); try (CustomerManagerLinkServiceClient managerLinkServiceClient = googleAdsClient.getLatestVersion().createCustomerManagerLinkServiceClient()) { MutateCustomerManagerLinkResponse response = managerLinkServiceClient.mutateCustomerManagerLink( String.valueOf(clientCustomerId), Arrays.asList(managerLinkOp.build())); System.out.printf( "Client accepted invitation with resource name %s%n", response.getResults(0).getResourceName()); } }
سی شارپ
public void Run(GoogleAdsClient client, long managerCustomerId, long clientCustomerId) { // Remarks: For ease of understanding, this code example assumes that managerCustomerId // and clientCustomerId have the login email (and hence the same credentials work for // both accounts). In real life, this might not be the case, so you'd have a separate // GoogleAdsClient for managerCustomerId and clientCustomerId. try { // Extend an invitation to the client while authenticating as the manager. string customerClientLinkResourceName = CreateInvitation(client, managerCustomerId, clientCustomerId); // Retrieve the manager link information. string managerLinkResourceName = GetManagerLinkResourceName(client, managerCustomerId, clientCustomerId, customerClientLinkResourceName); // Accept the manager's invitation while authenticating as the client. AcceptInvitation(client, clientCustomerId, managerLinkResourceName); } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } } /// <summary> /// Extends an invitation from a manager customer to a client customer. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="managerCustomerId">The manager customer ID.</param> /// <param name="clientCustomerId">The client customer ID.</param> /// <returns>The invitation resource name.</returns> private string CreateInvitation(GoogleAdsClient client, long managerCustomerId, long clientCustomerId) { // Get the CustomerClientLinkService. CustomerClientLinkServiceClient customerClientLinkService = client.GetService(Services.V17.CustomerClientLinkService); // Create a client with the manager customer ID as login customer ID. client.Config.LoginCustomerId = managerCustomerId.ToString(); // Create a customer client link. CustomerClientLink customerClientLink = new CustomerClientLink() { ClientCustomer = ResourceNames.Customer(clientCustomerId), // Sets the client customer to invite. Status = ManagerLinkStatus.Pending }; // Creates a customer client link operation for creating the one above. CustomerClientLinkOperation customerClientLinkOperation = new CustomerClientLinkOperation() { Create = customerClientLink }; // Issue a mutate request to create the customer client link. MutateCustomerClientLinkResponse response = customerClientLinkService.MutateCustomerClientLink( managerCustomerId.ToString(), customerClientLinkOperation); // Prints the result. string customerClientLinkResourceName = response.Result.ResourceName; Console.WriteLine($"An invitation has been extended from the manager " + $"customer {managerCustomerId} to the client customer {clientCustomerId} with " + $"the customer client link resource name '{customerClientLinkResourceName}'."); // Returns the resource name of the created customer client link. return customerClientLinkResourceName; } /// <summary> /// Retrieves the manager link resource name of a customer client link given its resource /// name. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="managerCustomerId">The manager customer ID.</param> /// <param name="clientCustomerId">The client customer ID.</param> /// <param name="customerClientLinkResourceName">The customer client link resource /// name.</param> /// <returns>The manager link resource name.</returns> private string GetManagerLinkResourceName(GoogleAdsClient client, long managerCustomerId, long clientCustomerId, string customerClientLinkResourceName) { // Get the GoogleAdsService. GoogleAdsServiceClient googleAdsService = client.GetService(Services.V17.GoogleAdsService); // Create a client with the manager customer ID as login customer ID. client.Config.LoginCustomerId = managerCustomerId.ToString(); // Creates the query. string query = "SELECT customer_client_link.manager_link_id FROM " + "customer_client_link WHERE customer_client_link.resource_name = " + $"'{customerClientLinkResourceName}'"; // Issue a search request by specifying the page size. GoogleAdsRow result = googleAdsService.Search( managerCustomerId.ToString(), query).First(); // Gets the ID and resource name associated to the manager link found. long managerLinkId = result.CustomerClientLink.ManagerLinkId; string managerLinkResourceName = ResourceNames.CustomerManagerLink( clientCustomerId, managerCustomerId, managerLinkId); // Prints the result. Console.WriteLine($"Retrieved the manager link of the customer client link: its ID " + $"is {managerLinkId} and its resource name is '{managerLinkResourceName}'."); // Returns the resource name of the manager link found. return managerLinkResourceName; } /// <summary> /// Accepts the invitation. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="clientCustomerId">The client customer ID.</param> /// <param name="managerLinkResourceName">The manager link resource name.</param> private void AcceptInvitation(GoogleAdsClient client, long clientCustomerId, string managerLinkResourceName) { // Get the CustomerManagerLinkService. CustomerManagerLinkServiceClient customerManagerLinkService = client.GetService(Services.V17.CustomerManagerLinkService); // Create a client with the client customer ID as login customer ID. client.Config.LoginCustomerId = clientCustomerId.ToString(); // Creates the customer manager link with the updated status. CustomerManagerLink customerManagerLink = new CustomerManagerLink() { ResourceName = managerLinkResourceName, Status = ManagerLinkStatus.Active }; // Creates a customer manager link operation for updating the one above. CustomerManagerLinkOperation customerManagerLinkOperation = new CustomerManagerLinkOperation() { Update = customerManagerLink, UpdateMask = FieldMasks.AllSetFieldsOf(customerManagerLink) }; // Issue a mutate request to update the customer manager link. MutateCustomerManagerLinkResponse response = customerManagerLinkService.MutateCustomerManagerLink( clientCustomerId.ToString(), new[] { customerManagerLinkOperation } ); // Prints the result. Console.WriteLine($"The client {clientCustomerId} accepted the invitation with " + $"the resource name '{response.Results[0].ResourceName}"); }
PHP
public static function runExample(int $managerCustomerId, int $clientCustomerId) { // Extends an invitation to the client while authenticating as the manager. $customerClientLinkResourceName = self::createInvitation( $managerCustomerId, $clientCustomerId ); // Retrieves the manager link information. $managerLinkResourceName = self::getManagerLinkResourceName( $managerCustomerId, $clientCustomerId, $customerClientLinkResourceName ); // Accepts the manager's invitation while authenticating as the client. self::acceptInvitation($clientCustomerId, $managerLinkResourceName); } /** * Extends an invitation from a manager customer to a client customer. * * @param int $managerCustomerId the manager customer ID * @param int $clientCustomerId the customer ID * @return string the resource name of the customer client link created for the invitation */ private static function createInvitation( int $managerCustomerId, int $clientCustomerId ) { // Creates a client with the manager customer ID as login customer ID. $googleAdsClient = self::createGoogleAdsClient($managerCustomerId); // Creates a customer client link. $customerClientLink = new CustomerClientLink([ // Sets the client customer to invite. 'client_customer' => ResourceNames::forCustomer($clientCustomerId), 'status' => ManagerLinkStatus::PENDING ]); // Creates a customer client link operation for creating the one above. $customerClientLinkOperation = new CustomerClientLinkOperation(); $customerClientLinkOperation->setCreate($customerClientLink); // Issues a mutate request to create the customer client link. $customerClientLinkServiceClient = $googleAdsClient->getCustomerClientLinkServiceClient(); $response = $customerClientLinkServiceClient->mutateCustomerClientLink( MutateCustomerClientLinkRequest::build( $managerCustomerId, $customerClientLinkOperation ) ); // Prints the result. $customerClientLinkResourceName = $response->getResult()->getResourceName(); printf( "An invitation has been extended from the manager customer %d" . " to the client customer %d with the customer client link resource name '%s'.%s", $managerCustomerId, $clientCustomerId, $customerClientLinkResourceName, PHP_EOL ); // Returns the resource name of the created customer client link. return $customerClientLinkResourceName; } /** * Retrieves the manager link resource name of a customer client link given its resource name. * * @param int $managerCustomerId the manager customer ID * @param int $clientCustomerId the customer ID * @param string $customerClientLinkResourceName the customer client link resource name * @return string the manager link resource name */ private static function getManagerLinkResourceName( int $managerCustomerId, int $clientCustomerId, string $customerClientLinkResourceName ) { // Creates a client with the manager customer ID as login customer ID. $googleAdsClient = self::createGoogleAdsClient($managerCustomerId); // Creates the query. $query = "SELECT customer_client_link.manager_link_id FROM customer_client_link" . " WHERE customer_client_link.resource_name = '$customerClientLinkResourceName'"; // Issues a search request. $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); $response = $googleAdsServiceClient->search( SearchGoogleAdsRequest::build($managerCustomerId, $query) ); // Gets the ID and resource name associated to the manager link found. $managerLinkId = $response->getIterator()->current() ->getCustomerClientLink() ->getManagerLinkId(); $managerLinkResourceName = ResourceNames::forCustomerManagerLink( $clientCustomerId, $managerCustomerId, $managerLinkId ); // Prints the result. printf( "Retrieved the manager link of the customer client link:" . " its ID is %d and its resource name is '%s'.%s", $managerLinkId, $managerLinkResourceName, PHP_EOL ); // Returns the resource name of the manager link found. return $managerLinkResourceName; } /** * Accepts an invitation. * * @param int $clientCustomerId the customer ID * @param string $managerLinkResourceName the resource name of the manager link to accept */ private static function acceptInvitation( int $clientCustomerId, string $managerLinkResourceName ) { // Creates a client with the client customer ID as login customer ID. $googleAdsClient = self::createGoogleAdsClient($clientCustomerId); // Creates the customer manager link with the updated status. $customerManagerLink = new CustomerManagerLink(); $customerManagerLink->setResourceName($managerLinkResourceName); $customerManagerLink->setStatus(ManagerLinkStatus::ACTIVE); // Creates a customer manager link operation for updating the one above. $customerManagerLinkOperation = new CustomerManagerLinkOperation(); $customerManagerLinkOperation->setUpdate($customerManagerLink); $customerManagerLinkOperation->setUpdateMask( FieldMasks::allSetFieldsOf($customerManagerLink) ); // Issues a mutate request to update the customer manager link. $customerManagerLinkServiceClient = $googleAdsClient->getCustomerManagerLinkServiceClient(); $response = $customerManagerLinkServiceClient->mutateCustomerManagerLink( MutateCustomerManagerLinkRequest::build( $clientCustomerId, [$customerManagerLinkOperation] ) ); // Prints the result. printf( "The client %d accepted the invitation with the resource name '%s'.%s", $clientCustomerId, $response->getResults()[0]->getResourceName(), PHP_EOL ); }
پایتون
def main(client, customer_id, manager_customer_id): # This example assumes that the same credentials will work for both # customers, but that may not be the case. If you need to use different # credentials for each customer, then you may either update the client # configuration or instantiate two clients, where at least one points to # a specific configuration file so that both clients don't read the same # file located in the $HOME dir. customer_client_link_service = client.get_service( "CustomerClientLinkService" ) # Extend an invitation to the client while authenticating as the manager. client_link_operation = client.get_type("CustomerClientLinkOperation") client_link = client_link_operation.create client_link.client_customer = customer_client_link_service.customer_path( customer_id ) client_link.status = client.enums.ManagerLinkStatusEnum.PENDING response = customer_client_link_service.mutate_customer_client_link( customer_id=manager_customer_id, operation=client_link_operation ) resource_name = response.results[0].resource_name print( f'Extended an invitation from customer "{manager_customer_id}" to ' f'customer "{customer_id}" with client link resource_name ' f'"{resource_name}"' ) # Find the manager_link_id of the link we just created, so we can construct # the resource name for the link from the client side. Note that since we # are filtering by resource_name, a unique identifier, only one # customer_client_link resource will be returned in the response query = f''' SELECT customer_client_link.manager_link_id FROM customer_client_link WHERE customer_client_link.resource_name = "{resource_name}"''' ga_service = client.get_service("GoogleAdsService") try: response = ga_service.search( customer_id=manager_customer_id, query=query ) # Since the googleads_service.search method returns an iterator we need # to initialize an iteration in order to retrieve results, even though # we know the query will only return a single row. for row in response.result: manager_link_id = row.customer_client_link.manager_link_id except GoogleAdsException as ex: handle_googleads_exception(ex) customer_manager_link_service = client.get_service( "CustomerManagerLinkService" ) manager_link_operation = client.get_type("CustomerManagerLinkOperation") manager_link = manager_link_operation.update manager_link.resource_name = ( customer_manager_link_service.customer_manager_link_path( customer_id, manager_customer_id, manager_link_id, ) ) manager_link.status = client.enums.ManagerLinkStatusEnum.ACTIVE client.copy_from( manager_link_operation.update_mask, protobuf_helpers.field_mask(None, manager_link._pb), ) response = customer_manager_link_service.mutate_customer_manager_link( customer_id=customer_id, operations=[manager_link_operation] ) print( "Client accepted invitation with resource_name: " f'"{response.results[0].resource_name}"' )
روبی
def link_manager_to_client(manager_customer_id, client_customer_id) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new # This example assumes that the same credentials will work for both customers, # but that may not be the case. If you need to use different credentials # for each customer, then you may either update the client configuration or # instantiate two clients, one for each set of credentials. Always make sure # to update the configuration before fetching any services you need to use. # Extend an invitation to the client while authenticating as the manager. client.configure do |config| config.login_customer_id = manager_customer_id.to_i end client_link = client.resource.customer_client_link do |link| link.client_customer = client.path.customer(client_customer_id) link.status = :PENDING end client_link_operation = client.operation.create_resource.customer_client_link(client_link) response = client.service.customer_client_link.mutate_customer_client_link( customer_id: manager_customer_id, operation: client_link_operation, ) client_link_resource_name = response.result.resource_name puts "Extended an invitation from customer #{manager_customer_id} to " \ "customer #{client_customer_id} with client link resource name " \ "#{client_link_resource_name}." # Find the manager_link_id of the link we just created, so we can construct # the resource name for the link from the client side. query = <<~QUERY SELECT customer_client_link.manager_link_id FROM customer_client_link WHERE customer_client_link.resource_name = '#{client_link_resource_name}' QUERY response = client.service.google_ads.search(customer_id: manager_customer_id, query: query) manager_link_id = response.first.customer_client_link.manager_link_id # Accept the link using the client account. client.configure do |config| config.login_customer_id = client_customer_id.to_i end manager_link_resource_name = client.path.customer_manager_link( client_customer_id, manager_customer_id, manager_link_id, ) manager_link_operation = client.operation.update_resource.customer_manager_link(manager_link_resource_name) do |link| link.status = :ACTIVE end response = client.service.customer_manager_link.mutate_customer_manager_link( customer_id: client_customer_id, operations: [manager_link_operation], ) puts "Client accepted invitation with resource name " \ "#{response.results.first.resource_name}." end
پرل
sub link_manager_to_client { my ($api_client, $manager_customer_id, $api_client_customer_id) = @_; # Step 1: Extend an invitation to the client customer while authenticating # as the manager. $api_client->set_login_customer_id($manager_customer_id); # Create a customer client link. my $api_client_link = Google::Ads::GoogleAds::V17::Resources::CustomerClientLink->new({ clientCustomer => Google::Ads::GoogleAds::V17::Utils::ResourceNames::customer( $api_client_customer_id), status => PENDING }); # Create a customer client link operation. my $api_client_link_operation = Google::Ads::GoogleAds::V17::Services::CustomerClientLinkService::CustomerClientLinkOperation ->new({ create => $api_client_link }); # Add the customer client link to extend an invitation to the client customer. my $api_client_link_response = $api_client->CustomerClientLinkService()->mutate({ customerId => $manager_customer_id, operation => $api_client_link_operation }); my $api_client_link_resource_name = $api_client_link_response->{result}{resourceName}; printf "Extended an invitation from the manager customer %d to the " . "client customer %d with the customer client link resource name: '%s'.\n", $manager_customer_id, $api_client_customer_id, $api_client_link_resource_name; # Step 2: Get the 'manager_link_id' of the client link we just created, # to construct the resource name of the manager link from the client side. my $search_query = "SELECT customer_client_link.manager_link_id FROM customer_client_link " . "WHERE customer_client_link.resource_name = '$api_client_link_resource_name'"; my $search_response = $api_client->GoogleAdsService()->search({ customerId => $manager_customer_id, query => $search_query }); my $manager_link_id = $search_response->{results}[0]{customerClientLink}{managerLinkId}; my $manager_link_resource_name = Google::Ads::GoogleAds::V17::Utils::ResourceNames::customer_manager_link( $api_client_customer_id, $manager_customer_id, $manager_link_id); # Step 3: Accept the manager customer's link invitation while authenticating # as the client. $api_client->set_login_customer_id($api_client_customer_id); # Create a customer manager link. my $manager_link = Google::Ads::GoogleAds::V17::Resources::CustomerManagerLink->new({ resourceName => $manager_link_resource_name, status => ACTIVE }); # Create a customer manager link operation. my $manager_link_operation = Google::Ads::GoogleAds::V17::Services::CustomerManagerLinkService::CustomerManagerLinkOperation ->new({ update => $manager_link, updateMask => all_set_fields_of($manager_link)}); # Update the customer manager link to accept the invitation. my $manager_link_response = $api_client->CustomerManagerLinkService()->mutate({ customerId => $api_client_customer_id, operations => [$manager_link_operation]}); printf "The client customer %d accepted the invitation with " . "the customer manager link resource name: '%s'.\n", $api_client_customer_id, $manager_link_response->{results}[0]{resourceName}; return 1; }
حسابهای مدیر ، حسابهای Google Ads هستند که برای اهداف اداری و نه برای ارائه تبلیغات استفاده میشوند. آنها به عنوان نقاط دسترسی واحد برای حسابهایی که مدیریت میکنند عمل میکنند، بنابراین در تنظیم صورتحساب تلفیقی و سایر ویژگیها در چندین حساب استفاده میشوند.
خدمات
دو سرویسی که برای ایجاد پیوند بین دو حساب در Google Ads API استفاده میشوند، CustomerClientLinkService
و CustomerManagerLinkService
هستند. در نام این خدمات، کلمه "مشتری" به حساب جاری در متن درخواست اشاره دارد.
اگر یک حساب مدیر هستید که به مشتریان مدیریت شده خود نگاه می کنید، از
CustomerClientLinkService
استفاده می کنید.اگر یک حساب مشتری هستید که علاقه مند به پیوند به یک حساب مدیر بالاتر از شما در سلسله مراتب هستید،
CustomerManagerLinkService
را انتخاب کنید.
این دو سرویس در اصل دو دیدگاه متفاوت از یک پیوند هستند. اگر حساب مدیر M
حساب مشتری C
را مدیریت کند، در آن صورت CustomerClientLink
وقتی از حساب M
مشاهده میشود، همان موجودیت CustomerManagerLink
است که از حساب C
مشاهده میشود.
رویه
پیوند دو حساب باید همیشه از حساب مدیر شروع شود و سپس پیوند باید از حساب مشتری پذیرفته شود. وضعیت پیوند در قسمت status
CustomerClientLink
یا CustomerManagerLink
ذخیره می شود. لیست وضعیت های معتبر را ببینید. از PENDING
برای شروع پیوند و از ACTIVE
برای پذیرش پیوند استفاده کنید.
پیوند دو حساب Google Ads از قبل موجود در سه مرحله قابل انجام است.
- در حین احراز هویت بهعنوان حساب مدیر، با ایجاد یک
CustomerClientLink
با وضعیتPENDING
، دعوتنامهای را برای حساب مشتری گسترش دهید. - هنگام احراز هویت بهعنوان حساب مدیر، از
GoogleAdsService
پرس و جو کنید تاmanager_link_id
ازCustomerClientLink
که ایجاد کردهاید را بیابید. - هنگام احراز هویت به عنوان حساب مشتری، دعوت حساب مدیر را با تغییر دادن
CustomerManagerLink
برای داشتن وضعیتACTIVE
بپذیرید.
مثال
مثال کد زیر نحوه ایجاد پیوند بین یک حساب مدیر و مشتری آن را نشان می دهد:
جاوا
private void runExample(GoogleAdsClient googleAdsClient, long clientCustomerId, long managerId) { // This example assumes that the same credentials will work for both customers, but that may not // be the case. If you need to use different credentials for each customer, then you may either // update the client configuration or instantiate two clients, one for each set of credentials. // Always make sure you use a GoogleAdsClient with the proper credentials to fetch any services // you need to use. // Extend an invitation to the client while authenticating as the manager. googleAdsClient = googleAdsClient.toBuilder().setLoginCustomerId(managerId).build(); CustomerClientLinkOperation.Builder clientLinkOp = CustomerClientLinkOperation.newBuilder(); clientLinkOp .getCreateBuilder() .setStatus(ManagerLinkStatus.PENDING) .setClientCustomer(ResourceNames.customer(clientCustomerId)); String pendingLinkResourceName; try (CustomerClientLinkServiceClient customerClientLinkServiceClient = googleAdsClient.getLatestVersion().createCustomerClientLinkServiceClient()) { MutateCustomerClientLinkResponse response = customerClientLinkServiceClient.mutateCustomerClientLink( String.valueOf(managerId), clientLinkOp.build()); pendingLinkResourceName = response.getResult().getResourceName(); System.out.printf( "Extended an invitation from customer %s to customer %s with client link resource name" + " %s%n", managerId, clientCustomerId, pendingLinkResourceName); } // Find the manager_link_id of the link we just created, so we can construct the resource name // for the link from the client side. String query = "SELECT customer_client_link.manager_link_id FROM customer_client_link WHERE" + " customer_client_link.resource_name = '" + pendingLinkResourceName + "'"; long managerLinkId; try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) { SearchPagedResponse response = googleAdsServiceClient.search(String.valueOf(managerId), query); GoogleAdsRow result = response.iterateAll().iterator().next(); managerLinkId = result.getCustomerClientLink().getManagerLinkId(); } // Accept the link using the client account. CustomerManagerLinkOperation.Builder managerLinkOp = CustomerManagerLinkOperation.newBuilder(); managerLinkOp .getUpdateBuilder() .setResourceName( ResourceNames.customerManagerLink(clientCustomerId, managerId, managerLinkId)) .setStatus(ManagerLinkStatus.ACTIVE); managerLinkOp.setUpdateMask(FieldMasks.allSetFieldsOf(managerLinkOp.getUpdate())); googleAdsClient = googleAdsClient.toBuilder().setLoginCustomerId(clientCustomerId).build(); try (CustomerManagerLinkServiceClient managerLinkServiceClient = googleAdsClient.getLatestVersion().createCustomerManagerLinkServiceClient()) { MutateCustomerManagerLinkResponse response = managerLinkServiceClient.mutateCustomerManagerLink( String.valueOf(clientCustomerId), Arrays.asList(managerLinkOp.build())); System.out.printf( "Client accepted invitation with resource name %s%n", response.getResults(0).getResourceName()); } }
سی شارپ
public void Run(GoogleAdsClient client, long managerCustomerId, long clientCustomerId) { // Remarks: For ease of understanding, this code example assumes that managerCustomerId // and clientCustomerId have the login email (and hence the same credentials work for // both accounts). In real life, this might not be the case, so you'd have a separate // GoogleAdsClient for managerCustomerId and clientCustomerId. try { // Extend an invitation to the client while authenticating as the manager. string customerClientLinkResourceName = CreateInvitation(client, managerCustomerId, clientCustomerId); // Retrieve the manager link information. string managerLinkResourceName = GetManagerLinkResourceName(client, managerCustomerId, clientCustomerId, customerClientLinkResourceName); // Accept the manager's invitation while authenticating as the client. AcceptInvitation(client, clientCustomerId, managerLinkResourceName); } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } } /// <summary> /// Extends an invitation from a manager customer to a client customer. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="managerCustomerId">The manager customer ID.</param> /// <param name="clientCustomerId">The client customer ID.</param> /// <returns>The invitation resource name.</returns> private string CreateInvitation(GoogleAdsClient client, long managerCustomerId, long clientCustomerId) { // Get the CustomerClientLinkService. CustomerClientLinkServiceClient customerClientLinkService = client.GetService(Services.V17.CustomerClientLinkService); // Create a client with the manager customer ID as login customer ID. client.Config.LoginCustomerId = managerCustomerId.ToString(); // Create a customer client link. CustomerClientLink customerClientLink = new CustomerClientLink() { ClientCustomer = ResourceNames.Customer(clientCustomerId), // Sets the client customer to invite. Status = ManagerLinkStatus.Pending }; // Creates a customer client link operation for creating the one above. CustomerClientLinkOperation customerClientLinkOperation = new CustomerClientLinkOperation() { Create = customerClientLink }; // Issue a mutate request to create the customer client link. MutateCustomerClientLinkResponse response = customerClientLinkService.MutateCustomerClientLink( managerCustomerId.ToString(), customerClientLinkOperation); // Prints the result. string customerClientLinkResourceName = response.Result.ResourceName; Console.WriteLine($"An invitation has been extended from the manager " + $"customer {managerCustomerId} to the client customer {clientCustomerId} with " + $"the customer client link resource name '{customerClientLinkResourceName}'."); // Returns the resource name of the created customer client link. return customerClientLinkResourceName; } /// <summary> /// Retrieves the manager link resource name of a customer client link given its resource /// name. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="managerCustomerId">The manager customer ID.</param> /// <param name="clientCustomerId">The client customer ID.</param> /// <param name="customerClientLinkResourceName">The customer client link resource /// name.</param> /// <returns>The manager link resource name.</returns> private string GetManagerLinkResourceName(GoogleAdsClient client, long managerCustomerId, long clientCustomerId, string customerClientLinkResourceName) { // Get the GoogleAdsService. GoogleAdsServiceClient googleAdsService = client.GetService(Services.V17.GoogleAdsService); // Create a client with the manager customer ID as login customer ID. client.Config.LoginCustomerId = managerCustomerId.ToString(); // Creates the query. string query = "SELECT customer_client_link.manager_link_id FROM " + "customer_client_link WHERE customer_client_link.resource_name = " + $"'{customerClientLinkResourceName}'"; // Issue a search request by specifying the page size. GoogleAdsRow result = googleAdsService.Search( managerCustomerId.ToString(), query).First(); // Gets the ID and resource name associated to the manager link found. long managerLinkId = result.CustomerClientLink.ManagerLinkId; string managerLinkResourceName = ResourceNames.CustomerManagerLink( clientCustomerId, managerCustomerId, managerLinkId); // Prints the result. Console.WriteLine($"Retrieved the manager link of the customer client link: its ID " + $"is {managerLinkId} and its resource name is '{managerLinkResourceName}'."); // Returns the resource name of the manager link found. return managerLinkResourceName; } /// <summary> /// Accepts the invitation. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="clientCustomerId">The client customer ID.</param> /// <param name="managerLinkResourceName">The manager link resource name.</param> private void AcceptInvitation(GoogleAdsClient client, long clientCustomerId, string managerLinkResourceName) { // Get the CustomerManagerLinkService. CustomerManagerLinkServiceClient customerManagerLinkService = client.GetService(Services.V17.CustomerManagerLinkService); // Create a client with the client customer ID as login customer ID. client.Config.LoginCustomerId = clientCustomerId.ToString(); // Creates the customer manager link with the updated status. CustomerManagerLink customerManagerLink = new CustomerManagerLink() { ResourceName = managerLinkResourceName, Status = ManagerLinkStatus.Active }; // Creates a customer manager link operation for updating the one above. CustomerManagerLinkOperation customerManagerLinkOperation = new CustomerManagerLinkOperation() { Update = customerManagerLink, UpdateMask = FieldMasks.AllSetFieldsOf(customerManagerLink) }; // Issue a mutate request to update the customer manager link. MutateCustomerManagerLinkResponse response = customerManagerLinkService.MutateCustomerManagerLink( clientCustomerId.ToString(), new[] { customerManagerLinkOperation } ); // Prints the result. Console.WriteLine($"The client {clientCustomerId} accepted the invitation with " + $"the resource name '{response.Results[0].ResourceName}"); }
PHP
public static function runExample(int $managerCustomerId, int $clientCustomerId) { // Extends an invitation to the client while authenticating as the manager. $customerClientLinkResourceName = self::createInvitation( $managerCustomerId, $clientCustomerId ); // Retrieves the manager link information. $managerLinkResourceName = self::getManagerLinkResourceName( $managerCustomerId, $clientCustomerId, $customerClientLinkResourceName ); // Accepts the manager's invitation while authenticating as the client. self::acceptInvitation($clientCustomerId, $managerLinkResourceName); } /** * Extends an invitation from a manager customer to a client customer. * * @param int $managerCustomerId the manager customer ID * @param int $clientCustomerId the customer ID * @return string the resource name of the customer client link created for the invitation */ private static function createInvitation( int $managerCustomerId, int $clientCustomerId ) { // Creates a client with the manager customer ID as login customer ID. $googleAdsClient = self::createGoogleAdsClient($managerCustomerId); // Creates a customer client link. $customerClientLink = new CustomerClientLink([ // Sets the client customer to invite. 'client_customer' => ResourceNames::forCustomer($clientCustomerId), 'status' => ManagerLinkStatus::PENDING ]); // Creates a customer client link operation for creating the one above. $customerClientLinkOperation = new CustomerClientLinkOperation(); $customerClientLinkOperation->setCreate($customerClientLink); // Issues a mutate request to create the customer client link. $customerClientLinkServiceClient = $googleAdsClient->getCustomerClientLinkServiceClient(); $response = $customerClientLinkServiceClient->mutateCustomerClientLink( MutateCustomerClientLinkRequest::build( $managerCustomerId, $customerClientLinkOperation ) ); // Prints the result. $customerClientLinkResourceName = $response->getResult()->getResourceName(); printf( "An invitation has been extended from the manager customer %d" . " to the client customer %d with the customer client link resource name '%s'.%s", $managerCustomerId, $clientCustomerId, $customerClientLinkResourceName, PHP_EOL ); // Returns the resource name of the created customer client link. return $customerClientLinkResourceName; } /** * Retrieves the manager link resource name of a customer client link given its resource name. * * @param int $managerCustomerId the manager customer ID * @param int $clientCustomerId the customer ID * @param string $customerClientLinkResourceName the customer client link resource name * @return string the manager link resource name */ private static function getManagerLinkResourceName( int $managerCustomerId, int $clientCustomerId, string $customerClientLinkResourceName ) { // Creates a client with the manager customer ID as login customer ID. $googleAdsClient = self::createGoogleAdsClient($managerCustomerId); // Creates the query. $query = "SELECT customer_client_link.manager_link_id FROM customer_client_link" . " WHERE customer_client_link.resource_name = '$customerClientLinkResourceName'"; // Issues a search request. $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); $response = $googleAdsServiceClient->search( SearchGoogleAdsRequest::build($managerCustomerId, $query) ); // Gets the ID and resource name associated to the manager link found. $managerLinkId = $response->getIterator()->current() ->getCustomerClientLink() ->getManagerLinkId(); $managerLinkResourceName = ResourceNames::forCustomerManagerLink( $clientCustomerId, $managerCustomerId, $managerLinkId ); // Prints the result. printf( "Retrieved the manager link of the customer client link:" . " its ID is %d and its resource name is '%s'.%s", $managerLinkId, $managerLinkResourceName, PHP_EOL ); // Returns the resource name of the manager link found. return $managerLinkResourceName; } /** * Accepts an invitation. * * @param int $clientCustomerId the customer ID * @param string $managerLinkResourceName the resource name of the manager link to accept */ private static function acceptInvitation( int $clientCustomerId, string $managerLinkResourceName ) { // Creates a client with the client customer ID as login customer ID. $googleAdsClient = self::createGoogleAdsClient($clientCustomerId); // Creates the customer manager link with the updated status. $customerManagerLink = new CustomerManagerLink(); $customerManagerLink->setResourceName($managerLinkResourceName); $customerManagerLink->setStatus(ManagerLinkStatus::ACTIVE); // Creates a customer manager link operation for updating the one above. $customerManagerLinkOperation = new CustomerManagerLinkOperation(); $customerManagerLinkOperation->setUpdate($customerManagerLink); $customerManagerLinkOperation->setUpdateMask( FieldMasks::allSetFieldsOf($customerManagerLink) ); // Issues a mutate request to update the customer manager link. $customerManagerLinkServiceClient = $googleAdsClient->getCustomerManagerLinkServiceClient(); $response = $customerManagerLinkServiceClient->mutateCustomerManagerLink( MutateCustomerManagerLinkRequest::build( $clientCustomerId, [$customerManagerLinkOperation] ) ); // Prints the result. printf( "The client %d accepted the invitation with the resource name '%s'.%s", $clientCustomerId, $response->getResults()[0]->getResourceName(), PHP_EOL ); }
پایتون
def main(client, customer_id, manager_customer_id): # This example assumes that the same credentials will work for both # customers, but that may not be the case. If you need to use different # credentials for each customer, then you may either update the client # configuration or instantiate two clients, where at least one points to # a specific configuration file so that both clients don't read the same # file located in the $HOME dir. customer_client_link_service = client.get_service( "CustomerClientLinkService" ) # Extend an invitation to the client while authenticating as the manager. client_link_operation = client.get_type("CustomerClientLinkOperation") client_link = client_link_operation.create client_link.client_customer = customer_client_link_service.customer_path( customer_id ) client_link.status = client.enums.ManagerLinkStatusEnum.PENDING response = customer_client_link_service.mutate_customer_client_link( customer_id=manager_customer_id, operation=client_link_operation ) resource_name = response.results[0].resource_name print( f'Extended an invitation from customer "{manager_customer_id}" to ' f'customer "{customer_id}" with client link resource_name ' f'"{resource_name}"' ) # Find the manager_link_id of the link we just created, so we can construct # the resource name for the link from the client side. Note that since we # are filtering by resource_name, a unique identifier, only one # customer_client_link resource will be returned in the response query = f''' SELECT customer_client_link.manager_link_id FROM customer_client_link WHERE customer_client_link.resource_name = "{resource_name}"''' ga_service = client.get_service("GoogleAdsService") try: response = ga_service.search( customer_id=manager_customer_id, query=query ) # Since the googleads_service.search method returns an iterator we need # to initialize an iteration in order to retrieve results, even though # we know the query will only return a single row. for row in response.result: manager_link_id = row.customer_client_link.manager_link_id except GoogleAdsException as ex: handle_googleads_exception(ex) customer_manager_link_service = client.get_service( "CustomerManagerLinkService" ) manager_link_operation = client.get_type("CustomerManagerLinkOperation") manager_link = manager_link_operation.update manager_link.resource_name = ( customer_manager_link_service.customer_manager_link_path( customer_id, manager_customer_id, manager_link_id, ) ) manager_link.status = client.enums.ManagerLinkStatusEnum.ACTIVE client.copy_from( manager_link_operation.update_mask, protobuf_helpers.field_mask(None, manager_link._pb), ) response = customer_manager_link_service.mutate_customer_manager_link( customer_id=customer_id, operations=[manager_link_operation] ) print( "Client accepted invitation with resource_name: " f'"{response.results[0].resource_name}"' )
روبی
def link_manager_to_client(manager_customer_id, client_customer_id) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new # This example assumes that the same credentials will work for both customers, # but that may not be the case. If you need to use different credentials # for each customer, then you may either update the client configuration or # instantiate two clients, one for each set of credentials. Always make sure # to update the configuration before fetching any services you need to use. # Extend an invitation to the client while authenticating as the manager. client.configure do |config| config.login_customer_id = manager_customer_id.to_i end client_link = client.resource.customer_client_link do |link| link.client_customer = client.path.customer(client_customer_id) link.status = :PENDING end client_link_operation = client.operation.create_resource.customer_client_link(client_link) response = client.service.customer_client_link.mutate_customer_client_link( customer_id: manager_customer_id, operation: client_link_operation, ) client_link_resource_name = response.result.resource_name puts "Extended an invitation from customer #{manager_customer_id} to " \ "customer #{client_customer_id} with client link resource name " \ "#{client_link_resource_name}." # Find the manager_link_id of the link we just created, so we can construct # the resource name for the link from the client side. query = <<~QUERY SELECT customer_client_link.manager_link_id FROM customer_client_link WHERE customer_client_link.resource_name = '#{client_link_resource_name}' QUERY response = client.service.google_ads.search(customer_id: manager_customer_id, query: query) manager_link_id = response.first.customer_client_link.manager_link_id # Accept the link using the client account. client.configure do |config| config.login_customer_id = client_customer_id.to_i end manager_link_resource_name = client.path.customer_manager_link( client_customer_id, manager_customer_id, manager_link_id, ) manager_link_operation = client.operation.update_resource.customer_manager_link(manager_link_resource_name) do |link| link.status = :ACTIVE end response = client.service.customer_manager_link.mutate_customer_manager_link( customer_id: client_customer_id, operations: [manager_link_operation], ) puts "Client accepted invitation with resource name " \ "#{response.results.first.resource_name}." end
پرل
sub link_manager_to_client { my ($api_client, $manager_customer_id, $api_client_customer_id) = @_; # Step 1: Extend an invitation to the client customer while authenticating # as the manager. $api_client->set_login_customer_id($manager_customer_id); # Create a customer client link. my $api_client_link = Google::Ads::GoogleAds::V17::Resources::CustomerClientLink->new({ clientCustomer => Google::Ads::GoogleAds::V17::Utils::ResourceNames::customer( $api_client_customer_id), status => PENDING }); # Create a customer client link operation. my $api_client_link_operation = Google::Ads::GoogleAds::V17::Services::CustomerClientLinkService::CustomerClientLinkOperation ->new({ create => $api_client_link }); # Add the customer client link to extend an invitation to the client customer. my $api_client_link_response = $api_client->CustomerClientLinkService()->mutate({ customerId => $manager_customer_id, operation => $api_client_link_operation }); my $api_client_link_resource_name = $api_client_link_response->{result}{resourceName}; printf "Extended an invitation from the manager customer %d to the " . "client customer %d with the customer client link resource name: '%s'.\n", $manager_customer_id, $api_client_customer_id, $api_client_link_resource_name; # Step 2: Get the 'manager_link_id' of the client link we just created, # to construct the resource name of the manager link from the client side. my $search_query = "SELECT customer_client_link.manager_link_id FROM customer_client_link " . "WHERE customer_client_link.resource_name = '$api_client_link_resource_name'"; my $search_response = $api_client->GoogleAdsService()->search({ customerId => $manager_customer_id, query => $search_query }); my $manager_link_id = $search_response->{results}[0]{customerClientLink}{managerLinkId}; my $manager_link_resource_name = Google::Ads::GoogleAds::V17::Utils::ResourceNames::customer_manager_link( $api_client_customer_id, $manager_customer_id, $manager_link_id); # Step 3: Accept the manager customer's link invitation while authenticating # as the client. $api_client->set_login_customer_id($api_client_customer_id); # Create a customer manager link. my $manager_link = Google::Ads::GoogleAds::V17::Resources::CustomerManagerLink->new({ resourceName => $manager_link_resource_name, status => ACTIVE }); # Create a customer manager link operation. my $manager_link_operation = Google::Ads::GoogleAds::V17::Services::CustomerManagerLinkService::CustomerManagerLinkOperation ->new({ update => $manager_link, updateMask => all_set_fields_of($manager_link)}); # Update the customer manager link to accept the invitation. my $manager_link_response = $api_client->CustomerManagerLinkService()->mutate({ customerId => $api_client_customer_id, operations => [$manager_link_operation]}); printf "The client customer %d accepted the invitation with " . "the customer manager link resource name: '%s'.\n", $api_client_customer_id, $manager_link_response->{results}[0]{resourceName}; return 1; }