২০শে আগস্ট সকাল ১০:০০ টায় (EST)
ডিসকর্ডে গুগল অ্যাডভার্টাইজিং অ্যান্ড মেজারমেন্ট কমিউনিটি সার্ভারে এবং
ইউটিউবে আমাদের সাথে লাইভে যোগ দিন! আমরা গুগল অ্যাডস এপিআই-এর v25.1-এ যুক্ত হওয়া নতুন ফিচারগুলো নিয়ে আলোচনা করব।
ক্লায়েন্ট লিঙ্ক ম্যানেজার
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
জাভা
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.ads.googleads.examples.accountmanagement ;
import com.beust.jcommander.Parameter ;
import com.google.ads.googleads.examples.utils.ArgumentNames ;
import com.google.ads.googleads.examples.utils.CodeSampleParams ;
import com.google.ads.googleads.lib.GoogleAdsClient ;
import com.google.ads.googleads.lib.utils.FieldMasks ;
import com.google.ads.googleads.v25.enums.ManagerLinkStatusEnum.ManagerLinkStatus ;
import com.google.ads.googleads.v25.errors.GoogleAdsError ;
import com.google.ads.googleads.v25.errors.GoogleAdsException ;
import com.google.ads.googleads.v25.services.CustomerClientLinkOperation ;
import com.google.ads.googleads.v25.services.CustomerClientLinkServiceClient ;
import com.google.ads.googleads.v25.services.CustomerManagerLinkOperation ;
import com.google.ads.googleads.v25.services.CustomerManagerLinkServiceClient ;
import com.google.ads.googleads.v25.services.GoogleAdsRow ;
import com.google.ads.googleads.v25.services.GoogleAdsServiceClient ;
import com.google.ads.googleads.v25.services.GoogleAdsServiceClient.SearchPagedResponse ;
import com.google.ads.googleads.v25.services.MutateCustomerClientLinkResponse ;
import com.google.ads.googleads.v25.services.MutateCustomerManagerLinkResponse ;
import com.google.ads.googleads.v25.utils.ResourceNames ;
import java.io.FileNotFoundException ;
import java.io.IOException ;
import java.util.Arrays ;
/**
* Demonstrates how to link an existing Google Ads manager customer to an existing Google Ads client
* customer.
*/
public class LinkManagerToClient {
private static class LinkManagerToClientParams extends CodeSampleParams {
@Parameter ( names = ArgumentNames . CUSTOMER_ID , required = true )
private long customerId ;
@Parameter ( names = ArgumentNames . MANAGER_ID , required = true )
private long managerId ;
}
public static void main ( String [] args ) throws IOException {
LinkManagerToClientParams params = new LinkManagerToClientParams ();
if ( ! params . parseArguments ( args )) {
// Either pass the required parameters for this example on the command line, or insert them
// into the code here. See the parameter class definition above for descriptions.
params . customerId = Long . parseLong ( "INSERT_CUSTOMER_ID_HERE" );
params . managerId = Long . parseLong ( "INSERT_MANAGER_ID_HERE" );
}
GoogleAdsClient googleAdsClient = null ;
try {
googleAdsClient = GoogleAdsClient . newBuilder (). fromPropertiesFile (). build ();
} catch ( FileNotFoundException fnfe ) {
System . err . printf (
"Failed to load GoogleAdsClient configuration from file. Exception: %s%n" , fnfe );
System . exit ( 1 );
} catch ( IOException ioe ) {
System . err . printf ( "Failed to create GoogleAdsClient. Exception: %s%n" , ioe );
System . exit ( 1 );
}
try {
new LinkManagerToClient (). runExample ( googleAdsClient , params . customerId , params . managerId );
} catch ( GoogleAdsException gae ) {
// GoogleAdsException is the base class for most exceptions thrown by an API request.
// Instances of this exception have a message and a GoogleAdsFailure that contains a
// collection of GoogleAdsErrors that indicate the underlying causes of the
// GoogleAdsException.
System . err . printf (
"Request ID %s failed due to GoogleAdsException. Underlying errors:%n" ,
gae . getRequestId ());
int i = 0 ;
for ( GoogleAdsError googleAdsError : gae . getGoogleAdsFailure (). getErrorsList ()) {
System . err . printf ( " Error %d: %s%n" , i ++ , googleAdsError );
}
System . exit ( 1 );
}
}
/** Runs the example. */
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 ;Client accepted invitation with resource name %s%n",
response . getResults ( 0 ). getResourceName ());
}
}
}
LinkManagerToClient . java
সি#
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using CommandLine ;
using Google.Ads.Gax.Examples ;
using Google.Ads.Gax.Util ;
using Google.Ads.GoogleAds.Lib ;
using Google.Ads.GoogleAds.V25.Errors ;
using Google.Ads.GoogleAds.V25.Resources ;
using Google.Ads.GoogleAds.V25.Services ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using static Google . Ads . GoogleAds . V25 . Enums . ManagerLinkStatusEnum . Types ;
namespace Google.Ads.GoogleAds.Exa<mples.V>25
{
/// summary
/// This code example demonstrates how to link an existing Google Ads manager customer
/// account to an existing Google Ads client custom<er accou>nt.
/// /summary
public class LinkManagerToClient : ExampleBas<e
{ >
/// summary
/// Command line opti<ons for running the see cref=&q>uot;LinkManagerToClien<t"/> example.
/// /summary
public class Options : OptionsB<ase
> {
/// summary
/// ID of the client customer <being li>nked.
/// /summary
[Option("clientCustomerId", Required = true, HelpText =
"ID of the client customer being linked.")]
public lon<g Clien>tCustomerId { get ; set ; }
/// summary
/// ID of the manager <customer> that is being linked to.
/// /summary
[Option("managerCustomerId", Required = true, HelpText =
"ID of the manager customer that is being linked to.")]
< publ>ic long ManagerCustomerId { get ; set ; }
}
/// summary
/// Main meth<od, to r>un this code <example as a stan>dalone application.
< /// />summary
/// param name="args"The command line arguments./param
public static void Main ( string [] < args )
> {
Options options = ExampleUtilities . ParseCommandLineOptions ( args );
LinkManagerToClient codeExample = new LinkManagerToClient ();
Console . WriteLine ( codeExample . Description );
codeExample . Run ( new GoogleAdsClient (),
options . Clien<tCustom>erId ,
options . ManagerCustomerId );
}
//</ summar>y
/// Returns a description about the> code example.
/// /summary
public override string Description =
"This code example demonstrates how to link an existing Google Ads manager customer " < +
> "account to an existing Google Ads <client c>ustomer accou<nt." ;
> /// summary
/<// Run>s the code ex<ample.
/// /summary
> /// param name="client"<;The G>oogle Ads cli<ent./param
/// param n>ame="clientCustomerId"ID of the client customer being <linked>./param
/// param name="managerCustomerId"ID of the manager customer that is being linked to.
/// /param
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 . Wri<teLine ( >$"Failure: {e.Failure}" );
Console . WriteLine ( $"Request ID: {e.R<equestId>}" );
< throw ; >
}
< }
> /// sum<mary
/// Extends an in>vitation from a manager <custom>er to a clien<t customer.
/// /summ>ary
/// param n<ame=&q>uot;client&qu<ot;The >Google Ads client./param
< /// >param name="managerCustomerId"The manager customer ID./param
/// param name="clientCustomerId"The client customer ID./param
/// returnsThe invitation resource name./returns
private string CreateInvitation ( GoogleAdsClient client , long managerCustomerId ,
long clientCustomerId )
{
// Get the CustomerClientLinkService.
CustomerClientLinkServiceClient customerClientLinkService =
client . GetService ( Services . V25 . 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 " +
$&quo<t;the c>ustomer client link resource name '{customerClientLinkResourceName}'." );
// Returns the resource name o<f the cr>eated custome<r client link.
> return custome<rClien>tLinkResource<Name ;
}
/// s>ummary
/// Retri<eves t>he manager li<nk resource name of a custome>r client link given its< resou>rce
/<// name.
/// /summary
/// p>aram name="client"The Google Ads client./<param<>/span>
/// p<aram na>me="managerCustomerId"<;The man>ager customer ID./param
/// param name="clientCustomerId"The client customer ID./param
/// param name="customerClientLinkResourceName"The customer client link resource
/// name./param
/// returnsThe manager link resource name./returns
private string GetManagerLinkResourceName ( GoogleAdsClient client , long managerCustomerId ,
long clientCustomerId , string customerClientLinkResourceName )
{
// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService =
client . GetService ( Services . V25 . 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 l<ink of t>he customer c<lient link: its ID >" +
< $&q>uot;is {manag<erLinkId} and its resource na>me is '{managerLink<Resour>ceName}'.<" );
// Returns the >resource name of the manager li<nk fou>nd.
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 . V25 . 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 =
inkService . MutateCustomerManagerLink (
clientCustomerId . ToString (), new [] { customerManagerLinkOperation }
);
// Prints the result.
Console . WriteLine ( $"The client {clientCustomerId} accepted the invitation with " +
$"the resource name '{response.Results[0].ResourceName}" );
}
}
}
LinkManagerToClient . cs
পিএইচপি
<?php
/**
* Copyright 2019 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace Google\Ads\GoogleAds\Examples\AccountManagement;
require __DIR__ . '/../../vendor/autoload.php';
use GetOpt\GetOpt;
use Google\Ads\GoogleAds\Examples\Utils\ArgumentNames;
use Google\Ads\GoogleAds\Examples\Utils\ArgumentParser;
use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder;
use Google\Ads\GoogleAds\Lib\V25\GoogleAdsClient;
use Google\Ads\GoogleAds\Lib\V25\GoogleAdsClientBuilder;
use Google\Ads\GoogleAds\Lib\V25\GoogleAdsException;
use Google\Ads\GoogleAds\Util\FieldMasks;
use Google\Ads\GoogleAds\Util\V25\ResourceNames;
use Google\Ads\GoogleAds\V25\Enums\ManagerLinkStatusEnum\ManagerLinkStatus;
use Google\Ads\GoogleAds\V25\Errors\GoogleAdsError;
use Google\Ads\GoogleAds\V25\Resources\CustomerClientLink;
use Google\Ads\GoogleAds\V25\Resources\CustomerManagerLink;
use Google\Ads\GoogleAds\V25\Services\CustomerClientLinkOperation;
use Google\Ads\GoogleAds\V25\Services\CustomerManagerLinkOperation;
use Google\Ads\GoogleAds\V25\Services\MutateCustomerClientLinkRequest;
use Google\Ads\GoogleAds\V25\Services\MutateCustomerManagerLinkRequest;
use Google\Ads\GoogleAds\V25\Services\SearchGoogleAdsRequest;
use Google\ApiCore\ApiException;
/**
* This example demonstrates how to link an existing Google Ads manager customer
* account to an existing Google Ads client customer account.
*/
class LinkManagerToClient
{
private const MANAGER_CUSTOMER_ID = 'INSERT_MANAGER_CUSTOMER_ID_HERE';
private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE';
public static function main()
{
// Either pass the required parameters for this example on the command line, or insert them
// into the constants above>.
$options = (new ArgumentParser())-parseCommandArguments([
> ArgumentNames::MANAGER_CUSTOMER_ID = GetOpt::REQUIRED_ARGUME>NT,
ArgumentNames::CUSTOMER_ID = GetOpt::REQUIRED_ARGUMENT
]);
try {
self::runExample(
$options[ArgumentNames::MANAGER_CUSTOMER_ID] ?: self::MANAGER_CUSTOMER_ID,
$options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID
);
} catch (GoogleAdsException $googleAdsException) {
printf(
"Request with ID '%s' has failed.%sGoogle Ads >failure details:%s",
$googleAdsException-getRequestId(),
PHP_EOL,
PH>P_EOL
);
> foreach ($googleAdsException-getGoogleAdsFailure()-getErrors() as $error) {
/** @var GoogleAdsError $error */
printf( >
> "\t%s: %s%s",
> $error-getErrorCode()-getErrorCode(),
$error-getMessage(),
PHP_EOL
);
}
exit(1);
} catch (ApiException $apiException) {
printf(
">ApiException was thrown with message '%s'.%s",
$apiException-getMessage(),
PHP_EOL
);
exit(1);
}
}
/**
* Runs the example.
*
* 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 the clients accordingly, one for each set of credentials. Always make
* sure to update the configuration before fetching any services you need to use.
*
* @param int $managerCustomerId the manager customer ID
* @param int $clientCustomerId the customer ID
*/
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 CustomerC>lientLink([
// 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 m>utate request to create the customer client link.
$customerClientLinkServiceClient >= $googleAdsClient-getCustomerClientLinkServiceClient();
$response = $customerClientLinkServiceClient-mutateCustomerClientLink(
MutateCustomerClientLinkRequest::build(
$managerCustomerId,
$customerClientLinkOperatio>n
> )
);
// 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'&qu>ot;;
// Issues a search request.
$googleAdsServiceClient = $googleAdsClient-getGoogleAdsServiceClient();
$response = $googleAdsServiceClient-search(
SearchGoogleAdsReq>uest::build($m>anagerCustomerId, $quer>y)
);
// 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::create>GoogleAdsClient($clientCustomerId);
// Creates the customer man>ager link with the updated status.
$customerManagerLink = new CustomerManagerLink();
$customerManagerLink-setResourceName($managerLinkResourceName);
$customerManagerLink-setStatus(ManagerLinkStatus::ACTIVE);
> // Creates a customer manager link operation for updating the on>e 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
);
}
/**
* Creates a Google Ads client based on the default configuration file
* and a given login customer id.
*
* @param int $loginCustomerId the login customer ID
* @return GoogleAdsClient the created client
*/
private static function createGoogleAdsClient(int $loginCustomerId)
{
> // Generates a re>freshable OAuth2 credential for authentication.
$oAuth2Credential = (new OAuth2TokenBuilder())
// Sets the properties based on the default properties file
-fromF>ile()
-build();
// Builds and returns the Google Ads client
> return (new GoogleAdsClientBuilder())
// Sets the properties based on the default properties file
> -fromFile()
// Uses the OAuth2> credentials created above.
-withOAredential)
// Overrides the login customer ID with the given one.
-withLoginCustomerId($loginCustomerId)
-build();
}
}
LinkManagerToClient::main();
LinkManagerToClient.php
পাইথন
#!/usr/bin/env python
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This example shows how to link a manager customer to a client customer."""
import argparse
import sys
from google.api_core import protobuf_helpers
from google.protobuf.field_mask_pb2 import FieldMask
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
from google.ads.googleads.v24.services.services.customer_client_link_service.client import (
CustomerClientLinkServiceClient ,
)
from google.ads.googleads.v24.services.types.customer_client_link_service import (
CustomerClientLinkOperation ,
MutateCustomerClientLinkResponse ,
)
from google.ads.googleads.v24.resources.types.customer_client_link import (
CustomerClientLink ,
)
from google.ads.googleads.v24.services.services.google_ads_service.client import (
GoogleAdsServiceClient ,
)
from google.ads.googleads.v24.services.types.google_ads_service import (
SearchPagedResponse ,
GoogleAdsRow ,
)
from google.ads.googleads.v24.services.services.customer_manager_link_service.client import (
CustomerManagerLinkServiceClient ,
)
from google.ads.googleads.v24.services.types.customer_manager_link_service import (
CustomerManagerLinkOperation ,
MutateCustomerManagerLinkResponse ,
)
from google.ads.googleads.v24.resources.types.customer_manager_link import (
CustomerManagerLink ,
)
# ManagerLinkStatusEnum is used via client.enums
def main (
client : GoogleAdsClie>nt , customer_id : str , manager_customer_id : str
) - None :
# 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 : CustomerClientLinkServiceClient = (
client . get_service ( "CustomerClientLinkService" )
)
# Extend an invitation to the client while authenticating as the manager.
client_link_operation : CustomerClientLinkOperation = client . get_type (
"CustomerClientLinkOperation"
)
client_link : CustomerClientLink = client_link_operation . create
client_link . client_customer = customer_client_link_service . customer_path (
customer_id
)
# client_link.status expects an enum value (int)
client_link . status = client . enums . ManagerLinkStatusEnum . PENDING . value
response : MutateCustomerClientLinkResponse = (
customer_client_link_service . mutate_customer_client_link (
customer_id = manager_customer_id , operation = client_link_operation
)
)
resource_name : str = 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 : GoogleAdsServiceClient = client . get_service ( "GoogleAdsService" )
manager_link_id : int = - 1 # Initialize with a default value
try :
search_response : SearchPagedResponse = 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.
row : GoogleAdsRow
for row in search_response : # Assuming direct iteration
manager_link_id = row . customer_client_link . manager_link_id
except GoogleAdsException as ex :
# handle_googleads_exception(ex) # This function is not defined here
print ( f "GoogleAdsException: { ex } " ) # Basic error handling
sys . exit ( 1 )
customer_manager_link_service : CustomerManagerLinkServiceClient = (
client . get_service ( "CustomerManagerLinkService" )
)
manager_link_operation : CustomerManagerLinkOperation = client . get_type (
"CustomerManagerLinkOperation"
)
manager_link : CustomerManagerLink = manager_link_operation . update
manager_link . resource_name = (
customer_manager_link_service . customer_manager_link_path (
customer_id ,
manager_customer_id ,
manager_link_id , # type: ignore
)
)
# manager_link.status expects an enum value (int)
manager_link . status = client . enums . ManagerLinkStatusEnum . ACTIVE . value
# manager_link_operation.update_mask is a FieldMask
update_mask : FieldMask = protobuf_helpers . field_mask ( None , manager_link . _pb )
client . copy_from (
manager_link_operation . update_mask ,
update_mask ,
)
mutate_manager_link_response : MutateCustomerManagerLinkResponse = (
customer_manager_link_service . mutate_customer_manager_link (
customer_id = customer_id , operations = [ manager_link_operation ]
)
)
print (
"Client accepted invitation with resource_name: "
f '" { mutate_manager_link_response . results [ 0 ] . resource_name } "'
)
if __name__ == "__main__" :
parser = argparse . ArgumentParser (
description = (
"Links an existing manager customer to an existing"
"client customer"
)
)
# The following argument(s) should be provided to run the example.
parser . add_argument (
"-c" , "--customer_id" , type = str , required = True , help = "The customer ID."
)
parser . add_argument (
"-m" ,
"--manager_customer_id" ,
type = str ,
required = True ,
help = "The manager customer ID." ,
)
args = parser . parse_args ()
# GoogleAdsClient will read the google-ads.yaml configuration file in the
# home directory if none is specified.
googleads_client = GoogleAdsClient . load_from_storage ( version = "v24" )
try :
main ( googleads_client , args . customer_id , args . manager_customer_id )
except GoogleAdsException as ex :
print (
f 'Request with ID " { ex . request_id } " failed with status '
f '" { ex . error . code () . nam following errors:'
)
for error in ex . failure . errors :
print ( f ' \t Error with message " { error . message } ".' )
if error . location :
for field_path_element in error . location . field_path_elements :
print ( f " \t\t On field: { field_path_element . field_name } " )
sys . exit ( 1 )
link_manager_to_client . py
রুবি
#!/usr/bin/env ruby
# Encoding: utf-8
#
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This example demonstrates how to link an existing Google Ads manager customer
# to an existing Google Ads client customer.
require 'optparse'
require 'google/ads/google_ads'
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 con<<struct
# 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
if __FILE__ == $0
options = {}
# The following parameter(s) should be provided to run the example. You can
# either specify these by changing the INSERT_XXX_ID_HERE values below, or on
# the command line.
#
# Parameters passed on the command line will override any parameters set in
# code.
#
# Running the example with -h will print the command line usage.
options [ :manager_customer_id ] = 'INSERT_MANAGER_CUSTOMER_ID_HERE'
options [ :customer_id ] = 'INSERT_CUSTOMER_ID_HERE'
OptionParser . new do | opts |
opts . banner = sprintf ( 'Usage: %s [options]' , File . basename ( __FILE__ ))
opts . separator ''
opts . separator 'Options:'
opts . on ( '-C' , '--customer-id CUSTOMER-ID' , String , 'Customer ID' ) do | v |
options [ :customer_id ] = v
end
opts . on ( '-M' , '--manager-customer-id MANAGER-CUSTOMER-ID' , String ,
'Manager Customer ID' ) do | v |
options [ :manager_customer_id ] = v
end
opts . separator ''
opts . separator 'Help:'
opts . on_tail ( '-h' , '--help' , 'Show this message' ) do
puts opts
> exit
end
end . parse!
begin
link_manager_to_client (
options . fetch ( :manager_customer_id ) . tr ( "-" , "" ),
options . fetch ( :customer_id ) . tr ( "-" , "" ),
)
rescue Google :: Ads :: GoogleAds :: Errors :: GoogleAdsError = e
e . failure . errors . each do | error |
STDERR . printf ( "Error with message: %s \n " , error . message )
if error . location
error . location . field_path_elements . each do | field_paERR . printf ( " \t On field: %s \n " , field_path_element . field_name )
end
end
error . error_code . to_h . each do | k , v |
next if v == :UNSPECIFIED
STDERR . printf ( " \t Type: %s \n\t Code: %s \n " , k , v )
end
end
raise
end
end
link_manager_to_client . rb
পার্ল
#!/usr/bin/perl -w
#
# Copyright 2019, Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This example demonstrates how to link an existing Google Ads manager customer
# account to an existing Google Ads client customer account.
use strict ;
use warnings ;
use utf8 ;
use FindBin qw($Bin) ;
use lib "$Bin/../../lib" ;
use Google::Ads::GoogleAds::Client ;
use Google::Ads::GoogleAds::Utils::GoogleAdsHelper ;
use Google::Ads::GoogleAds::Utils::FieldMasks ;
use Google::Ads::GoogleAds::V25::Resources::CustomerClientLink ;
use Google::Ads::GoogleAds::V25::Resources::CustomerManagerLink ;
use Google::Ads::GoogleAds::V25::Enums::ManagerLinkStatusEnum
qw(PENDING ACTIVE) ;
use
Google::Ads::GoogleAds::V25::Services::CustomerClientLinkService::CustomerClientLinkOperation ;
use
Google::Ads::GoogleAds::V25::Services::CustomerManagerLinkService::CustomerManagerLinkOperation ;
use Google::Ads::GoogleAds::V25::Utils::ResourceNames ;
use Getopt::Long qw(:config auto_help) ;
use Pod::Usage ;
use Cwd qw(abs_path) ;
# The following parameter(s) should be provided to run the example. You can
# either specify these by changing the INSERT_XXX_ID_HERE values below, or on
# the command line.
#
# Parameters passed on the command line will override any parameters set in
# code.
#
# Running the example with -h will print the command line usage.
my $manager_customer_id = "INSERT_MANAGER_CUSTOMER_ID_HERE" ;
my $customer_id = "INSERT_CUSTOMER_ID_HERE" ;
# 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.
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::A>ds::GoogleAds::V25::Resource>s:: CustomerClientLink - new ({
clientCustomer =
Google::Ads::GoogleAds::V25::Utils::ResourceNames:: customer >(
$api_client_customer_id ),
status = PENDING
});
# Create a customer client link operation.
my $api_client_link_operation =
Google::Ads::GoogleAds::V25::Services::CustomerCl>ientLinkService:: Cus>tomerClientLinkOperation
- new ({
create = $api_client_link
});
# Add the customer client link to extend an invitation to the client customer. >
my $api_client_link_respo>nse =
$api_client - Custo>merClientLinkService () - mutate ({
cus>tomerId = $manager_customer_id ,
operation = $api_client_link_operation
});
my $api_client_l>ink_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.resour>ce_name = '$api_clien>t_link_resource_name'" ;
my >$search_response = $api_client - GoogleAdsService () - search ({
cust>omerId = $manager_customer_id ,
query = $search_query
});
my $manager_link_id =
$search_response - { results }[ 0 ]{ customerClientLink }{ managerLinkId };
my $manager_link_resource_name =
Google::Ads::GoogleAds::V25::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::Googl>eAds::V25::Resources:: CustomerManagerLink - new ({
resourceName = $manager_link_resource_name ,
status = ACTIVE
});
# Create a customer manager link operation.
my $manager_link>_operation =
Google:>:Ads::GoogleAds::V25::Services::Cu>stomerManagerLinkService:: CustomerManagerLinkOperation
- new ({
update = $manager_link ,
updateMask = all_set_fields_of ( $manager_l>ink )});
# Update the custo>mer 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 invitatio>n with " .
"the customer manager link resource name: '%s'.\n" ,
$api_client_customer_id ,
$manager_link_response - { results }[ 0 ]{ resourceName };
return 1 ;
}
# Don't run the example if the file is being included.
if ( abs_path ( $0 ) ne abs_path ( __FIL>E__ )) {
return 1 ;
}
# Get Google Ads Client, credentials will be read from ~/googlea>ds.properties.
my $api_client = Google::Ads::GoogleAds:: Client - new ();
# By default examples are set to die on any server returned fault.
$api_c>lient - set_die_on_faults ( 1 );
# Parameters passed on> the command line will override any parameters set in code.
GetOptions (
"manager_customer_id=s" = \ $manager_customer_id ,
"customer_id=s" = \ $customer_id
);
# Print the help message if the parameters are not initialized in the code nor
# in the command line.
pod2usage ( 2 ) if not check_params ( $manager_customer_id , $customer_id );
# Call the example.
link_manager_to_client (
$api_client ,
$manager_customer_id =~ s/-//g r ,
$customer_id =~ s/-//g r
);
=pod
=head1 NAME
link_manager_to_client
=head1 DESCRIPTION
This example demonstrates how to link an existing Google Ads manager customer
account to an existing Google Ads client customer account.
=head1 SYNOPSIS
link_manager_to_client.pl [options]
-help p message.
-manager_customer_id The Google Ads manager customer ID.
-customer_id The Google Ads customer ID.
=cut
link_manager_to_client . pl
কার্ল দ্রষ্টব্য: যদিও এই ধাপের জন্য সরাসরি কোনো REST কোড নমুনা এখানে দেওয়া হয়নি, আপনি একটি ম্যানুয়াল REST অনুরোধ ব্যবহার করে এটি করতে পারেন। Google Ads API REST ইন্টারফেস ডকুমেন্টেশন এবং মেথড-নির্দিষ্ট রেফারেন্স পেজগুলো দেখুন। আপনাকে প্রোটো ডেফিনিশনগুলোর উপর ভিত্তি করে JSON পেলোড তৈরি করতে হবে। মূল সম্পদসমূহ:
অন্য কিছু উল্লেখ না করা থাকলে, এই পৃষ্ঠার কন্টেন্ট Creative Commons Attribution 4.0 License -এর অধীনে এবং কোডের নমুনাগুলি Apache 2.0 License -এর অধীনে লাইসেন্স প্রাপ্ত। আরও জানতে, Google Developers সাইট নীতি দেখুন। Java হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2026-08-31 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2026-08-31 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[]]