กลายพันธุ์

สคริปต์ Google Ads รองรับการเปลี่ยนแปลงทั่วไปที่มีใน Google Ads API การดำเนินการส่วนใหญ่ที่ทำได้จาก GoogleAdsService.mutate สามารถทำได้ในสคริปต์ Google Ads เช่นกัน ซึ่งรวมถึงการสร้างและการจัดการแคมเปญ

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

แหล่งข้อมูลพื้นฐานบางส่วนเกี่ยวกับอินเทอร์เฟซ REST ของ Google Ads API ที่คุณควรทำความคุ้นเคยก่อนที่จะอ่านคู่มือนี้ต่อมีดังนี้

ตัวอย่างพื้นฐาน

ลองดูตัวอย่างพื้นฐานต่อไปนี้ซึ่งสร้างงบประมาณแคมเปญเพื่อสาธิตฟังก์ชันการทำงาน

const budgetResult = AdsApp.mutate({
    campaignBudgetOperation: {
      create: {
        amountMicros: 10000000,
        explicitlyShared: false
      }
    }
  });

การเรียกใช้ AdsApp.mutate จะใช้ออบเจ็กต์ JSON ที่แสดงถึง MutateOperation รายการเดียว ภายในออบเจ็กต์นี้ คุณต้องระบุประเภทการดำเนินการที่ต้องการทำ ซึ่งในกรณีนี้คือ campaignBudgetOperation จากนั้นระบุ create, remove หรือทั้ง update และ updateMask ช่องที่เฉพาะเจาะจงภายใน create และ update ขึ้นอยู่กับประเภททรัพยากรที่คุณใช้งานอยู่

สร้างการดำเนินการ

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

หรือจะลองสร้างการดำเนินการแบบไดนามิกโดยใช้ฟีเจอร์ "ลองใช้" สำหรับงบประมาณแคมเปญก็ได้ ซึ่งจะช่วยให้คุณสร้างเนื้อหาคำขอแบบไดนามิกได้โดยการเลือกช่องที่ต้องการเพิ่ม จากนั้นคุณสามารถดึงเนื้อหาของการดำเนินการจากผลลัพธ์ที่สร้างขึ้นและเพิ่มลงในการเรียก mutate หลังจากระบุประเภทการดำเนินการ

ประเภทการดำเนินการ

สร้าง

ระบุ create ในการดำเนินการ โดยส่งผ่านการแสดงออบเจ็กต์ของทรัพยากรที่ต้องการสร้าง

ดูตัวอย่างการดำเนินการ create ได้จากข้อมูลโค้ดที่ระบุไว้ก่อนหน้านี้

นำออก

ระบุ remove ในการดำเนินการ โดยส่งชื่อทรัพยากรของทรัพยากรที่ต้องการนำออก เช่น

AdsApp.mutate({
    adGroupOperation: {
        remove: "customers/[CUSTOMER_ID]/adGroups/[AD_GROUP_ID]"
    }
});

หากไม่ทราบชื่อทรัพยากรของเอนทิตี คุณสามารถดึงข้อมูลได้โดยใช้คำขอ Adsapp.search

อัปเดต

ระบุ update ในการดำเนินการ โดยส่งออบเจ็กต์ที่มีชื่อทรัพยากรที่ระบุเพื่อให้ระบบระบุออบเจ็กต์ที่คุณต้องการอัปเดตได้ นอกจากนี้ ให้กรอกข้อมูลในช่องที่ต้องการอัปเดตค่า และระบุ updateMask ซึ่งจะระบุช่องที่คุณวางแผนจะเปลี่ยนแปลงในคำขอนี้อย่างชัดเจน อย่าใส่ชื่อทรัพยากรในมาสก์การอัปเดต

ตัวอย่างการดำเนินการ update

const campaignResult = AdsApp.mutate({
    campaignOperation: {
        update: {
            resourceName: "customers/[CUSTOMER_ID]/campaigns/[CAMPAIGN_ID]",
            status: "PAUSED",
            name: "[Paused] My campaign"
        },
        updateMask: "name,status"
    }
});

จัดการผลลัพธ์

ไม่ว่าจะเป็นการดำเนินการประเภทใด ค่าที่แสดงผลจะเป็น MutateResult คุณสามารถใช้ชื่อทรัพยากรที่แสดงผลเพื่อค้นหาสถานะปัจจุบันของทรัพยากรหลังจากการเปลี่ยนแปลง และตรวจสอบว่าการดำเนินการสำเร็จหรือไม่ หรือมีข้อผิดพลาดใดเกิดขึ้นหรือไม่

ตัวอย่างต่อไปนี้แสดงขั้นตอนพื้นฐานในการตรวจสอบผลลัพธ์และพิมพ์ข้อมูลบางอย่างลงในบันทึก

const result = AdsApp.mutate( ... );
if (result.isSuccessful()) {
    console.log(`Resource ${result.getResourceName()} successfully mutated.`);
} else {
    console.log("Errors encountered:");
    for (const error of result.getErrorMessages()) {
        console.log(error);
    }
}

การดำเนินการหลายรายการ

สคริปต์ Google Ads ยังรองรับการเปลี่ยนแปลงการดำเนินการหลายรายการในคำขอเดียวด้วยเมธอด AdsApp.mutateAll คุณสามารถสร้างเอนทิตีที่ขึ้นอยู่กับเอนทิตีอื่นได้ เช่น ลำดับชั้นของแคมเปญแบบเต็มในคำขอเดียว คุณเลือกที่จะทำให้ชุดการดำเนินการทั้งหมดเป็นแบบอะตอมได้ ดังนั้นหากการดำเนินการใดล้มเหลว ระบบจะไม่ดำเนินการใดๆ เลย

ค่าที่แสดงผลคืออาร์เรย์ของออบเจ็กต์ MutateResult โดยออบเจ็กต์ 1 รายการจะสอดคล้องกับการดำเนินการ 1 รายการที่คุณระบุ และอยู่ในลำดับเดียวกับการดำเนินการเริ่มต้น

ฟีเจอร์นี้ทำงานเหมือนกับฟีเจอร์ Google Ads API ดังนั้นโปรดดูคำอธิบายทั้งหมดเกี่ยวกับรหัสชั่วคราวและข้อควรพิจารณาอื่นๆ ในคู่มือแนวทางปฏิบัติแนะนำสำหรับ Google Ads API โปรดทราบว่าคู่มือนี้ใช้ snake_case เพื่อแสดงชื่อช่อง ส่วนเอกสารประกอบของสคริปต์ Google Ads จะใช้ lowerCamelCase ทั้ง 2 กรณีนี้ใช้ได้ในสคริปต์ Google Ads คุณจึงคัดลอกโค้ดจากคู่มือดังกล่าวได้โดยตรง

หากต้องการดำเนินการหลายอย่างในคำขอเดียว ให้รวบรวมการดำเนินการทั้งหมดไว้ในอาร์เรย์ แล้วเรียกใช้ AdsApp.mutateAll การเรียก mutateAll จะใช้อาร์เรย์ของการดำเนินการเป็นอาร์กิวเมนต์แรก และอาร์กิวเมนต์ที่ 2 ของตัวเลือก (ไม่บังคับ) ซึ่งรวมถึงรายการต่อไปนี้

  • apiVersion: คุณสามารถระบุเวอร์ชัน API ที่กำหนดเอง เช่น V26 หากต้องการใช้เวอร์ชันอื่นนอกเหนือจากค่าเริ่มต้นของสคริปต์ คุณสามารถใช้เวอร์ชันใดก็ได้ที่เผยแพร่ต่อสาธารณะในขณะนั้น
  • partialFailure: ช่องนี้มีค่าเริ่มต้นเป็น true หากตั้งค่าเป็น true ระบบจะดำเนินการที่ถูกต้องและการดำเนินการที่ล้มเหลวจะแสดงข้อผิดพลาด หากตั้งค่าเป็น false แล้วมีการดำเนินการใดล้มเหลว ระบบจะไม่ดำเนินการใดๆ ซึ่งจะทำให้ชุดการดำเนินการนี้เป็นแบบอะตอมมิกอย่างมีประสิทธิภาพ

ต่อไปนี้เป็นตัวอย่างที่มีการดำเนินการหลายอย่างซึ่งสร้างงบประมาณแคมเปญ แคมเปญ และกลุ่มโฆษณาในคำขอแบบอะตอม

const operations = [];
const customerId = 'INSERT_CUSTOMER_ID_HERE';
const budgetId = `customers/${customerId}/campaignBudgets/-1`;
const campaignId = `customers/${customerId}/campaigns/-2`;
operations.push({
    campaignBudgetOperation: {
      create: {
        resourceName: budgetId,
        amountMicros: 10000000,
        explicitlyShared: false
      }
    }
  });
operations.push({
    campaignOperation: {
      create: {
        resourceName: campaignId,
        name: 'New Campaign ' + new Date(),
        advertisingChannelType: 'SEARCH',
        manualCpc: {},
        campaignBudget: budgetId,
        advertisingChannelType: 'DISPLAY',
        networkSettings: {
          targetContentNetwork: true
        }
      }
    }
  });
operations.push({
    adGroupOperation: {
      create: {
        campaign: campaignId,
        name: 'New AdGroup ' + new Date(),
        optimizedTargetingEnabled: true
      }
    }
  });
const results = AdsApp.mutateAll(
    operations, {partialFailure: false});