উদাহরণ

এই গাইডে ক্লায়েন্ট লাইব্রেরি ব্যবহার না করে সরাসরি REST এন্ডপয়েন্ট কল করার উদাহরণ দেওয়া আছে।

আরও বিস্তারিত কোডের উদাহরণের জন্য, REST কোডের উদাহরণ GitHub রিপোজিটরি চেক করুন।

প্রতিটি API পদ্ধতির জন্য অনুরোধ এবং প্রতিক্রিয়া বডি দেখতে, নির্দিষ্ট পরিষেবা এন্ডপয়েন্টের জন্য রেফারেন্স ডকুমেন্টেশন দেখুন।

যেমন, GoogleAdsService.Search-এর রেফারেন্স পৃষ্ঠাতে Search পদ্ধতির জন্য অনুরোধ ও উত্তর বডি দেখানো হয়।

পূর্বশর্ত

এখানে দেখানো সব স্যাম্পেল curl কমান্ড ব্যবহার করে bash shell-এ কপি-পেস্ট করার জন্য তৈরি করা হয়েছে।

এছাড়াও, আপনার একটি Google Cloud প্রোজেক্ট, টেস্ট অ্যাকাউন্ট অ্যাক্সেস এবং অন্তত একটি ক্লায়েন্ট অ্যাকাউন্ট সহ একটি Google Ads ম্যানেজার অ্যাকাউন্ট থাকতে হবে।

এনভায়রনমেন্ট ভেরিয়েবল

অ্যাকাউন্ট ক্রেডেনশিয়াল ও আইডি যেভাবে দেখানো হয়েছে সেভাবে লিখুন এবং তারপরে আপনার টার্মিনালে কপি-পেস্ট করুন যাতে পরবর্তী উদাহরণে ব্যবহৃত এনভায়রনমেন্ট ভেরিয়েবল কনফিগার করা যায়। অনুমোদন সংক্রান্ত নির্দেশিকায় OAuth 2.0 অ্যাক্সেস টোকেন তৈরি করার নির্দেশাবলী দেওয়া আছে।

API_VERSION="26"
OAUTH2_ACCESS_TOKEN="OAUTH_ACCESS_TOKEN"
MANAGER_CUSTOMER_ID="MANAGER_CUSTOMER_ID"
CUSTOMER_ID="CUSTOMER_ID"

অতিরিক্ত ঐচ্ছিক অবজেক্ট আইডি

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

BUDGET_ID=BUDGET_ID
CAMPAIGN_ID=CAMPAIGN_ID

অন্যথায়, দুটি Mutates - Creates examples নতুন বাজেট ও ক্যাম্পেন তৈরি করে।

Query Cookbook গাইডে অনেক রিপোর্টিং স্যাম্পেল আছে যা কিছু ডিফল্ট Google Ads স্ক্রিনের সাথে মিলে যায় এবং এই গাইডে ব্যবহার করা একই এনভায়রনমেন্ট ভেরিয়েবলের সাথে কাজ করে। আমাদের ইন্টার‍্যাক্টিভ কোয়েরি বিল্ডার টুল হল ইন্টার‍্যাক্টিভভাবে কাস্টম কোয়েরি তৈরি করার একটি দুর্দান্ত রিসোর্স।

পৃষ্ঠার ক্রমসংখ্যা দেওয়া হয়েছে

search পদ্ধতিতে পেজিনেশন ব্যবহার করা হয়, যেখানে পৃষ্ঠার সাইজ ১০,০০০ আইটেমে ফিক্স করা থাকে এবং query-এর সাথে page_token উল্লেখ করা থাকে।

কার্ল

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data '{
"query": "
  SELECT campaign.name,
    campaign_budget.amount_micros,
    campaign.status,
    campaign.optimization_score,
    campaign.advertising_channel_type,
    metrics.clicks,
    metrics.impressions,
    metrics.ctr,
    metrics.average_cpc,
    metrics.cost_micros,
    campaign.bidding_strategy_type
  FROM campaign
  WHERE segments.date DURING LAST_7_DAYS
    AND campaign.status != 'REMOVED'
",
"page_token":"${PAGE_TOKEN}"
}'

GAQL

SELECT campaign.name,
  campaign_budget.amount_micros,
  campaign.status,
  campaign.optimization_score,
  campaign.advertising_channel_type,
  metrics.clicks,
  metrics.impressions,
  metrics.ctr,
  metrics.average_cpc,
  metrics.cost_micros,
  campaign.bidding_strategy_type
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
  AND campaign.status != 'REMOVED'

স্ট্রিমিং

searchStream পদ্ধতিটি একটি একক উত্তরে সমস্ত ফলাফল স্ট্রিম করে, তাই, pageSize ফিল্ডটি কাজ করে না।

কার্ল

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:searchStream" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data '{
"query": "
  SELECT campaign.name,
    campaign_budget.amount_micros,
    campaign.status,
    campaign.optimization_score,
    campaign.advertising_channel_type,
    metrics.clicks,
    metrics.impressions,
    metrics.ctr,
    metrics.average_cpc,
    metrics.cost_micros,
    campaign.bidding_strategy_type
  FROM campaign
  WHERE segments.date DURING LAST_7_DAYS
    AND campaign.status != 'REMOVED'
"
}'

GAQL

SELECT campaign.name,
  campaign_budget.amount_micros,
  campaign.status,
  campaign.optimization_score,
  campaign.advertising_channel_type,
  metrics.clicks,
  metrics.impressions,
  metrics.ctr,
  metrics.average_cpc,
  metrics.cost_micros,
  campaign.bidding_strategy_type
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
  AND campaign.status != 'REMOVED'

পরিবর্তন করে

operations অ্যারে পূরণ করে একটি JSON অনুরোধের বডিতে একাধিক মিউটেট অপারেশন (create, update, বা remove) পাঠানো যেতে পারে।

তৈরি করে

এই উদাহরণটি একটি অনুরোধে দুটি শেয়ার করা ক্যাম্পেন বাজেট তৈরি করে।

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaignBudgets:mutate" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'create': {
      'name': 'My Campaign Budget #${RANDOM}',
      'amountMicros': 500000,
    }
  },
  {
    'create': {
      'name': 'My Campaign Budget #${RANDOM}',
      'amountMicros': 500000,
    }
  }
]
}"

পরবর্তী উদাহরণে আগে থেকে থাকা ক্যাম্পেন বাজেটের BUDGET_ID ব্যবহার করা হয়েছে; আপনি আগের ধাপের আউটপুট থেকে কপি-পেস্ট করতে পারবেন।

BUDGET_ID=BUDGET_ID

যেসব রিসোর্স অন্য রিসোর্সকে রেফার করে, সেগুলি রিসোর্সের নাম ব্যবহার করে তা করে। নিচের উদাহরণে তৈরি করা ক্যাম্পেনটি স্ট্রিং-ভ্যালু রিসোর্স নামের মাধ্যমে campaignBudget-কে রেফার করে।

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'create': {
      'status': 'PAUSED',
      'advertisingChannelType': 'SEARCH',
      'geoTargetTypeSetting': {
        'positiveGeoTargetType': 'PRESENCE_OR_INTEREST',
        'negativeGeoTargetType': 'PRESENCE_OR_INTEREST'
      },
      'name': 'My Search campaign #${RANDOM}',
      'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/${BUDGET_ID}',
      'targetSpend': {}
    }
  }
]
}"

আপডেট

update অপারেশন ব্যবহার করে আগে থেকে থাকা অবজেক্টের অ্যাট্রিবিউট আপডেট করুন। পরবর্তী উদাহরণে আগে থেকে থাকা ক্যাম্পেন ব্যবহার করা হয়েছে; আপনি আগের ধাপের আউটপুট থেকে কপি-পেস্ট করতে পারবেন।

CAMPAIGN_ID=CAMPAIGN_ID

সব আপডেটের জন্য একটি updateMask ফিল্ড প্রয়োজন, কমা দিয়ে আলাদা করা JSON অ্যাট্রিবিউটের তালিকা অনুরোধে থাকতে হবে, যা আপডেট হিসেবে প্রয়োগ করা হবে। updateMask-এ তালিকাভুক্ত অ্যাট্রিবিউট যা অনুরোধের বডিতে নেই, তা অবজেক্ট থেকে মুছে দেওয়া হয়। updateMask-এ তালিকাভুক্ত নয় এমন অ্যাট্রিবিউট, অনুরোধের বডিতে থাকলেও, তা উপেক্ষা করা হয়।

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'update': {
      'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}',
      'name': 'A changed campaign name #${RANDOM}',
    },
    'updateMask': 'name'
  }
],
}"

সরিয়ে দেয়

remove অপারেশন হিসেবে রিসোর্সের নাম উল্লেখ করে অবজেক্ট সরানো হয়।

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'remove': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}'
  }
],
}"

আংশিক কাজ করেনি

একটি অনুরোধে একাধিক অপারেশন থাকলে, বিকল্প হিসেবে partialFailure উল্লেখ করুন। true হলে, সঠিক অপারেশনগুলি সম্পন্ন করা হয় এবং ভুল অপারেশনগুলি ত্রুটি দেখায়। false হলে, অনুরোধের সব অপারেশন তখনই সফল হবে যদি সেগুলি সব বৈধ হয়।

পরবর্তী উদাহরণে আগে থেকে থাকা ক্যাম্পেন ব্যবহার করা হয়; আপনি তৈরি করে উদাহরণ আউটপুট থেকে কপি-পেস্ট করতে পারবেন।

CAMPAIGN_ID=CAMPAIGN_ID

নিম্নলিখিত অনুরোধে দুটি অপারেশন আছে। প্রথমটি প্রদত্ত ক্যাম্পেনের বিড স্ট্র্যাটেজি পরিবর্তন করার চেষ্টা করে এবং পরেরটি ভুল আইডি সহ ক্যাম্পেন সরানোর চেষ্টা করে। যেহেতু দ্বিতীয় অপারেশনের ফলে সমস্যা দেখা দেয় (ক্যাম্পেন আইডি সঠিক নয়) এবং partialFailure-কে false হিসেবে সেট করা হয়েছে, তাই প্রথম অপারেশনও ব্যর্থ হয় এবং আগে থেকে থাকা ক্যাম্পেনের বিড স্ট্র্যাটেজি আপডেট হয় না।

curl --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/campaigns:mutate" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'partialFailure': false,
'operations': [
  {
    'update': {
      'resourceName': 'customers/${CUSTOMER_ID}/campaigns/${CAMPAIGN_ID}',
      'manualCpc': {
        'enhancedCpcEnabled': false
      }
    },
    'updateMask': 'manual_cpc.enhanced_cpc_enabled'
  },
  {
    'remove': 'customers/${CUSTOMER_ID}/campaigns/INVALID_CAMPAIGN_ID'
  }
]
}"

গ্রুপ করা অপারেশন

googleAds:mutate পদ্ধতি একাধিক ধরনের রিসোর্স সহ অপারেশনের গ্রুপ পাঠানোর সুবিধা দেয়। আপনি বিভিন্ন ধরনের অনেক অপারেশন পাঠাতে পারেন একসাথে অপারেশনের একটি ক্রম চেইন করুন যা একটি গ্রুপ হিসাবে করা উচিত। কোনও অপারেশন ব্যর্থ না হলে অপারেশনের সেট সফল হয় বা কোনও একটি অপারেশন ব্যর্থ হলে সব ব্যর্থ হয়।

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

রিসোর্সের নামে নেগেটিভ ইন্টিজার (-1, -2, -3) প্লেসহোল্ডার হিসেবে ব্যবহার করা হয় এবং অপারেশনের সিকোয়েন্স থেকে পাওয়া ফলাফল দিয়ে রানটাইমে ডায়নামিকভাবে পূরণ করা হয়।

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:mutate" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'mutateOperations': [
  {
    'campaignBudgetOperation': {
      'create': {
        'resourceName': 'customers/${CUSTOMER_ID}/campaignBudgets/-1',
        'name': 'My Campaign Budget #${RANDOM}',
        'deliveryMethod': 'STANDARD',
        'amountMicros': 500000,
        'explicitlyShared': false
      }
    }
  },
  {
    'campaignOperation': {
      'create': {
        'resourceName': 'customers/${CUSTOMER_ID}/campaigns/-2',
        'status': 'PAUSED',
        'advertisingChannelType': 'SEARCH',
        'geoTargetTypeSetting': {
          'positiveGeoTargetType': 'PRESENCE_OR_INTEREST',
          'negativeGeoTargetType': 'PRESENCE_OR_INTEREST'
        },
        'name': 'My Search campaign #${RANDOM}',
        'campaignBudget': 'customers/${CUSTOMER_ID}/campaignBudgets/-1',
        'targetSpend': {}
      }
    }
  },
  {
    'adGroupOperation': {
      'create': {
        'resourceName': 'customers/${CUSTOMER_ID}/adGroups/-3',
        'campaign': 'customers/${CUSTOMER_ID}/campaigns/-2',
        'name': 'My ad group #${RANDOM}',
        'status': 'PAUSED',
        'type': 'SEARCH_STANDARD'
      }
    }
  },
  {
    'adGroupAdOperation': {
      'create': {
        'adGroup': 'customers/${CUSTOMER_ID}/adGroups/-3',
        'status': 'PAUSED',
        'ad': {
          'responsiveSearchAd': {
            'headlines': [
              {
                'pinned_field': 'HEADLINE_1',
                'text': 'An example headline'
              },
              {
                'text': 'Another example headline'
              },
              {
                'text': 'Yet another headline'
              }
            ],
            'descriptions': [
              {
                'text': 'An example description'
              },
              {
                'text': 'Another example description'
              }
            ],
            'path1': 'all-inclusive',
            'path2': 'deals'
          },
          'finalUrls': ['https://www.example.com']
        }
      }
    }
  }
]
}"

অ্যাকাউন্ট ম্যানেজমেন্ট

আপনি অ্যাকাউন্ট তৈরি করতে, অ্যাক্সেসযোগ্য অ্যাকাউন্টের তালিকা তৈরি করতে এবং বাইনারি অ্যাসেট আপলোড করতে পারবেন।

অ্যাকাউন্ট তৈরি করুন

createCustomerClient পদ্ধতি ব্যবহার করে নতুন অ্যাকাউন্ট তৈরি করুন। মনে রাখবেন যে URL-এ ক্লায়েন্ট অ্যাকাউন্ট আইডির পরিবর্তে ম্যানেজার অ্যাকাউন্ট আইডি প্রয়োজন। ম্যানেজার অ্যাকাউন্টের অধীনে একটি নতুন ক্লায়েন্ট অ্যাকাউন্ট তৈরি করা হয়।

curl f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${MANAGER_CUSTOMER_ID}:createCustomerClient" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'customerClient': {
  'descriptiveName': 'My Client #${RANDOM}',
  'currencyCode': 'USD',
  'timeZone': 'America/New_York'
}
}"

অ্যাক্সেসযোগ্য অ্যাকাউন্টের তালিকা

প্রদত্ত OAuth 2.0 অ্যাক্সেস টোকেন দিয়ে অ্যাক্সেস করা যায় এমন Google Ads অ্যাকাউন্টের তালিকা পেতে listAccessibleCustomers পদ্ধতিতে একটি সাধারণ GET অনুরোধ ব্যবহার করুন। এই অনুরোধে কোনও ম্যানেজার বা ক্লায়েন্ট অ্যাকাউন্ট আইডি ব্যবহার করা যাবে না।

curl -f --request GET "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \

বাইনারি অ্যাসেট আপলোড করুন

অ্যাসেট আপলোড ও ম্যানেজ করার জন্য assets:mutate পদ্ধতি ব্যবহার করা হয়। বাইনারি ডেটা, যেমন একটি ছবি, প্যাডিং সহ স্ট্যান্ডার্ড base64 এনকোডিং ব্যবহার করে একটি স্ট্রিং হিসাবে এনকোড করা হয়। প্যাডিং সহ বা ছাড়া স্ট্যান্ডার্ড বা URL-এর জন্য নিরাপদ base64 এনকোডিং গ্রহণ করা হয়।

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

১-পিক্সেল GIF ছবি এনকোড করতে base64 কমান্ড লাইন ইউটিলিটি ( GNU কোর ইউটিলিটির অংশ) ব্যবহার করুন।

base64 1pixel.gif

API অনুরোধে base64-এনকোড করা ভ্যালু data অ্যাট্রিবিউট হিসেবে উল্লেখ করা হয়।

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/assets:mutate" \
--header "Content-Type: application/json" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data "{
'operations': [
  {
    'create': {
      'name': 'My image asset #${RANDOM}',
      'type': 'IMAGE',
      'imageAsset': {
        'data': 'R0lGODlhAQABAAAAACH5BAEAAAAALAAAAAABAAEAAAIA'
      }
    }
  }
]
}"