Google Ads অ্যাক্সেস মডেল সম্পর্কে জানুন

Google Ads অ্যাকাউন্ট দুই ধরনের হয়: Google Ads ম্যানেজার অ্যাকাউন্ট এবং Google Ads বিজ্ঞাপনদাতার অ্যাকাউন্ট। এইসব শর্তাবলী এবং অন্যান্য (যেমন ক্লায়েন্ট অ্যাকাউন্ট এবং গ্রাহক) কীভাবে সম্পর্কিত তার বিস্তারিত ব্যাখ্যার জন্য, অ্যাকাউন্টের ধরন দেখুন।

ম্যানেজার অ্যাকাউন্ট অন্যান্য Google Ads ম্যানেজার অ্যাকাউন্ট বা Google Ads বিজ্ঞাপনদাতার অ্যাকাউন্ট ম্যানেজ করতে পারে। আপনি ম্যানেজার অ্যাকাউন্টের সাথে বিজ্ঞাপনদাতার অ্যাকাউন্ট লিঙ্ক করতে এবং তারপর ম্যানেজার অ্যাকাউন্টের মাধ্যমে বিজ্ঞাপনদাতার অ্যাকাউন্ট ম্যানেজ করতে পারবেন। সামগ্রিক লিঙ্ক করা স্ট্রাকচার হল একটি ডিরেক্টেড অ্যাসাইক্লিক গ্রাফ যার লিফ লেভেলে বিজ্ঞাপনদাতার অ্যাকাউন্ট থাকে।

আপনি Google Ads অ্যাকাউন্টে স্বতন্ত্র ব্যবহারকারী বা পরিষেবা অ্যাকাউন্টকে অ্যাক্সেস দিতে পারেন। বিজ্ঞাপনদাতার অ্যাকাউন্টে ব্যবহারকারীদের অ্যাক্সেস দেওয়ার দুটি উপায় আছে:

  • অ্যাকাউন্টে আমন্ত্রণ জানিয়ে ব্যবহারকারীকে বিজ্ঞাপনদাতার অ্যাকাউন্টে সরাসরি অ্যাক্সেস দিন।
  • সেই অ্যাকাউন্টের সাথে লিঙ্ক করা ম্যানেজার অ্যাকাউন্টে আমন্ত্রণ জানিয়ে বিজ্ঞাপনদাতার অ্যাকাউন্টে ব্যবহারকারীকে পরোক্ষ অ্যাক্সেস দিন। ম্যানেজার অ্যাকাউন্টের অধীনে লিঙ্ক করা সব অ্যাকাউন্টে অ্যাক্সেস থাকার কারণে ব্যবহারকারী বিজ্ঞাপনদাতার অ্যাকাউন্টে অ্যাক্সেস পান।

এছাড়াও, কোনও অ্যাকাউন্ট ম্যানেজ করার জন্য ব্যবহারকারীকে আমন্ত্রণ জানানোর সময় আপনি ব্যবহারকারীর ভূমিকা অ্যাসাইন করতে পারবেন।

নিম্নলিখিত অ্যাকাউন্ট হায়ারার্কি বিবেচনা করুন। ধরে নিন যে সব ব্যবহারকারীর স্ট্যান্ডার্ড অ্যাক্সেস আছে।

ডায়াগ্রামে দেখানো হয়েছে যে ম্যানেজার অ্যাকাউন্ট M1, M2 এবং M3 বিজ্ঞাপনদাতার অ্যাকাউন্ট A1 থেকে A4-এর সাথে লিঙ্ক করা আছে।

নিচে দেওয়া সারণীতে এই অ্যাকাউন্ট স্ট্রাকচার সংক্ষিপ্তভাবে দেখানো হয়েছে।

ব্যবহারকারী এগুলিতে সরাসরি অ্যাক্সেস আছে এতে পরোক্ষ অ্যাক্সেস আছে
U1, SA1 M1 M2, A1, A2, A3
U2 M2, M3 A1, A2, A3, A4
U3 A4  

লগ-ইন কাস্টমার আইডি

একজন ব্যবহারকারীর একাধিক অ্যাকাউন্ট হায়ারার্কিতে অ্যাক্সেস থাকতে পারে। এই ধরনের ক্ষেত্রে API কল করার সময়, আপনাকে রুট অ্যাকাউন্ট উল্লেখ করতে হবে যাতে অনুমোদন ও অ্যাকাউন্ট অ্যাক্সেস লেভেল সঠিকভাবে নির্ধারণ করা যায়। এটি করতে, আপনার API অনুরোধে login-customer-id হেডার অন্তর্ভুক্ত করুন।

আপনি কোন লগ-ইন গ্রাহক আইডি ব্যবহার করতে পারবেন এবং আপনি কল করতে পারবেন এমন অ্যাকাউন্টের সংশ্লিষ্ট তালিকা দেখাতে, নিম্নলিখিত সারণীতে আগের উদাহরণ থেকে অ্যাকাউন্ট হায়ারার্কি ব্যবহার করা হয়েছে।

ব্যবহারকারী ব্যবহার করার জন্য কাস্টমার আইডিতে লগ-ইন করুন API কল করার জন্য অ্যাকাউন্ট
U1, SA1 M1 M1, M2, A1, A2, A3
U2 M2 M2, A1, A2, A3
U2 M3 M3, A1, A4
U3 A4 A4

আপনি যে Google Ads অ্যাকাউন্টে কল করছেন, ব্যবহারকারীর যদি সেটিতে সরাসরি অ্যাক্সেস থাকে, তাহলে আপনি login-customer-id হেডার প্রদান করা এড়িয়ে যেতে পারেন। যেমন, A4-এ কল করার জন্য U3 ক্রেডেনশিয়াল ব্যবহার করার সময় আপনাকে login-customer-id হেডার উল্লেখ করতে হবে না, কারণ Google Ads সার্ভার কাস্টমার আইডি (A4) থেকে অ্যাক্সেস লেভেল সঠিকভাবে নির্ধারণ করতে পারে।

আপনি Google Ads API ক্লায়েন্ট লাইব্রেরি ব্যবহার করলে, login-customer-id হেডার নির্দিষ্ট করতে নিম্নলিখিত সেটিংস ব্যবহার করুন।

Java

আপনার ads.properties ফাইলে নিম্নলিখিত সেটিং যোগ করুন।

api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

.NET

আপনি GoogleAdsConfig অবজেক্ট শুরু করার সময় নিম্নলিখিত সেটিং যোগ করুন এবং GoogleAdsClient অবজেক্ট তৈরি করতে এটি ব্যবহার করুন।

GoogleAdsConfig config = new GoogleAdsConfig()
{
    // ...
    LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
};
GoogleAdsClient client = new GoogleAdsClient(config);

Python

আপনার google-ads.yaml ফাইলে নিম্নলিখিত সেটিং যোগ করুন।

login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE

PHP

আপনার google_ads_php.ini ফাইলে নিম্নলিখিত সেটিং যোগ করুন।

[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"

Ruby

আপনার google_ads_config.rb ফাইলে নিম্নলিখিত সেটিং যোগ করুন।

Google::Ads::GoogleAds::Config.new do |c|
  c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end

আপনি যেখানে এই ফাইলটি রাখেন সেখানে পাথ পাস করে একটি GoogleAdsClient ইনস্ট্যান্স তৈরি করুন।

client = Google::Ads::GoogleAds::GoogleAdsClient.new(
  'path/to/google_ads_config.rb'
)

Perl

আপনার googleads.properties ফাইলে নিম্নলিখিত সেটিং যোগ করুন।

loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

কার্ল

curl কমান্ড চালানোর সময় নিম্নলিখিত কমান্ড লাইন আর্গুমেন্ট নির্দিষ্ট করুন।

-H "login-customer-id: INSERT_LOGIN_CUSTOMER_ID_HERE"

কোনও ব্যবহারকারীর সরাসরি অ্যাক্সেস আছে এমন অ্যাকাউন্টের তালিকা পেতে আপনি CustomerService.ListAccessibleCustomers পদ্ধতি ব্যবহার করতে পারেন। এইসব অ্যাকাউন্ট login-customer-id হেডারের জন্য সঠিক ভ্যালু হিসেবে ব্যবহার করা যেতে পারে।

Java

private void runExample(GoogleAdsClient client) {
  // Optional: Change credentials to use a different refresh token, to retrieve customers
  //           available for a specific user.
  //
  // UserCredentials credentials =
  //     UserCredentials.newBuilder()
  //         .setClientId("INSERT_OAUTH_CLIENT_ID")
  //         .setClientSecret("INSERT_OAUTH_CLIENT_SECRET")
  //         .setRefreshToken("INSERT_REFRESH_TOKEN")
  //         .build();
  //
  // client = client.toBuilder().setCredentials(credentials).build();

  try (CustomerServiceClient customerService =
      client.getLatestVersion().createCustomerServiceClient()) {
    ListAccessibleCustomersResponse response =
        customerService.listAccessibleCustomers(
            ListAccessibleCustomersRequest.newBuilder().build());

    System.out.printf("Total results: %d%n", response.getResourceNamesCount());

    for (String customerResourceName : response.getResourceNamesList()) {
      System.out.printf("Customer resource name: %s%n", customerResourceName);
    }
  }
}
      

C#

public void Run(GoogleAdsClient client)
{
    // Get the CustomerService.
    CustomerServiceClient customerService = client.GetService(Services.V25.CustomerService);

    try
    {
        // Retrieve the list of customer resources.
        string[] customerResourceNames = customerService.ListAccessibleCustomers();

        // Display the result.
        foreach (string customerResourceName in customerResourceNames)
        {
            Console.WriteLine(
                $"Found customer with resource name = '{customerResourceName}'.");
        }
    }
    catch (GoogleAdsException e)
    {
        Console.WriteLine("Failure:");
        Console.WriteLine($"Message: {e.Message}");
        Console.WriteLine($"Failure: {e.Failure}");
        Console.WriteLine($"Request ID: {e.RequestId}");
        throw;
    }
}
      

PHP

public static function runExample(GoogleAdsClient $googleAdsClient)
{
    $customerServiceClient = $googleAdsClient->getCustomerServiceClient();

    // Issues a request for listing all accessible customers.
    $accessibleCustomers =
        $customerServiceClient->listAccessibleCustomers(new ListAccessibleCustomersRequest());
    print 'Total results: ' . count($accessibleCustomers->getResourceNames()) . PHP_EOL;

    // Iterates over all accessible customers' resource names and prints them.
    foreach ($accessibleCustomers->getResourceNames() as $resourceName) {
        /** @var string $resourceName */
        printf("Customer resource name: '%s'%s", $resourceName, PHP_EOL);
    }
}
      

Python

def main(client: GoogleAdsClient) -> None:
    customer_service: CustomerServiceClient = client.get_service(
        "CustomerService"
    )

    accessible_customers: ListAccessibleCustomersResponse = (
        customer_service.list_accessible_customers()
    )
    result_total: int = len(accessible_customers.resource_names)
    print(f"Total results: {result_total}")

    resource_names: List[str] = accessible_customers.resource_names
    for resource_name in resource_names:  # resource_name is implicitly str
        print(f'Customer resource name: "{resource_name}"')
      

Ruby

def list_accessible_customers()
  # GoogleAdsClient will read a config file from
  # ENV['HOME']/google_ads_config.rb when called without parameters
  client = Google::Ads::GoogleAds::GoogleAdsClient.new

  accessible_customers = client.service.customer.list_accessible_customers().resource_names

  accessible_customers.each do |resource_name|
    puts "Customer resource name: #{resource_name}"
  end
end
      

Perl

sub list_accessible_customers {
  my ($api_client) = @_;

  my $list_accessible_customers_response =
    $api_client->CustomerService()->list_accessible_customers();

  printf "Total results: %d.\n",
    scalar @{$list_accessible_customers_response->{resourceNames}};

  foreach
    my $resource_name (@{$list_accessible_customers_response->{resourceNames}})
  {
    printf "Customer resource name: '%s'.\n", $resource_name;
  }

  return 1;
}
      

কার্ল

# Returns the resource names of customers directly accessible by the user
# authenticating the call.
#
# Variables:
#   API_VERSION,
#   OAUTH2_ACCESS_TOKEN:
#     See https://developers.google.com/google-ads/api/rest/auth#request_headers
#     for details.
#
curl -f --request GET \
"https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
      

ListAccessibleCustomers পদ্ধতি ব্যবহার করে আমার কাস্টমার আইডি খুঁজে না পেলে কী হবে?

CustomerService.ListAccessibleCustomers পদ্ধতিটি যদি এমন কোনও গ্রাহক আইডি না পায় যা আপনি ফলাফলে দেখতে পাওয়ার আশা করেছিলেন, তাহলে এর কয়েকটি সম্ভাব্য কারণ থাকতে পারে।

  1. আপনার কাছে কাস্টমার আইডির অ্যাক্সেস আছে, তবে অ্যাক্সেসটি পেরেন্ট ম্যানেজার অ্যাকাউন্টের মাধ্যমে ইস্যু করা হয়েছে। যেমন, আপনি যদি আগের উদাহরণে U1 ব্যবহারকারীর ক্রেডেনশিয়াল সহ ListAccessibleCustomers মেথড কল করেন, তাহলে মেথডটি ফলাফলে শুধুমাত্র M1 রিটার্ন করে, যদিও U1-এর আরও অ্যাকাউন্টে অ্যাক্সেস আছে। এই সম্ভাবনা কনফার্ম করতে, ListAccessibleCustomers পদ্ধতিতে ফেরত আসা প্রতিটি অ্যাকাউন্টের জন্য customer_client রিসোর্সের বিপরীতে search বা searchStream কোয়েরি এক্সিকিউট করে অ্যাকাউন্ট হায়ারার্কি ফিরিয়ে আনুন। এটি করতে, আগের বিভাগে যেভাবে বর্ণনা করা হয়েছে সেই অনুযায়ী এইসব অ্যাকাউন্টের প্রত্যেকটিকে login-customer-id হিসেবে সেট করুন। টার্গেট অ্যাকাউন্টে আপনার অ্যাক্সেস থাকলে, আপনি অ্যাকাউন্ট হায়ারার্কির অংশ হিসেবে এটি ফেচ করতে পারবেন।

  2. আপনি ভুল OAuth ক্রেডেনশিয়াল ব্যবহার করছেন। সবচেয়ে সাধারণ পরিস্থিতি হল আপনি অন্য কোনও ব্যবহারকারীর ক্রেডেনশিয়াল ব্যবহার করছেন। যেমন, এটি স্যান্ডবক্স বা ডেভেলপার ক্রেডেনশিয়ালের সাথে প্রোডাকশন ক্রেডেনশিয়াল ভুলবশত মিশিয়ে দেওয়ার কারণে অথবা ডেটাবেস বা লোকাল ক্যাশে থেকে অন্য ব্যবহারকারীর ক্রেডেনশিয়াল ভুলভাবে পড়ার কারণে হতে পারে। এই সমস্যার সমাধান করার একটি সম্ভাব্য উপায় হল Google People API ব্যবহার করে লগ-ইন করা ব্যবহারকারীর নাম ও ইমেল আইডি খুঁজে বের করা এবং আপনি যে ইমেল আইডি আশা করছিলেন তার সাথে এটি মিলছে কিনা তা যাচাই করা।

  3. আপনার অ্যাকাউন্টে অ্যাক্সেস নেই। সঠিক গ্রাহক অ্যাকাউন্টে অ্যাক্সেস পেতে অ্যাকাউন্ট অ্যাক্সেস গাইড অনুসরণ করুন।

ব্যবহারকারীর ভূমিকা

Google Ads API-এর নিজস্ব কোনও আলাদা অ্যাক্সেস মডেল নেই অথবা কার্যকারিতা সীমিত করতে আলাদা OAuth 2.0 স্কোপ ব্যবহার করে না। যেমন, Google Ads API শুধুমাত্র-পড়া বনাম পড়া-লেখার অপারেশনের জন্য একই স্কোপ ব্যবহার করে। পরিবর্তে, Google Ads API, Google Ads-এর মতো একই ব্যবহারকারীর ভূমিকা অনুসরণ করে। ম্যানেজার লেভেলে কোনও অ্যাকাউন্টে ব্যবহারকারীর ভূমিকা দেওয়া হলে, সেই ভূমিকাটি হায়ারার্কিতে থাকা অ্যাকাউন্টগুলি উত্তরাধিকার সূত্রে পায়। কোনও অ্যাকাউন্টে ব্যবহারকারীর একাধিক ভূমিকা থাকলে, API অনুরোধে উল্লেখ করা login-customer-id অ্যাকাউন্ট সঠিক লেভেল নির্ধারণ করে।

নিম্নলিখিত সারণীতে আগের উদাহরণ থেকে অ্যাকাউন্টের ক্রম ব্যবহার করা হয়েছে এবং ব্যবহারকারীদের বিভিন্ন ভূমিকা দেওয়ার প্রভাব দেখানো হয়েছে।

ব্যবহারকারী ব্যবহারকারীর ভূমিকা মঞ্জুর করা হয়েছে login-customer-id কার্যকর অ্যাক্সেস লেভেল
SA1 M1 অ্যাকাউন্টে স্ট্যান্ডার্ড অ্যাক্সেস M1 M1, M2, A1, A2, A3-তে স্ট্যান্ডার্ড অ্যাক্সেস
U2 M2-এ স্ট্যান্ডার্ড অ্যাক্সেস
M3-এ শুধু পড়ার অ্যাক্সেস
M2 M2, A1, A2, A3-তে স্ট্যান্ডার্ড অ্যাক্সেস
U2 M2-এ স্ট্যান্ডার্ড অ্যাক্সেস
M3-এ শুধু পড়ার অ্যাক্সেস
M3 M3, A1, A4-এ শুধু পড়ার অ্যাক্সেস