Google বিজ্ঞাপন অ্যাক্সেস মডেল বুঝুন

দুই ধরনের Google Ads অ্যাকাউন্ট আছে: Google Ads ম্যানেজার অ্যাকাউন্ট এবং Google Ads বিজ্ঞাপনদাতা অ্যাকাউন্ট (যা গ্রাহক বা ক্লায়েন্ট অ্যাকাউন্ট নামেও পরিচিত)। ম্যানেজার অ্যাকাউন্টগুলি অন্যান্য Google বিজ্ঞাপন ম্যানেজার অ্যাকাউন্ট বা Google বিজ্ঞাপন বিজ্ঞাপনদাতা অ্যাকাউন্টগুলি পরিচালনা করতে পারে। আপনি একটি বিজ্ঞাপনদাতা অ্যাকাউন্টকে একটি ম্যানেজার অ্যাকাউন্টের সাথে লিঙ্ক করতে পারেন এবং তারপর ম্যানেজার অ্যাকাউন্টের মাধ্যমে বিজ্ঞাপনদাতার অ্যাকাউন্ট পরিচালনা করতে পারেন। সামগ্রিক লিঙ্কযুক্ত কাঠামো হল পাতার স্তরে বিজ্ঞাপনদাতার অ্যাকাউন্ট সহ একটি নির্দেশিত অ্যাসাইক্লিক গ্রাফ

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

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

আপনি যখন কোনও ব্যবহারকারীকে অ্যাকাউন্ট পরিচালনা করার জন্য আমন্ত্রণ জানান তখন আপনি ব্যবহারকারীর ভূমিকাও বরাদ্দ করতে পারেন৷

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

একটি অ্যাকাউন্ট অনুক্রমের চিত্র

নিম্নলিখিত সারণী এই অ্যাকাউন্ট কাঠামোর সংক্ষিপ্ত বিবরণ দেয়।

ব্যবহারকারী সরাসরি প্রবেশাধিকার আছে পরোক্ষ অ্যাক্সেস আছে
U1, SA1 এম 1 M2, A1, A2, A3
U2 M2, M3 A1, A2, A3, A4
U3 A4

লগইন গ্রাহক আইডি

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

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

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

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

আপনি যদি আমাদের ক্লায়েন্ট লাইব্রেরিগুলির একটি ব্যবহার করেন, তাহলে login-customer-id শিরোনাম নির্দিষ্ট করতে নিম্নলিখিত সেটিংস ব্যবহার করুন।

জাভা

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

api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

সি#

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

GoogleAdsConfig config = new GoogleAdsConfig()
{
    ...
    LoginCustomerId = ******
};
GoogleAdsClient client = new GoogleAdsClient(config);

পিএইচপি

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

[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"

পাইথন

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

login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE

রুবি

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

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

আপনি যেখানে এই ফাইলটি রাখবেন সেই পাথ দিয়ে একটি GoogleAdsClient উদাহরণ তৈরি করুন৷

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

পার্ল

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

loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

কার্ল

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

-H "login-customer-id: LOGIN_CUSTOMER_ID"

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

জাভা

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

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

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

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

সি#

public void Run(GoogleAdsClient client)
{
    // Get the CustomerService.
    CustomerServiceClient customerService = client.GetService(Services.V21.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;
    }
}
      

পিএইচপি

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);
    }
}
      

পাইথন

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}"')
      

রুবি

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

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

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

পার্ল

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

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

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

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

  return 1;
}
      

কার্ল

# Returns the resource names of customers directly accessible by the user
# authenticating the call.
#
# Variables:
#   API_VERSION,
#   DEVELOPER_TOKEN,
#   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 "developer-token: ${DEVELOPER_TOKEN}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
      

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

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

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

ব্যবহারকারী ব্যবহারকারীর ভূমিকা দেওয়া হয়েছে লগইন-গ্রাহক-আইডি কার্যকর অ্যাক্সেস স্তর
SA1 অ্যাকাউন্ট M1 এ স্ট্যান্ডার্ড অ্যাক্সেস এম 1 M1, M2, A1, A2, A3-এ স্ট্যান্ডার্ড অ্যাক্সেস
U2 M2 এ স্ট্যান্ডার্ড অ্যাক্সেস
M3 এ শুধুমাত্র পঠনযোগ্য অ্যাক্সেস
M2 M2, A1, A2, A3-এ স্ট্যান্ডার্ড অ্যাক্সেস
U2 M2 এ স্ট্যান্ডার্ড অ্যাক্সেস
M3 এ শুধুমাত্র পঠনযোগ্য অ্যাক্সেস
M3 M3, A1, A4 এ শুধুমাত্র পঠনযোগ্য অ্যাক্সেস