广告系列级转化目标

在效果最大化广告系列中,转化目标有助于引导 Google 的算法根据您选择的广告系列出价策略来优化广告投放和预算分配。您可以将一部分客户目标明确应用于效果最大化广告系列。如果您未明确为广告系列设置转化目标,系统会默认使用所有客户级转化目标。

如需为效果最大化广告系列设置广告系列转化目标,请按以下步骤操作:

  1. 检索所有 CustomerConversionGoals

    SELECT
      customer_conversion_goal.category,
      customer_conversion_goal.origin
    FROM customer_conversion_goal
    
  2. 将每个 CustomerConversionGoal 的副本创建为 CampaignConversionGoal 对象。如果您要为效果最大化广告系列应用目标(根据 categoryorigin 的唯一组合确定),请将 biddable 字段设置为 TRUE。否则,请将 biddable 设置为 FALSEbiddable 字段指定是否应使用 CampaignConversionGoal

  3. 发出 mutate 请求,使用更新后的 biddable 字段值更新所有 CampaignConversionGoals

    Java

    /** Retrieves the list of customer conversion goals. */
    private static List<CustomerConversionGoal> getCustomerConversionGoals(
        GoogleAdsClient googleAdsClient, long customerId) {
      String query =
          "SELECT customer_conversion_goal.category, customer_conversion_goal.origin "
              + "FROM customer_conversion_goal";
    
      List<CustomerConversionGoal> customerConversionGoals = new ArrayList<>();
      try (GoogleAdsServiceClient googleAdsServiceClient =
          googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
        // The number of conversion goals is typically less than 50, so we use
        // GoogleAdsService.search instead of search_stream.
        SearchPagedResponse response =
            googleAdsServiceClient.search(Long.toString(customerId), query);
        for (GoogleAdsRow googleAdsRow : response.iterateAll()) {
          customerConversionGoals.add(googleAdsRow.getCustomerConversionGoal());
        }
      }
    
      return customerConversionGoals;
    }
    
    /** Creates a list of MutateOperations that override customer conversion goals. */
    private static List<MutateOperation> createConversionGoalOperations(
        long customerId, List<CustomerConversionGoal> customerConversionGoals) {
      List<MutateOperation> mutateOperations = new ArrayList<>();
      // To override the customer conversion goals, we will change the
      // biddability of each of the customer conversion goals so that only
      // the desired conversion goal is biddable in this campaign.
      for (CustomerConversionGoal customerConversionGoal : customerConversionGoals) {
        ConversionActionCategory category = customerConversionGoal.getCategory();
        ConversionOrigin origin = customerConversionGoal.getOrigin();
        String campaignConversionGoalResourceName =
            ResourceNames.campaignConversionGoal(
                customerId, PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID, category, origin);
        CampaignConversionGoal.Builder campaignConversionGoalBuilder =
            CampaignConversionGoal.newBuilder().setResourceName(campaignConversionGoalResourceName);
        // Change the biddability for the campaign conversion goal.
        // Set biddability to True for the desired (category, origin).
        // Set biddability to False for all other conversion goals.
        // Note:
        //  1- It is assumed that this Conversion Action
        //     (category=PURCHASE, origin=WEBSITE) exists in this account.
        //  2- More than one goal can be biddable if desired. This example
        //     shows only one.
        if (category == ConversionActionCategory.PURCHASE && origin == ConversionOrigin.WEBSITE) {
          campaignConversionGoalBuilder.setBiddable(true);
        } else {
          campaignConversionGoalBuilder.setBiddable(false);
        }
        CampaignConversionGoal campaignConversionGoal = campaignConversionGoalBuilder.build();
        CampaignConversionGoalOperation campaignConversionGoalOperation =
            CampaignConversionGoalOperation.newBuilder()
                .setUpdate(campaignConversionGoal)
                .setUpdateMask(FieldMasks.allSetFieldsOf(campaignConversionGoal))
                .build();
        mutateOperations.add(
            MutateOperation.newBuilder()
                .setCampaignConversionGoalOperation(campaignConversionGoalOperation)
                .build());
      }
      return mutateOperations;
    }
    
          

    C#

    /// <summary>
    /// Creates a MutateOperation that links an asset to an asset group.
    /// </summary>
    /// <param name="fieldType">The field type of the asset to be linked.</param>
    /// <param name="assetGroupResourceName">The resource name of the asset group
    /// to link the asset to.</param>
    /// <param name="assetResourceName">The resource name of the text asset to be
    /// linked.</param>
    /// <returns>A MutateOperation that links an asset to an asset group.</returns>
    private MutateOperation CreateLinkAssetOperation(
        AssetFieldType fieldType,
        string assetGroupResourceName,
        string assetResourceName) => new MutateOperation()
        {
            AssetGroupAssetOperation = new AssetGroupAssetOperation()
            {
                Create = new AssetGroupAsset()
                {
                    FieldType = fieldType,
                    AssetGroup = assetGroupResourceName,
                    Asset = assetResourceName
                }
            }
        };
    
          

    PHP

    private static function getCustomerConversionGoals(
        GoogleAdsClient $googleAdsClient,
        int $customerId
    ): array {
        $customerConversionGoals = [];
        $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
        // Creates a query that retrieves all customer conversion goals.
        $query = 'SELECT customer_conversion_goal.category, customer_conversion_goal.origin ' .
            'FROM customer_conversion_goal';
        // The number of conversion goals is typically less than 50 so we use a search request
        // instead of search stream.
        $response = $googleAdsServiceClient->search(
            SearchGoogleAdsRequest::build($customerId, $query)->setPageSize(self::PAGE_SIZE)
        );
    
        // Iterates over all rows in all pages and builds the list of conversion goals.
        foreach ($response->iterateAllElements() as $googleAdsRow) {
            /** @var GoogleAdsRow $googleAdsRow */
            $customerConversionGoals[] = [
                'category' => $googleAdsRow->getCustomerConversionGoal()->getCategory(),
                'origin' => $googleAdsRow->getCustomerConversionGoal()->getOrigin()
            ];
        }
    
        return $customerConversionGoals;
    }
    
    /**
     * Creates a list of MutateOperations that override customer conversion goals.
     *
     * @param int $customerId the customer ID
     * @param array $customerConversionGoals the list of customer conversion goals that will be
     *      overridden
     * @return MutateOperation[] a list of MutateOperations that update campaign conversion goals
     */
    private static function createConversionGoalOperations(
        int $customerId,
        array $customerConversionGoals
    ): array {
        $operations = [];
    
        // To override the customer conversion goals, we will change the biddability of each of the
        // customer conversion goals so that only the desired conversion goal is biddable in this
        // campaign.
        foreach ($customerConversionGoals as $customerConversionGoal) {
            $campaignConversionGoal = new CampaignConversionGoal([
                'resource_name' => ResourceNames::forCampaignConversionGoal(
                    $customerId,
                    self::PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
                    ConversionActionCategory::name($customerConversionGoal['category']),
                    ConversionOrigin::name($customerConversionGoal['origin'])
                )
            ]);
            // Changes the biddability for the campaign conversion goal.
            // Sets biddability to true for the desired (category, origin).
            // Sets biddability to false for all other conversion goals.
            // Note:
            //  1- It is assumed that this Conversion Action
            //     (category=PURCHASE, origin=WEBSITE) exists in this account.
            //  2- More than one goal can be biddable if desired. This example
            //     shows only one.
            if (
                $customerConversionGoal["category"] === ConversionActionCategory::PURCHASE
                && $customerConversionGoal["origin"] === ConversionOrigin::WEBSITE
            ) {
                $campaignConversionGoal->setBiddable(true);
            } else {
                $campaignConversionGoal->setBiddable(false);
            }
    
            $operations[] = new MutateOperation([
                'campaign_conversion_goal_operation' => new CampaignConversionGoalOperation([
                    'update' => $campaignConversionGoal,
                    // Sets the update mask on the operation. Here the update mask will be a list
                    // of all the fields that were set on the update object.
                    'update_mask' => FieldMasks::allSetFieldsOf($campaignConversionGoal)
                ])
            ]);
        }
    
        return $operations;
    }
          

    Python

    def get_customer_conversion_goals(client, customer_id):
        """Retrieves the list of customer conversion goals.
    
        Args:
            client: an initialized GoogleAdsClient instance.
            customer_id: a client customer ID.
    
        Returns:
            a list of dicts containing the category and origin of customer
            conversion goals.
        """
        ga_service = client.get_service("GoogleAdsService")
        customer_conversion_goals = []
        query = """
                SELECT
                  customer_conversion_goal.category,
                  customer_conversion_goal.origin
                FROM customer_conversion_goal
                """
        # The number of conversion goals is typically less than 50 so we use
        # GoogleAdsService.search instead of search_stream.
        search_request = client.get_type("SearchGoogleAdsRequest")
        search_request.customer_id = customer_id
        search_request.query = query
        search_request.page_size = 10000
        results = ga_service.search(request=search_request)
    
        # Iterate over the results and build the list of conversion goals.
        for row in results:
            customer_conversion_goals.append(
                {
                    "category": row.customer_conversion_goal.category,
                    "origin": row.customer_conversion_goal.origin,
                }
            )
        return customer_conversion_goals
    
    
    def create_conversion_goal_operations(
        client,
        customer_id,
        customer_conversion_goals,
    ):
        """Creates a list of MutateOperations that override customer conversion goals.
    
        Args:
            client: an initialized GoogleAdsClient instance.
            customer_id: a client customer ID.
            customer_conversion_goals: the list of customer conversion goals that
              will be overridden.
    
        Returns:
            MutateOperations that update campaign conversion goals.
        """
        campaign_conversion_goal_service = client.get_service(
            "CampaignConversionGoalService"
        )
        operations = []
    
        # To override the customer conversion goals, we will change the
        # biddability of each of the customer conversion goals so that only
        # the desired conversion goal is biddable in this campaign.
        for customer_conversion_goal in customer_conversion_goals:
            mutate_operation = client.get_type("MutateOperation")
            campaign_conversion_goal = (
                mutate_operation.campaign_conversion_goal_operation.update
            )
    
            campaign_conversion_goal.resource_name = (
                campaign_conversion_goal_service.campaign_conversion_goal_path(
                    customer_id,
                    _PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
                    customer_conversion_goal["category"].name,
                    customer_conversion_goal["origin"].name,
                )
            )
            # Change the biddability for the campaign conversion goal.
            # Set biddability to True for the desired (category, origin).
            # Set biddability to False for all other conversion goals.
            # Note:
            #  1- It is assumed that this Conversion Action
            #     (category=PURCHASE, origin=WEBSITE) exists in this account.
            #  2- More than one goal can be biddable if desired. This example
            #     shows only one.
            if (
                customer_conversion_goal["category"]
                == client.enums.ConversionActionCategoryEnum.PURCHASE
                and customer_conversion_goal["origin"]
                == client.enums.ConversionOriginEnum.WEBSITE
            ):
                biddable = True
            else:
                biddable = False
            campaign_conversion_goal.biddable = biddable
            field_mask = protobuf_helpers.field_mask(
                None, campaign_conversion_goal._pb
            )
            client.copy_from(
                mutate_operation.campaign_conversion_goal_operation.update_mask,
                field_mask,
            )
            operations.append(mutate_operation)
    
        return operations
          

    Ruby

    def _get_customer_conversion_goals(client, customer_id)
      query = <<~EOD
        SELECT
            customer_conversion_goal.category,
            customer_conversion_goal.origin
        FROM customer_conversion_goal
      EOD
    
      customer_conversion_goals = []
    
      ga_service = client.service.google_ads
      # The number of conversion goals is typically less than 50 so we use
      # GoogleAdsService.search instead of search_stream.
      response = ga_service.search(
          customer_id: customer_id,
          query: query,
          page_size: PAGE_SIZE,
      )
    
      # Iterate over the results and build the list of conversion goals.
      response.each do |row|
        customer_conversion_goals << {
            "category" => row.customer_conversion_goal.category,
            "origin" => row.customer_conversion_goal.origin
        }
      end
    
      customer_conversion_goals
    end
    
    def create_conversion_goal_operations(client, customer_id, customer_conversion_goals)
      campaign_conversion_goal_service = client.service.campaign_conversion_goal
    
      operations = []
    
      # To override the customer conversion goals, we will change the
      # biddability of each of the customer conversion goals so that only
      # the desired conversion goal is biddable in this campaign.
      customer_conversion_goals.each do |customer_conversion_goal|
        operations << client.operation.mutate do |m|
            m.campaign_conversion_goal_operation = client.operation.campaign_conversion_goal do |op|
              op.update = client.resource.campaign_conversion_goal do |ccg|
                  ccg.resource_name = client.path.campaign_conversion_goal(
                      customer_id,
                      PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
                      customer_conversion_goal["category"].to_s,
                      customer_conversion_goal["origin"].to_s)
                  # Change the biddability for the campaign conversion goal.
                  # Set biddability to True for the desired (category, origin).
                  # Set biddability to False for all other conversion goals.
                  # Note:
                  #  1- It is assumed that this Conversion Action
                  #     (category=PURCHASE, origin=WEBSITE) exists in this account.
                  #  2- More than one goal can be biddable if desired. This example
                  #     shows only one.
                  ccg.biddable = (customer_conversion_goal["category"] == :PURCHASE &&
                      customer_conversion_goal["origin"] == :WEBSITE)
              end
              op.update_mask = Google::Ads::GoogleAds::FieldMaskUtil.all_set_fields_of(op.update)
            end
        end
      end
    
      operations
    end
          

    Perl

    sub get_customer_conversion_goals {
      my ($api_client, $customer_id) = @_;
    
      my $customer_conversion_goals = [];
      # Create a query that retrieves all customer conversion goals.
      my $query =
        "SELECT customer_conversion_goal.category, customer_conversion_goal.origin "
        . "FROM customer_conversion_goal";
      # The number of conversion goals is typically less than 50 so we use
      # GoogleAdsService->search() method instead of search_stream().
      my $search_response = $api_client->GoogleAdsService()->search({
        customerId => $customer_id,
        query      => $query,
        pageSize   => PAGE_SIZE
      });
    
      # Iterate over the results and build the list of conversion goals.
      foreach my $google_ads_row (@{$search_response->{results}}) {
        push @$customer_conversion_goals,
          {
          category => $google_ads_row->{customerConversionGoal}{category},
          origin   => $google_ads_row->{customerConversionGoal}{origin}};
      }
    
      return $customer_conversion_goals;
    }
    
    # Creates a list of MutateOperations that override customer conversion goals.
    sub create_conversion_goal_operations {
      my ($customer_id, $customer_conversion_goals) = @_;
    
      my $operations = [];
      # To override the customer conversion goals, we will change the biddability of
      # each of the customer conversion goals so that only the desired conversion goal
      # is biddable in this campaign.
      foreach my $customer_conversion_goal (@$customer_conversion_goals) {
        my $campaign_conversion_goal =
          Google::Ads::GoogleAds::V16::Resources::CampaignConversionGoal->new({
            resourceName =>
              Google::Ads::GoogleAds::V16::Utils::ResourceNames::campaign_conversion_goal(
              $customer_id,
              PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
              $customer_conversion_goal->{category},
              $customer_conversion_goal->{origin})});
        # Change the biddability for the campaign conversion goal.
        # Set biddability to true for the desired (category, origin).
        # Set biddability to false for all other conversion goals.
        # Note:
        #  1- It is assumed that this Conversion Action
        #     (category=PURCHASE, origin=WEBSITE) exists in this account.
        #  2- More than one goal can be biddable if desired. This example
        #     shows only one.
        if ( $customer_conversion_goal->{category} eq PURCHASE
          && $customer_conversion_goal->{origin} eq WEBSITE)
        {
          $campaign_conversion_goal->{biddable} = "true";
        } else {
          $campaign_conversion_goal->{biddable} = "false";
        }
    
        push @$operations,
          Google::Ads::GoogleAds::V16::Services::GoogleAdsService::MutateOperation
          ->new({
            campaignConversionGoalOperation =>
              Google::Ads::GoogleAds::V16::Services::CampaignConversionGoalService::CampaignConversionGoalOperation
              ->new({
                update => $campaign_conversion_goal,
                # Set the update mask on the operation. Here the update mask will be
                # a list of all the fields that were set on the update object.
                updateMask => all_set_fields_of($campaign_conversion_goal)})});
      }
    
      return $operations;
    }