ตัวอย่าง

คู่มือนี้มีตัวอย่างการเรียกใช้ปลายทาง REST โดยตรงโดยไม่ต้องใช้ไลบรารีไคลเอ็นต์

ข้อกำหนดเบื้องต้น

ตัวอย่างทั้งหมดด้านล่างมีไว้เพื่อคัดลอกและวางลงใน bash shell โดยใช้คําสั่ง curl

นอกจากนี้ คุณจะต้องมีโทเค็นของนักพัฒนาซอฟต์แวร์ ซึ่งสิทธิ์เข้าถึงบัญชีทดสอบก็ใช้ได้ และบัญชีดูแลจัดการ Google Ads ที่มีบัญชีลูกค้าอย่างน้อย 1 บัญชี

ตัวแปรสภาพแวดล้อม

ป้อนข้อมูลเข้าสู่ระบบและรหัสบัญชีด้านล่าง จากนั้นคัดลอกและวางลงในเทอร์มินัลเพื่อกําหนดค่าตัวแปรสภาพแวดล้อมที่ใช้ในตัวอย่างต่อไปนี้ คู่มือการให้สิทธิ์มีวิธีการสร้างโทเค็นการเข้าถึง OAuth 2.0

API_VERSION="19"
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 2 รายการจะสร้างงบประมาณและแคมเปญใหม่

คู่มือตำราคําค้นหามีตัวอย่างการรายงานจํานวนมากซึ่งสอดคล้องกับหน้าจอเริ่มต้นของ Google Ads บางหน้าจอ และทํางานร่วมกับตัวแปรสภาพแวดล้อมเดียวกันกับที่ใช้ในคู่มือนี้ เครื่องมือสร้างการค้นหาแบบอินเทอร์แอกทีฟของเรายังเป็นแหล่งข้อมูลที่ยอดเยี่ยมในการสร้างการค้นหาที่กำหนดเองแบบอินเทอร์แอกทีฟด้วย

แบ่งหน้า

เมธอด search ใช้การแบ่งหน้าเว็บ โดยมีขนาดหน้าเว็บคงที่ 10,000 รายการ และระบุ page_token ไว้ข้าง query

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'

เปลี่ยนรูปแบบ

คุณส่งการดำเนินการเปลี่ยนแปลงหลายรายการ (create, update หรือ remove) ได้ในเนื้อหาคําขอ JSON รายการเดียวโดยป้อนข้อมูลในอาร์เรย์ operations

สร้าง

ตัวอย่างนี้จะสร้างงบประมาณแคมเปญที่ใช้ร่วมกัน 2 รายการในคําขอเดียว

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 การดำเนินการทั้งหมดในคำขอจะสำเร็จก็ต่อเมื่อการดำเนินการทั้งหมดถูกต้องเท่านั้น

ตัวอย่างถัดไปใช้แคมเปญที่มีอยู่ คุณสามารถคัดลอกและวางจากเอาต์พุตของตัวอย่างสร้าง

CAMPAIGN_ID=CAMPAIGN_ID

คําขอต่อไปนี้มีการดำเนินการ 2 รายการ รายการแรกพยายามเปลี่ยนกลยุทธ์การเสนอราคาของแคมเปญที่ระบุ และรายการถัดไปพยายามนําแคมเปญที่มีรหัสไม่ถูกต้องออก เนื่องจากการดำเนินการที่ 2 ทำให้เกิดข้อผิดพลาด (รหัสแคมเปญไม่ถูกต้อง) และเนื่องจากมีการตั้งค่า 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 โปรดทราบว่า URL ต้องใช้รหัสบัญชีดูแลจัดการแทนรหัสบัญชีลูกค้า ระบบจะสร้างบัญชีลูกค้าใหม่ภายใต้บัญชีดูแลจัดการ

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

แสดงรายการบัญชีที่เข้าถึงได้

ใช้คําขอ GET ไปยังเมธอด listAccessibleCustomers ง่ายๆ เพื่อรับรายการบัญชี 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 มาตรฐานหรือการเข้ารหัส Base64 ที่ปลอดภัยสำหรับ URL ไม่ว่าจะมีการเติมหรือไม่ก็ตาม

ตัวอย่างนี้เข้ารหัส GIF 1 พิกเซลเพื่อให้ตัวอย่างสั้นกระชับ ในทางปฏิบัติแล้ว ข้อมูลในdataจะมีขนาดใหญ่กว่ามาก

ใช้ยูทิลิตีบรรทัดคำสั่ง base64 (เป็นส่วนหนึ่งของยูทิลิตีหลักของ GNU) เพื่อเข้ารหัสรูปภาพ GIF 1 พิกเซล

base64 1pixel.gif

ค่าที่เข้ารหัส Base64 จะระบุเป็นแอตทริบิวต์ data ในคําขอ API

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