उदाहरण

इस गाइड में, क्लाइंट लाइब्रेरी का इस्तेमाल किए बिना, सीधे तौर पर REST एंडपॉइंट को कॉल करने के उदाहरण दिए गए हैं.

ज़रूरी शर्तें

यहां दिखाए गए सभी सैंपल को curl कमांड का इस्तेमाल करके, bash shell में कॉपी करके चिपकाया जा सकता है.

आपको डेवलपर टोकन और टेस्ट खाते का ऐक्सेस भी चाहिए. साथ ही, एक ऐसा Google Ads मैनेजर खाता चाहिए जिसमें कम से कम एक क्लाइंट खाता हो.

एनवायरमेंट वैरिएबल

यहां दिखाए गए तरीके से खाते के क्रेडेंशियल और आईडी डालें. इसके बाद, इन्हें अपने टर्मिनल में कॉपी करके चिपकाएं. इससे, बाद के उदाहरणों में इस्तेमाल की गई एनवायरमेंट वैरिएबल को कॉन्फ़िगर किया जा सकेगा. Authorization गाइड में, OAuth 2.0 ऐक्सेस टोकन जनरेट करने के निर्देश दिए गए हैं.

API_VERSION="21"
DEVELOPER_TOKEN="DEVELOPER_TOKEN"
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 की मदद से नया बजट और कैंपेन बनाया जाता है.

क्वेरी कुकबुक गाइड में, रिपोर्टिंग के कई सैंपल दिए गए हैं. ये सैंपल, Google Ads की कुछ डिफ़ॉल्ट स्क्रीन से मेल खाते हैं. साथ ही, ये इस गाइड में इस्तेमाल किए गए एक जैसे एनवायरमेंट वैरिएबल के साथ काम करते हैं. इंटरैक्टिव क्वेरी बनाने वाले टूल का इस्तेमाल करके भी, इंटरैक्टिव तरीके से कस्टम क्वेरी बनाई जा सकती हैं.

पेज नंबर डाला गया हो

search तरीके में पेज नंबरिंग का इस्तेमाल किया जाता है. इसमें पेज का साइज़ 10, 000 आइटम पर सेट होता है. साथ ही,query के साथ page_token तय किया जाता है.

curl

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--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

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:searchStream" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--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 "developer-token: ${DEVELOPER_TOKEN}" \
--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 "developer-token: ${DEVELOPER_TOKEN}" \
--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 "developer-token: ${DEVELOPER_TOKEN}" \
--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 "developer-token: ${DEVELOPER_TOKEN}" \
--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 है, तो अनुरोध में की गई सभी कार्रवाइयां सिर्फ़ तब पूरी होंगी, जब वे सभी मान्य हों.

अगले उदाहरण में, किसी मौजूदा कैंपेन का इस्तेमाल किया गया है. Creates उदाहरण के आउटपुट से कॉपी करके चिपकाया जा सकता है.

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 "developer-token: ${DEVELOPER_TOKEN}" \
--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 "developer-token: ${DEVELOPER_TOKEN}" \
--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 तरीके का इस्तेमाल करके नए खाते बनाएं. ध्यान दें कि यूआरएल के लिए, क्लाइंट खाते के आईडी के बजाय मैनेजर खाते के आईडी की ज़रूरत होती है. मैनेजर खाते के तहत, नया क्लाइंट खाता बनाया जाता है.

curl f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${MANAGER_CUSTOMER_ID}:createCustomerClient" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--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'
}
}"

ऐक्सेस किए जा सकने वाले खातों की सूची बनाना

listAccessibleCustomers तरीके के लिए, GET का सामान्य अनुरोध भेजें. इससे आपको उन Google Ads खातों की सूची मिलेगी जिन्हें दिए गए OAuth 2.0 ऐक्सेस टोकन से ऐक्सेस किया जा सकता है. इस अनुरोध में, किसी मैनेजर या क्लाइंट खाते के आईडी का इस्तेमाल नहीं किया जाना चाहिए.

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}" \

बाइनरी ऐसेट अपलोड करना

assets:mutate तरीके का इस्तेमाल, ऐसेट अपलोड करने और उन्हें मैनेज करने के लिए किया जाता है. बाइनरी डेटा, जैसे कि इमेज को पैडिंग के साथ स्टैंडर्ड base64 एन्कोडिंग का इस्तेमाल करके स्ट्रिंग के तौर पर एन्कोड किया जाता है. पैडिंग के साथ या इसके बिना, स्टैंडर्ड या यूआरएल के लिए सुरक्षित base64 एन्कोडिंग स्वीकार की जाती है.

इस उदाहरण में, सैंपल को छोटा रखने के लिए 1 पिक्सल वाले GIF को कोड में बदला गया है. हालांकि, असल में data पेलोड का साइज़ इससे काफ़ी ज़्यादा होता है.

एक पिक्सल वाली GIF इमेज को एन्कोड करने के लिए, base64 कमांड लाइन यूटिलिटी का इस्तेमाल करें. यह GNU कोर यूटिलिटी का हिस्सा है.

base64 1pixel.gif

base64 कोड में बदली गई वैल्यू को एपीआई अनुरोध में data एट्रिब्यूट के तौर पर तय किया जाता है.

curl -f --request POST "https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/assets:mutate" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--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'
      }
    }
  }
]
}"