การสร้างและการใช้ชิ้นงาน

คุณต้องสร้างชิ้นงานส่วนใหญ่โดยใช้ AssetService ก่อนจึงจะใช้ในโฆษณาได้ ประเภท TextAsset เป็นข้อยกเว้นเนื่องจากสร้างขึ้นในบรรทัดระหว่างการสร้างโฆษณา ส่วนประเภทอื่นๆ ทั้งหมดต้องอัปโหลดไปยังบัญชี Google Ads ก่อนจึงจะใช้งานได้

ระดับการเชื่อมโยงชิ้นงาน

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

  • CustomerAsset: สําหรับชิ้นงานที่ลิงก์ที่ระดับบัญชี
  • CampaignAsset: สำหรับชิ้นงานที่ลิงก์กับแคมเปญที่เฉพาะเจาะจง
  • AdGroupAsset: สำหรับชิ้นงานที่ลิงก์กับกลุ่มโฆษณาที่เฉพาะเจาะจง
  • AssetGroupAsset: สําหรับชิ้นงานที่ลิงก์กับกลุ่มชิ้นงานภายในแคมเปญ Performance Max

บริการและแหล่งข้อมูลที่เฉพาะเจาะจงที่จะใช้จะขึ้นอยู่กับสิ่งที่คุณพยายามทำให้สำเร็จ

ชิ้นงานของแบรนด์ Performance Max

แม้ว่าชิ้นงานจำนวนมากในแคมเปญ Performance Max จะลิงก์กับกลุ่มชิ้นงานโดยใช้ AssetGroupAsset แต่ชิ้นงานชื่อธุรกิจและโลโก้ธุรกิจเป็นข้อยกเว้นหากเปิดใช้หลักเกณฑ์การใช้แบรนด์สำหรับแคมเปญ ในกรณีนี้ ระบบจะลิงก์โดยตรงที่ระดับแคมเปญโดยใช้ CampaignAsset กับประเภทช่อง BUSINESS_NAME และ LOGO ตามลำดับ หากปิดใช้หลักเกณฑ์การใช้แบรนด์สำหรับแคมเปญ คุณต้องแนบชิ้นงานเหล่านี้โดยใช้ AssetGroupAsset ดูรายละเอียดเพิ่มเติมได้ที่ชิ้นงานใน Performance Max

สร้างเนื้อหา

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

ประเด็นสำคัญ: AssetService รองรับการดำเนินการ create และ update สำหรับชิ้นงานหลายประเภท (เช่น ไซต์ลิงก์ ข้อความไฮไลต์ หรือโปรโมชัน) ขณะที่ชิ้นงานที่เปลี่ยนแปลงไม่ได้ เช่น TextAsset และ ImageAsset จะแก้ไขไม่ได้เมื่ออัปโหลดไปยังบัญชี Google Ads แล้ว คุณต้องใช้การดำเนินการระดับโฆษณาหรือระดับเอนทิตีเพื่อจัดการการเชื่อมโยงระหว่างชิ้นงานแต่ละรายการกับโฆษณาหรือแคมเปญ

ตัวอย่างต่อไปนี้แสดงวิธีสร้างชิ้นงานรูปภาพใหม่จาก URL ของข้อมูลรูปภาพดิบ

Java

private void runExample(GoogleAdsClient googleAdsClient, long customerId) throws IOException {
  byte[] imageData = ByteStreams.toByteArray(new URL(IMAGE_URL).openStream());

  // Create the image asset.
  ImageAsset imageAsset = ImageAsset.newBuilder().setData(ByteString.copyFrom(imageData)).build();

  // Creates an asset.
  Asset asset =
      Asset.newBuilder()
          // Provide a unique friendly name to identify your asset.
          // When there is an existing image asset with the same content but a different name, the
          // new name will be dropped silently.
          .setName("Marketing Image")
          .setType(AssetType.IMAGE)
          .setImageAsset(imageAsset)
          .build();

  // Creates the operation.
  AssetOperation operation = AssetOperation.newBuilder().setCreate(asset).build();

  // Creates the service client.
  try (AssetServiceClient assetServiceClient =
      googleAdsClient.getLatestVersion().createAssetServiceClient()) {
    // Issues a mutate request to add the asset.
    MutateAssetsResponse response =
        assetServiceClient.mutateAssets(Long.toString(customerId), ImmutableList.of(operation));
    // Prints the result.
    System.out.printf(
        "The image asset with resource name '%s' was created.%n",
        response.getResults(0).getResourceName());
  }
}
      

C#

public void Run(GoogleAdsClient client, long customerId)
{
    // Get the AssetServiceClient.
    AssetServiceClient assetService =
        client.GetService(Services.V26.AssetService);

    // Creates an image content.
    byte[] imageContent = MediaUtilities.GetAssetDataFromUrl(IMAGE_URL, client.Config);

    // Creates an image asset.
    ImageAsset imageAsset = new ImageAsset()
    {
        Data = ByteString.CopyFrom(imageContent),
        FileSize = imageContent.Length,
        MimeType = MimeType.ImageJpeg,
        FullSize = new ImageDimension()
        {
            HeightPixels = 315,
            WidthPixels = 600,
            Url = IMAGE_URL
        }
    };

    // Creates an asset.
    Asset asset = new Asset()
    {
        // Optional: Provide a unique friendly name to identify your asset.
        // If you specify the name field, then both the asset name and the image being
        // uploaded should be unique, and should not match another ACTIVE asset in this
        // customer account.
        // Name = 'Jupiter Trip #' + ExampleUtilities.GetRandomString(),
        Type = AssetType.Image,
        ImageAsset = imageAsset,
        // Provide a unique friendly name to identify your asset.
        // When there is an existing image asset with the same content but a different
        // name, the new name will be dropped silently.
        Name = "Marketing Image"
    };

    // Creates an asset operation.
    AssetOperation operation = new AssetOperation()
    {
        Create = asset
    };

    try
    {
        // Issues a mutate request to add the asset.
        MutateAssetsResponse response =
            assetService.MutateAssets(customerId.ToString(), new[] { operation });

        // Displays the result.
        Console.WriteLine($"Image asset with resource name: " +
            $"'{response.Results.First().ResourceName}' is created.");
    }
    catch (GoogleAdsException e)
    {
        Console.WriteLine("Failure:");
        Console.WriteLine($"Message: {e.Message}");
        Console.WriteLine($"Failure: {e.Failure}");
        Console.WriteLine($"Request ID: {e.RequestId}");
        throw;
    }
}
      

PHP

    public static function runExample(GoogleAdsClient $googleAdsClient, int $customerId)
    {
        // Creates an image content.
        $imageContent = file_get_contents(self::IMAGE_URL);

        // Creates an asset.
        $asset = new Asset(
            [
            // Provide a unique friendly name to identify your asset.
            // When there is an existing image asset with the same content but a different
            // name, the new name will be dropped silently.
            'name' => 'Marketing Image',
            'type' => AssetType::IMAGE,
            'image_asset' => new ImageAsset(['data' => $imageContent])
            ]
        );

        // Creates an asset operation.
        $assetOperation = new AssetOperation();
        $assetOperation->setCreate($asset);

        // Issues a mutate request to add the asset.
        $assetServiceClient = $googleAdsClient->getAssetServiceClient();
        $response = $assetServiceClient->mutateAssets(
            MutateAssetsRequest::build(
                $customerId,
                [$assetOperation]
            )
        );

        if (!empty($response->getResults())) {
            // Prints the resource name of the added image asset.
            /**
 * @var MutateAssetResult $addedImageAsset
*/
            $addedImageAsset = $response->getResults()[0];
            printf(
                "The image asset with resource name '%s' was created.%s",
                $addedImageAsset->getResourceName(),
                PHP_EOL
            );
        } else {
            print 'No image asset was created.' . PHP_EOL;
        }
    }
      

Python

def main(client: GoogleAdsClient, customer_id: str) -> None:
    """Main method, to run this code example as a standalone application."""

    # Download image from URL
    url: str = "https://gaagl.page.link/Eit5"
    image_content: bytes = get_image_bytes_from_url(url)

    asset_service: AssetServiceClient = client.get_service("AssetService")
    asset_operation: AssetOperation = client.get_type("AssetOperation")
    asset: Asset = asset_operation.create
    asset.type_ = client.enums.AssetTypeEnum.IMAGE
    asset.image_asset.data = image_content
    asset.image_asset.file_size = len(image_content)
    asset.image_asset.mime_type = client.enums.MimeTypeEnum.IMAGE_JPEG
    # Use your favorite image library to determine dimensions
    asset.image_asset.full_size.height_pixels = 315
    asset.image_asset.full_size.width_pixels = 600
    asset.image_asset.full_size.url = url
    # Provide a unique friendly name to identify your asset.
    # When there is an existing image asset with the same content but a different
    # name, the new name will be dropped silently.
    asset.name = "Marketing Image"
    mutate_asset_response: MutateAssetsResponse = asset_service.mutate_assets(
        customer_id=customer_id, operations=[asset_operation]
    )
    print("Uploaded file(s):")
    row: MutateAssetResult
    for row in mutate_asset_response.results:
        print(f"\tResource name: {row.resource_name}")

      

Ruby

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

  url = 'https://gaagl.page.link/Eit5'
  image_data = open(url) { |f| f.read }

  # Create the operation for uploading the image asset.
  asset_operation = client.operation.create_resource.asset do |asset|
    asset.type = :IMAGE
    asset.image_asset = client.resource.image_asset do |image_asset|
      image_asset.data = image_data
      image_asset.file_size = image_data.length()
      image_asset.mime_type = :IMAGE_JPEG
      image_asset.full_size = client.resource.image_dimension do |dimension|
        dimension.height_pixels = 315
        dimension.width_pixels = 600
        dimension.url = url
      end
    end
    # Provide a unique friendly name to identify your asset.
    # When there is an existing image asset with the same content but a different
    # name, the new name will be dropped silently.
    asset.name = "Marketing Image"
  end

  # Upload the image asset.
  response = client.service.asset.mutate_assets(
    customer_id: customer_id,
    operations: [asset_operation],
  )

  puts "Uploaded image asset #{response.results.first.resource_name}."
end
      

Perl

sub upload_image_asset {
  my ($api_client, $customer_id) = @_;

  # Create an image content.
  my $image_content = get_base64_data_from_url(IMAGE_URL);

  # Create an asset.
  my $asset = Google::Ads::GoogleAds::V26::Resources::Asset->new({
      # Provide a unique friendly name to identify your asset.
      # When there is an existing image asset with the same content but a different
      # name, the new name will be dropped silently.
      name       => "Marketing Image",
      type       => IMAGE,
      imageAsset => Google::Ads::GoogleAds::V26::Common::ImageAsset->new({
          data => $image_content
        })});

  # Create an asset operation.
  my $asset_operation =
    Google::Ads::GoogleAds::V26::Services::AssetService::AssetOperation->new({
      create => $asset
    });

  # Issue a mutate request to add the asset.
  my $assets_response = $api_client->AssetService()->mutate({
      customerId => $customer_id,
      operations => [$asset_operation]});

  printf "The image asset with resource name '%s' was created.\n",
    $assets_response->{results}[0]{resourceName};

  return 1;
}
      

curl

หลังจากสร้างชิ้นงานแล้ว API จะแสดงผลออบเจ็กต์ MutateAssetResult ที่มีชื่อทรัพยากรของ ImageAsset ใหม่ ชื่อทรัพยากรนี้ใช้เพื่ออ้างอิง ImageAsset เมื่อสร้างโฆษณาตามองค์ประกอบชิ้นงาน

คุณสามารถเรียกดูรายการชิ้นงานที่มีอยู่และชื่อทรัพยากรได้โดยการค้นหา GoogleAdsService ดูรายละเอียดเพิ่มเติมได้ที่การดึงข้อมูลแอตทริบิวต์และเมตริกของชิ้นงาน

ติดตามการแลกรับข้อเสนอโปรโมชันภายนอก

ตั้งแต่เดือนv26เป็นต้นไป เมื่อสร้าง PromotionAsset คุณจะป้อนข้อมูลในช่อง promotion_asset.external_redeem_info ที่เปลี่ยนแปลงไม่ได้ (CREATE_ONLY) ของประเภท ExternalRedeemInfo เพื่อติดตามการแลกใช้โปรโมชันออฟไลน์ในระบบจุดขาย (POS) ของพาร์ทเนอร์ได้ หากบัญชีมีการผสานรวมการแลกสิทธิ์โปรโมชัน การผสานรวมดังกล่าวจะเป็นตัวกำหนดตัวแปร partner_promotion_id ที่ API ยอมรับ เนื่องจากช่องเหล่านี้ไม่สามารถเปลี่ยนแปลงได้ คุณจึงตั้งค่าได้เฉพาะเมื่อสร้าง PromotionAsset เท่านั้น การพยายามแก้ไขหรือล้าง external_redeem_info หรือช่องย่อยใดๆ ในการดำเนินการ update จะแสดงข้อผิดพลาด RequestError.IMMUTABLE_FIELD

ข้อความ ExternalRedeemInfo มีช่องที่เปลี่ยนแปลงไม่ได้ (CREATE_ONLY) ต่อไปนี้

  • code_type (ต้องระบุ): ค่า enum OfflinePromotionCodeType ที่ระบุว่ารหัสโปรโมชันสามารถแลกสิทธิ์ได้ครั้งเดียว (SINGLE_USE_PROMOTION_CODE) หรือหลายครั้ง (MULTI_USE_PROMOTION_CODE)
  • code_source (ต้องระบุ): ค่า enum OfflinePromotionCodeSource ที่ระบุว่าผู้ลงโฆษณาเป็นผู้อัปโหลดรหัสโปรโมชัน (CUSTOMER_UPLOADED) หรือ Google เป็นผู้สร้าง (GOOGLE_GENERATED) เมื่อคุณตั้งค่าฟิลด์นี้เป็น GOOGLE_GENERATED คุณต้องระบุฟิลด์ partner_promotion_id (ไม่เช่นนั้น API จะแสดงข้อผิดพลาด FieldError.REQUIRED) เมื่อตั้งค่าช่องนี้เป็น CUSTOMER_UPLOADED ช่อง partner_promotion_id จะเป็นช่องที่ไม่บังคับ
  • partner_promotion_id: ข้อความ ExternalPartnerId ที่ระบุโปรโมชันในระบบ POS ของพาร์ทเนอร์ ยืนยันรูปแบบตัวระบุที่การผสานรวม POS ของคุณใช้ จากนั้นตั้งค่าตัวแปร oneof รายการใดรายการหนึ่งต่อไปนี้

    • int_value (int64): ตัวระบุจำนวนเต็มบวก (1 ขึ้นไป) ค่าที่น้อยกว่าหรือเท่ากับ 0 จะแสดงข้อผิดพลาด RangeError.TOO_LOW
    • string_value (string): ตัวระบุสตริงที่มีอักขระที่พิมพ์ได้ 1-50 ตัว API จะตัดช่องว่างนำหน้าและต่อท้ายออกก่อนการตรวจสอบ ดังนั้นสตริงที่ว่างเปล่าหรือมีเฉพาะช่องว่างจะแสดงข้อผิดพลาด StringLengthError.TOO_SHORT ค่าที่ตัดแล้วซึ่งมีความยาวมากกว่า 50 อักขระจะแสดงข้อผิดพลาด StringLengthError.TOO_LONG และค่าที่มีอักขระที่พิมพ์ไม่ได้จะแสดงข้อผิดพลาด StringFormatError.ILLEGAL_CHARS

    หากการผสานรวมโปรโมชันของบัญชีต้องใช้ตัวแปร partner_promotion_id ที่เฉพาะเจาะจง และคุณตั้งค่าตัวแปรอื่น (int_value แทน string_value หรือ string_value แทน int_value) API จะแสดงข้อผิดพลาด AssetError.PARTNER_PROMOTION_ID_TYPE_INCOMPATIBLE

คุณสามารถเลือก กรอง (WHERE) และจัดเรียง (ORDER BY) ตามช่อง Leaf ทั้ง 4 ช่องในรายงาน asset ได้ เนื่องจากช่อง partner_promotion_id เป็น oneof ระบบจะป้อนข้อมูลในช่อง int_value หรือ string_value อย่างมาก 1 ช่องสำหรับชิ้นงานโปรโมชันที่ระบุ และตัวแปรที่ไม่ได้ตั้งค่าจะแสดงผลเป็น null:

SELECT
  asset.resource_name,
  asset.id,
  asset.name,
  asset.promotion_asset.promotion_target,
  asset.promotion_asset.external_redeem_info.code_source,
  asset.promotion_asset.external_redeem_info.code_type,
  asset.promotion_asset.external_redeem_info.partner_promotion_id.int_value,
  asset.promotion_asset.external_redeem_info.partner_promotion_id.string_value
FROM asset
WHERE asset.type = 'PROMOTION'

ใช้ชิ้นงานในโฆษณา

โฆษณาและแคมเปญประเภทต่างๆ รองรับชิ้นงานประเภทต่างๆ ดังที่แสดงในตารางต่อไปนี้

ประเภทโฆษณา/แคมเปญและประเภทชิ้นงานที่รองรับ
AppAd
TextAsset
ImageAsset
YoutubeVideoAsset
MediaBundleAsset
AppEngagementAd TextAsset
ImageAsset
YoutubeVideoAsset
Demand Gen TextAsset
ImageAsset
YoutubeVideoAsset
DemandGenCarouselCardAsset
DisplayUploadAd MediaBundleAsset
แคมเปญ Performance Max TextAsset
ImageAsset
MediaBundleAsset
YoutubeVideoAsset
CallToActionAsset
ResponsiveDisplayAd TextAsset
ImageAsset
YoutubeVideoAsset
ResponsiveSearchAd TextAsset (สำหรับบรรทัดแรกและคำอธิบายในครีเอทีฟโฆษณา)

คุณสามารถลิงก์ประเภทชิ้นงานต่อไปนี้ที่ระดับลูกค้า แคมเปญ หรือกลุ่มโฆษณาโดยใช้ CustomerAsset, CampaignAsset หรือ AdGroupAsset ตามลำดับ เพื่อแสดงร่วมกับโฆษณาเป็นส่วนขยายได้
  • SitelinkAsset
  • CalloutAsset
  • StructuredSnippetAsset
  • CallAsset
  • LeadFormAsset
  • PriceAsset
  • PromotionAsset
  • MobileAppAsset
  • ImageAsset (สำหรับส่วนขยายรูปภาพ)
  • HotelCalloutAsset
  • BusinessMessageAsset

หมายเหตุ: ชิ้นงานสถานที่ตั้งและชิ้นงานสถานที่ตั้งของแอฟฟิลิเอตได้รับการจัดการแตกต่างกัน ซึ่งมักจะผ่าน CustomerAssetSet หรือ CampaignAssetSet ดูรายละเอียดได้ที่ชิ้นงานสถานที่ตั้ง

โฆษณาแต่ละประเภทมีช่องสําหรับตั้งค่าชิ้นงานประเภทต่างๆ ที่รองรับ สําหรับ TextAsset ระบบจะสร้างชิ้นงานสตริงใหม่ในบรรทัดภายในโฆษณา สําหรับชิ้นงานประเภทอื่นๆ ทั้งหมด ระบบจะเพิ่มชิ้นงานที่มีอยู่ลงในโฆษณาโดยอ้างอิงชื่อทรัพยากร

ตัวอย่างต่อไปนี้แสดงการเพิ่ม TextAsset และ ImageAsset ลงใน ResponsiveDisplayAd ระบบจะสร้าง TextAsset ในบรรทัดเป็นบรรทัดแรกและคำอธิบายของโฆษณา ImageAsset จะระบุด้วยชื่อทรัพยากร

Java

private void createAd(
    GoogleAdsClient googleAdsClient, long customerId, String adGroupResourceName)
    throws IOException {
  String marketingImageUrl = "https://gaagl.page.link/Eit5";
  String marketingImageName = "Marketing Image";
  String marketingImageResourceName =
      uploadAsset(googleAdsClient, customerId, marketingImageUrl, marketingImageName);
  String squareMarketingImageName = "Square Marketing Image";
  String squareMarketingImageUrl = "https://gaagl.page.link/bjYi";
  String squareMarketingImageResourceName =
      uploadAsset(googleAdsClient, customerId, squareMarketingImageUrl, squareMarketingImageName);

  // Creates the responsive display ad info object.
  ResponsiveDisplayAdInfo responsiveDisplayAdInfo =
      ResponsiveDisplayAdInfo.newBuilder()
          .addMarketingImages(
              AdImageAsset.newBuilder().setAsset(marketingImageResourceName).build())
          .addSquareMarketingImages(
              AdImageAsset.newBuilder().setAsset(squareMarketingImageResourceName).build())
          .addHeadlines(AdTextAsset.newBuilder().setText("Travel").build())
          .setLongHeadline(AdTextAsset.newBuilder().setText("Travel the World").build())
          .addDescriptions(AdTextAsset.newBuilder().setText("Take to the air!").build())
          .setBusinessName("Interplanetary Cruises")
          // Optional: Call to action text.
          // Valid texts: https://support.google.com/adwords/answer/7005917
          .setCallToActionText("Apply Now")
          // Optional: Sets the ad colors.
          .setMainColor("#0000ff")
          .setAccentColor("#ffff00")
          // Optional: Sets to false to strictly render the ad using the colors.
          .setAllowFlexibleColor(false)
          // Optional: Sets the format setting that the ad will be served in.
          .setFormatSetting(DisplayAdFormatSetting.NON_NATIVE)
          // Optional: Creates a logo image and sets it to the ad.
          /*
          .addLogoImages(
              AdImageAsset.newBuilder()
                  .setAsset(StringValue.of("INSERT_LOGO_IMAGE_RESOURCE_NAME_HERE"))
                  .build())
          */
          // Optional: Creates a square logo image and sets it to the ad.
          /*
          .addSquareLogoImages(
              AdImageAsset.newBuilder()
                  .setAsset(StringValue.of("INSERT_SQUARE_LOGO_IMAGE_RESOURCE_NAME_HERE"))
                  .build())
          */
          .build();

  // Creates the ad.
  Ad ad =
      Ad.newBuilder()
          .setResponsiveDisplayAd(responsiveDisplayAdInfo)
          .addFinalUrls("http://www.example.com/")
          .build();

  // Creates the ad group ad.
  AdGroupAd adGroupAd = AdGroupAd.newBuilder().setAdGroup(adGroupResourceName).setAd(ad).build();

  // Creates the ad group ad operation.
  AdGroupAdOperation operation = AdGroupAdOperation.newBuilder().setCreate(adGroupAd).build();

  // Creates the ad group ad service client.
  try (AdGroupAdServiceClient adGroupAdServiceClient =
      googleAdsClient.getLatestVersion().createAdGroupAdServiceClient()) {
    // Adds the ad group ad.
    MutateAdGroupAdsResponse response =
        adGroupAdServiceClient.mutateAdGroupAds(
            Long.toString(customerId), ImmutableList.of(operation));
    System.out.printf(
        "Created ad group ad with resource name '%s'.%n",
        response.getResults(0).getResourceName());
  }
}

      

C#

private void CreateAd(GoogleAdsClient client, long customerId, string adGroupResourceName)
{
    // Creates the ad group ad service client.
    AdGroupAdServiceClient adGroupAdServiceClient =
        client.GetService(Services.V26.AdGroupAdService);

    string marketingImageUrl = "https://gaagl.page.link/Eit5";
    string marketingImageName = "Marketing Image";
    string marketingImageResourceName =
        UploadAsset(client, customerId, marketingImageUrl, marketingImageName);
    string squareMarketingImageName = "Square Marketing Image";
    string squareMarketingImageUrl = "https://gaagl.page.link/bjYi";
    string squareMarketingImageResourceName =
        UploadAsset(client, customerId, squareMarketingImageUrl, squareMarketingImageName);

    // Creates the responsive display ad info object.
    ResponsiveDisplayAdInfo responsiveDisplayAdInfo = new ResponsiveDisplayAdInfo()
    {
        MarketingImages =
        {
            new AdImageAsset()
            {
                Asset = marketingImageResourceName
            }
        },
        SquareMarketingImages =
        {
            new AdImageAsset()
            {
                Asset = squareMarketingImageResourceName
            }
        },
        Headlines =
        {
            new AdTextAsset()
            {
                Text = "Travel"
            }
        },
        LongHeadline = new AdTextAsset()
        {
            Text = "Travel the World"
        },
        Descriptions =
        {
            new AdTextAsset()
            {
                Text = "Take to the air!"
            }
        },
        BusinessName = "Interplanetary Cruises",
        // Optional: Call to action text.
        // Valid texts: https://support.google.com/adwords/answer/7005917
        CallToActionText = "Apply Now",
        // Optional: Sets the ad colors.
        MainColor = "#0000ff",
        AccentColor = "#ffff00",
        // Optional: Sets to false to strictly render the ad using the colors.
        AllowFlexibleColor = false,
        // Optional: Sets the format setting that the ad will be served in.
        FormatSetting = DisplayAdFormatSetting.NonNative,
        // Optional: Creates a logo image and sets it to the ad.
        /*
            LogoImages = { new AdImageAsset()
            {
                Asset = "INSERT_LOGO_IMAGE_RESOURCE_NAME_HERE"
            }}
        */
        // Optional: Creates a square logo image and sets it to the ad.
        /*
            SquareLogoImages = { new AdImageAsset()
            {
                Asset = "INSERT_SQUARE_LOGO_IMAGE_RESOURCE_NAME_HERE"
            }}
        */
    };

    // Creates the ad.
    Ad ad = new Ad()
    {
        ResponsiveDisplayAd = responsiveDisplayAdInfo,
        FinalUrls = { "http://www.example.com/" }
    };

    // Creates the ad group ad.
    AdGroupAd adGroupAd = new AdGroupAd()
    {
        AdGroup = adGroupResourceName,
        Ad = ad
    };

    // Creates the ad group ad operation.
    AdGroupAdOperation operation = new AdGroupAdOperation()
    {
        Create = adGroupAd
    };

    // Adds the ad group ad.
    MutateAdGroupAdsResponse response = adGroupAdServiceClient.MutateAdGroupAds
        (customerId.ToString(), new[] { operation });
    Console.WriteLine("Created ad group ad with resource name " +
                      $"'{response.Results.First().ResourceName}'.");
}
      

PHP

    private static function createAd(
        GoogleAdsClient $googleAdsClient,
        int $customerId,
        string $adGroupResourceName
    ) {
        $marketingImageResourceName = self::uploadAsset(
            $googleAdsClient,
            $customerId,
            'https://gaagl.page.link/Eit5',
            'Marketing Image'
        );
        $squareMarketingImageResourceName = self::uploadAsset(
            $googleAdsClient,
            $customerId,
            'https://gaagl.page.link/bjYi',
            'Square Marketing Image'
        );

        // Creates the responsive display ad info object.
        $responsiveDisplayAdInfo = new ResponsiveDisplayAdInfo(
            [
            'marketing_images' => [new AdImageAsset(['asset' => $marketingImageResourceName])],
            'square_marketing_images' => [new AdImageAsset(
                [
                'asset' => $squareMarketingImageResourceName
                ]
            )],
            'headlines' => [new AdTextAsset(['text' => 'Travel'])],
            'long_headline' => new AdTextAsset(['text' => 'Travel the World']),
            'descriptions' => [new AdTextAsset(['text' => 'Take to the air!'])],
            'business_name' => 'Interplanetary Cruises',
            // Optional: Call to action text.
            // Valid texts: https://support.google.com/google-ads/answer/7005917
            'call_to_action_text' => 'Apply Now',
            // Optional: Sets the ad colors.
            'main_color' => '#0000ff',
            'accent_color' => '#ffff00',
            // Optional: Sets to false to strictly render the ad using the colors.
            'allow_flexible_color' => false,
            // Optional: Sets the format setting that the ad will be served in.
            'format_setting' => DisplayAdFormatSetting::NON_NATIVE
            // Optional: Creates a logo image and sets it to the ad.
            // 'logo_images' => [new AdImageAsset([
            //     'asset' => 'INSERT_LOGO_IMAGE_RESOURCE_NAME_HERE'
            // ])],
            // Optional: Creates a square logo image and sets it to the ad.
            // 'square_logo_images' => [new AdImageAsset([
            //     'asset' => 'INSERT_SQUARE_LOGO_IMAGE_RESOURCE_NAME_HERE'
            // ])]
            ]
        );

        // Creates a new ad group ad.
        $adGroupAd = new AdGroupAd(
            [
            'ad' => new Ad(
                [
                'responsive_display_ad' => $responsiveDisplayAdInfo,
                'final_urls' => ['http://www.example.com/']
                ]
            ),
            'ad_group' => $adGroupResourceName
            ]
        );

        // Creates an ad group ad operation.
        $adGroupAdOperation = new AdGroupAdOperation();
        $adGroupAdOperation->setCreate($adGroupAd);

        // Issues a mutate request to add the ad group ad.
        $adGroupAdServiceClient = $googleAdsClient->getAdGroupAdServiceClient();
        $response = $adGroupAdServiceClient->mutateAdGroupAds(
            MutateAdGroupAdsRequest::build($customerId, [$adGroupAdOperation])
        );

        /**
 * @var AdGroupAd $addedAdGroupAd
*/
        $addedAdGroupAd = $response->getResults()[0];
        printf(
            "Created ad group ad with resource name '%s'.%s",
            $addedAdGroupAd->getResourceName(),
            PHP_EOL
        );
    }
      

Python

def create_ad(
    client: GoogleAdsClient, customer_id: str, ad_group_resource_name: str
) -> None:
    """Creates the responsive display ad.

    Args:
        client: An initialized GoogleAds client.
        customer_id: The Google Ads customer ID.
        ad_group_resource_name: The resource name of the target ad group.
    """
    # Get the AdGroupAdService client.
    ad_group_ad_service: AdGroupAdServiceClient = client.get_service(
        "AdGroupAdService"
    )

    # Upload image assets for the ad.
    marketing_image_resource_name: str = upload_image_asset(
        client, customer_id, "https://gaagl.page.link/Eit5", "Marketing Image"
    )
    square_marketing_image_resource_name: str = upload_image_asset(
        client,
        customer_id,
        "https://gaagl.page.link/bjYi",
        "Square Marketing Image",
    )

    # Create the relevant asset objects for the ad.
    marketing_image: AdImageAsset = client.get_type("AdImageAsset")
    marketing_image.asset = marketing_image_resource_name
    square_marketing_image: AdImageAsset = client.get_type("AdImageAsset")
    square_marketing_image.asset = square_marketing_image_resource_name
    headline: AdTextAsset = client.get_type("AdTextAsset")
    headline.text = "Travel"
    description: AdTextAsset = client.get_type("AdTextAsset")
    description.text = "Take to the air!"

    # Create an ad group ad operation and set the ad group ad values.
    ad_group_ad_operation: AdGroupAdOperation = client.get_type(
        "AdGroupAdOperation"
    )
    ad_group_ad: AdGroupAd = ad_group_ad_operation.create
    ad_group_ad.ad_group = ad_group_resource_name
    ad_group_ad.ad.final_urls.append("http://www.example.com/")

    # Configure the responsive display ad info object.
    responsive_display_ad_info: ResponsiveDisplayAdInfo = (
        ad_group_ad.ad.responsive_display_ad
    )
    responsive_display_ad_info.marketing_images.append(marketing_image)
    responsive_display_ad_info.square_marketing_images.append(
        square_marketing_image
    )
    responsive_display_ad_info.headlines.append(headline)
    responsive_display_ad_info.long_headline.text = "Travel the World"
    responsive_display_ad_info.descriptions.append(description)
    responsive_display_ad_info.business_name = "Interplanetary Cruises"
    # Optional: Call to action text.
    # Valid texts: https://support.google.com/google-ads/answer/7005917
    responsive_display_ad_info.call_to_action_text = "Apply Now"
    # Optional: Set the ad colors.
    responsive_display_ad_info.main_color = "#0000ff"
    responsive_display_ad_info.accent_color = "#ffff00"
    # Optional: Set to false to strictly render the ad using the colors.
    responsive_display_ad_info.allow_flexible_color = False
    # Optional: Set the format setting that the ad will be served in.
    responsive_display_ad_info.format_setting = (
        client.enums.DisplayAdFormatSettingEnum.NON_NATIVE
    )
    # Optional: Create a logo image and set it to the ad.
    # logo_image = client.get_type("AdImageAsset")
    # logo_image.asset = "INSERT_LOGO_IMAGE_RESOURCE_NAME_HERE"
    # responsive_display_ad_info.logo_images.append(logo_image)
    # Optional: Create a square logo image and set it to the ad.
    # square_logo_image = client.get_type("AdImageAsset")
    # square_logo_image.asset = "INSERT_SQUARE_LOGO_IMAGE_RESOURCE_NAME_HERE"
    # responsive_display_ad_info.square_logo_images.append(square_logo_image)

    # Issue a mutate request to add the ad group ad.
    ad_group_ad_response: MutateAdGroupAdsResponse = (
        ad_group_ad_service.mutate_ad_group_ads(
            customer_id=customer_id, operations=[ad_group_ad_operation]
        )
    )
    print(
        "Created ad group ad with resource name "
        f"'{ad_group_ad_response.results[0].resource_name}'."
    )
      

Ruby

def create_ad(client, customer_id, ad_group_resource_name)
  marketing_image_url = "https://gaagl.page.link/Eit5"
  square_marketing_image_url = "https://gaagl.page.link/bjYi"
  marketing_image_asset_resource_name = upload_asset(
    client, customer_id, marketing_image_url, "Marketing Image"
  )
  square_marketing_image_asset_resource_name = upload_asset(
    client, customer_id, square_marketing_image_url, "Square Marketing Image"
  )

  # Creates an ad group ad operation.
  operation = client.operation.create_resource.ad_group_ad do |aga|
    aga.ad_group = ad_group_resource_name
    aga.status = :PAUSED
    aga.ad = client.resource.ad do |a|
      a.final_urls << "https://www.example.com"

      # Creates the responsive display ad info object.
      a.responsive_display_ad = client.resource.responsive_display_ad_info do |rda|
        rda.headlines << client.resource.ad_text_asset do |ata|
          ata.text = "Travel"
        end
        rda.long_headline = client.resource.ad_text_asset do |ata|
          ata.text = "Travel the World"
        end
        rda.descriptions << client.resource.ad_text_asset do |ata|
          ata.text = "Take to the air!"
        end
        rda.business_name = "Interplanetary Cruises"
        rda.marketing_images << client.resource.ad_image_asset do |aia|
          aia.asset = marketing_image_asset_resource_name
        end
        rda.square_marketing_images << client.resource.ad_image_asset do |aia|
          aia.asset = square_marketing_image_asset_resource_name
        end
        # Optional: Call to action text.
        # Valid texts: https://support.google.com/google-ads/answer/7005917
        rda.call_to_action_text = "Apply Now"
        # Optional: Sets the ad colors.
        rda.main_color = "#0000ff"
        rda.accent_color = "#ffff00"
        # Optional: Sets to false to strictly render the ad using the colors.
        rda.allow_flexible_color = false
        # Optional: Sets the format setting that the ad will be served in.
        rda.format_setting = :NON_NATIVE
        # Optional: Creates a logo image and sets it to the ad.
        # rda.logo_images << client.resource.ad_image_asset do |aia|
        #   aia.asset = "INSERT_LOGO_IMAGE_RESOURCE_NAME_HERE"
        # end
        # Optional: Creates a square logo image and sets it to the ad.
        # rda.square_logo_images << client.resource.ad_image_asset do |aia|
        #   aia.asset = "INSERT_SQUARE_LOGO_IMAGE_RESOURCE_NAME_HERE"
        # end
      end
    end
  end

  # Issues a mutate request to add the ad group ad.
  response = client.service.ad_group_ad.mutate_ad_group_ads(
    customer_id: customer_id,
    operations: [operation]
  )

  # Prints out some information about the newly created ad.
  resource_name = response.results.first.resource_name
  puts "Created ad group ad: #{resource_name}"

  resource_name
end
      

Perl

sub create_ad {
  my ($api_client, $customer_id, $ad_group_resource_name) = @_;

  my $marketing_image_resource_name = upload_asset(
    $api_client, $customer_id,
    "https://gaagl.page.link/Eit5",
    "Marketing Image"
  );

  my $square_marketing_image_resource_name = upload_asset(
    $api_client, $customer_id,
    "https://gaagl.page.link/bjYi",
    "Square Marketing Image"
  );

  # Create the responsive display ad info object.
  my $responsive_display_ad_info =
    Google::Ads::GoogleAds::V26::Common::ResponsiveDisplayAdInfo->new({
      marketingImages => [
        Google::Ads::GoogleAds::V26::Common::AdImageAsset->new({
            asset => $marketing_image_resource_name
          })
      ],
      squareMarketingImages => [
        Google::Ads::GoogleAds::V26::Common::AdImageAsset->new({
            asset => $square_marketing_image_resource_name
          })
      ],
      headlines => [
        Google::Ads::GoogleAds::V26::Common::AdTextAsset->new({
            text => "Travel"
          })
      ],
      longHeadline => Google::Ads::GoogleAds::V26::Common::AdTextAsset->new({
          text => "Travel the World"
        }
      ),
      descriptions => [
        Google::Ads::GoogleAds::V26::Common::AdTextAsset->new({
            text => "Take to the air!"
          })
      ],
      businessName => "Interplanetary Cruises",
      # Optional: Call to action text.
      # Valid texts: https://support.google.com/google-ads/answer/7005917
      callToActionText => "Apply Now",
      # Optional: Set the ad colors.
      mainColor   => "#0000ff",
      accentColor => "#ffff00",
      # Optional: Set to false to strictly render the ad using the colors.
      allowFlexibleColor => "false",
      # Optional: Set the format setting that the ad will be served in.
      formatSetting => NON_NATIVE,
      # Optional: Create a logo image and set it to the ad.
      # logoImages => [
      #   Google::Ads::GoogleAds::V26::Common::AdImageAsset->new({
      #       asset => "INSERT_LOGO_IMAGE_RESOURCE_NAME_HERE"
      #     })
      # ],
      # Optional: Create a square logo image and set it to the ad.
      # squareLogoImages => [
      #   Google::Ads::GoogleAds::V26::Common::AdImageAsset->new({
      #       asset => "INSERT_SQUARE_LOGO_IMAGE_RESOURCE_NAME_HERE"
      #     })
      # ]
    });

  # Create an ad group ad.
  my $ad_group_ad = Google::Ads::GoogleAds::V26::Resources::AdGroupAd->new({
      adGroup => $ad_group_resource_name,
      ad      => Google::Ads::GoogleAds::V26::Resources::Ad->new({
          responsiveDisplayAd => $responsive_display_ad_info,
          finalUrls           => ["http://www.example.com/"]})});

  # Create an ad group ad operation.
  my $ad_group_ad_operation =
    Google::Ads::GoogleAds::V26::Services::AdGroupAdService::AdGroupAdOperation
    ->new({create => $ad_group_ad});

  # Issue a mutate request to add the ad group ad.
  my $ad_group_ads_response = $api_client->AdGroupAdService()->mutate({
      customerId => $customer_id,
      operations => [$ad_group_ad_operation]});

  printf "Created ad group ad with resource name '%s'.\n",
    $ad_group_ads_response->{results}[0]{resourceName};
}
      

curl

คําแนะนําเกี่ยวกับชิ้นงาน

คำแนะนำช่วยปรับปรุงชิ้นงานได้ 2 วิธีดังนี้

  1. ผู้เชี่ยวชาญสามารถแนะนําชิ้นงานให้คุณได้ ซึ่งคุณสามารถเพิ่มลงในแคมเปญได้โดยโทรไปที่ RecommendationService.ApplyRecommendation เช่น คุณสามารถดึงข้อมูลคำแนะนำ CALLOUT_ASSET, SITELINK_ASSET, CALL_ASSET, LEAD_FORM_ASSET และ RESPONSIVE_SEARCH_AD_ASSET แล้วนำไปใช้เพื่อแนบชิ้นงานที่แนะนำกับแคมเปญ กลุ่มโฆษณา หรือโฆษณาที่เกี่ยวข้อง

  2. ซึ่งจะช่วยให้คุณระบุจุดที่สามารถอัปเดตชิ้นงานเพื่อปรับปรุงคุณภาพโดยรวมของโฆษณา Search ที่ปรับเปลี่ยนตามบริบทหรือแคมเปญ Performance Max ได้ เช่น คุณสามารถเรียกดูคำแนะนำ IMPROVE_PERFORMANCE_MAX_AD_STRENGTH เพื่อดูว่าควรปรับปรุงกลุ่มชิ้นงานใดเพื่อเพิ่มคุณภาพ

ดูข้อมูลเพิ่มเติมได้ในคู่มือคะแนนการเพิ่มประสิทธิภาพและคําแนะนํา