เปลี่ยนสถานะ

วิดีโอ: สถานะ

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

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

หากคุณต้องการผลลัพธ์แบบฟิลด์ต่อฟิลด์ที่มีมุมมองโดยละเอียดคล้ายกับ หน้าเว็บประวัติการเปลี่ยนแปลง โปรดดูเหตุการณ์การเปลี่ยนแปลง

เปลี่ยนประเภทสถานะ

แหล่งข้อมูลต่อไปนี้ ประเภท ได้แก่ ติดตามแล้ว โปรดทราบว่ารหัสประเภททรัพยากรแตกต่างจากค่า enum ดัชนีของ ChangeStatusResourceType

ประเภททรัพยากร ค่า รหัสประเภททรัพยากร
เอนทิตีหลัก
กลุ่มโฆษณา AD_GROUP 2
โฆษณาในกลุ่มโฆษณา AD_GROUP_AD 3
ตัวปรับการเสนอราคาระดับกลุ่มโฆษณา AD_GROUP_BID_MODIFIER 11
เกณฑ์ของกลุ่มโฆษณา AD_GROUP_CRITERION 4
ฟีดกลุ่มโฆษณา AD_GROUP_FEED 12
กลุ่มชิ้นงาน ASSET_BUNDLE 19
แคมเปญ แคมเปญ 5
เกณฑ์แคมเปญ CAMPAIGN_CRITERION 6
ฟีด
ฟีดแคมเปญ CAMPAIGN_FEED 9
ฟีด ฟีด 8
รายการฟีด FEED_ITEM 10
ชุดที่ใช้ร่วมกัน
ชุดที่ใช้ร่วมกัน SHARED_SET 17
ชุดแคมเปญที่ใช้งานร่วมกัน CAMPAIGN_SHARED_SET 18
ชิ้นงาน
ชิ้นงาน ชิ้นงาน 13
ชิ้นงานของลูกค้า CUSTOMER_ASSET 14
ชิ้นงานของแคมเปญ CAMPAIGN_ASSET 15
ชิ้นงานของกลุ่มโฆษณา AD_GROUP_ASSET 16

กำลังระบุประเภททรัพยากรตามรหัส

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

รูปแบบของชื่อทรัพยากรคือ

customers/{customer_id}/changeStatus/{timestamp}-{resource_type_id}-{additional_ids}

อาจมีรหัสเพิ่มเติมอย่างน้อย 1 รายการโดยคั่นด้วยอักขระ - แต่ รหัสที่เกี่ยวข้องคือ resource_type_id ซึ่งเป็นรหัสที่ 2 ที่ตามหลัง เครื่องหมายทับปิดท้าย ตารางก่อนหน้าแสดงรหัสประเภททรัพยากรทั้งหมด

เรียกข้อมูลการเปลี่ยนแปลง

คุณสามารถกรองรายการการเปลี่ยนแปลงตามวันที่และตามประเภททรัพยากร การดำเนินการในทรัพยากรที่ระบุเป็นหนึ่งใน ADDED CHANGED, หรือ REMOVED

คุณเรียกข้อมูลรายการการเปลี่ยนแปลงทั้งหมดสำหรับทรัพยากรทุกประเภทได้ ผลลัพธ์ resource_type คือช่องที่ มีการเปลี่ยนแปลง ระบบจะป้อนข้อมูลในช่องระดับบนสุดทั้งหมดด้วย ตัวอย่างเช่น หาก ad_group_criterion เปลี่ยนแปลงแล้ว ช่อง ad_group จะเป็น ป้อนข้อมูลแล้ว

ระบบอาจใช้เวลาถึง 3 นาทีจึงจะแสดงการเปลี่ยนแปลงในสถานะการเปลี่ยนแปลง ผลลัพธ์

การค้นหาต้องกรองวันที่ภายใน 90 วันที่ผ่านมา และสามารถเลือกเวลาได้ และต้องมีเงื่อนไข LIMIT ที่กำหนดผลลัพธ์ไม่เกิน 10,000 รายการ

Java

private void runExample(GoogleAdsClient googleAdsClient, long customerId) {
  String query =
      "SELECT change_status.resource_name, "
          + "change_status.last_change_date_time, "
          + "change_status.resource_status, "
          + "change_status.resource_type, "
          + "change_status.ad_group, "
          + "change_status.ad_group_ad, "
          + "change_status.ad_group_bid_modifier, "
          + "change_status.ad_group_criterion, "
          + "change_status.ad_group_feed, "
          + "change_status.campaign, "
          + "change_status.campaign_criterion, "
          + "change_status.campaign_feed, "
          + "change_status.feed, "
          + "change_status.feed_item "
          + "FROM change_status "
          + "WHERE change_status.last_change_date_time DURING LAST_14_DAYS "
          + "ORDER BY change_status.last_change_date_time "
          + "LIMIT 10000";

  try (GoogleAdsServiceClient client =
      googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) {
    SearchPagedResponse response = client.search(String.valueOf(customerId), query);

    for (GoogleAdsRow row : response.iterateAll()) {
      Optional<String> resourceNameOfChangedEntity =
          getResourceNameForResourceType(row.getChangeStatus());

      System.out.printf(
          "On '%s', change status '%s' shows a resource type of '%s' "
              + "with resource name '%s' was '%s'.%n",
          row.getChangeStatus().getLastChangeDateTime(),
          row.getChangeStatus().getResourceName(),
          row.getChangeStatus().getResourceType().name(),
          resourceNameOfChangedEntity.orElse(""),
          row.getChangeStatus().getResourceStatus().name());
    }
  }
}
      

C#

public void Run(GoogleAdsClient client, long customerId)
{
    // Get the GoogleAdsService.
    GoogleAdsServiceClient googleAdsService = client.GetService(
        Services.V17.GoogleAdsService);

    string searchQuery = @"
        SELECT
            change_status.resource_name,
            change_status.last_change_date_time,
            change_status.resource_type,
            change_status.campaign,
            change_status.ad_group,
            change_status.resource_status,
            change_status.ad_group_ad,
            change_status.ad_group_criterion,
            change_status.campaign_criterion
        FROM change_status
        WHERE
            change_status.last_change_date_time DURING LAST_14_DAYS
        ORDER BY change_status.last_change_date_time
        LIMIT 10000";

    // Create a request that will retrieve all changes.
    SearchGoogleAdsRequest request = new SearchGoogleAdsRequest()
    {
        Query = searchQuery,
        CustomerId = customerId.ToString()
    };

    try
    {
        // Issue the search request.
        PagedEnumerable<SearchGoogleAdsResponse, GoogleAdsRow> searchPagedResponse =
            googleAdsService.Search(request);

        // Iterate over all rows in all pages and prints the requested field values for the
        // campaign in each row.
        foreach (GoogleAdsRow googleAdsRow in searchPagedResponse)
        {
            Console.WriteLine("Last change: {0}, Resource type: {1}, " +
                "Resource name: {2}, Resource status: {3}, Specific resource name: {4}",
                googleAdsRow.ChangeStatus.LastChangeDateTime,
                googleAdsRow.ChangeStatus.ResourceType,
                googleAdsRow.ChangeStatus.ResourceName,
                googleAdsRow.ChangeStatus.ResourceStatus,
                SpecificResourceName(googleAdsRow.ChangeStatus.ResourceType,
                    googleAdsRow));
        }
    }
    catch (GoogleAdsException e)
    {
        Console.WriteLine("Failure:");
        Console.WriteLine($"Message: {e.Message}");
        Console.WriteLine($"Failure: {e.Failure}");
        Console.WriteLine($"Request ID: {e.RequestId}");
        throw;
    }
}

/// <summary>
/// Return the name of the most specific resource that changed.
/// </summary>
/// <param name="resourceType">Type of the resource.</param>
/// <param name="row">Each returned row contains all possible changed fields</param>
/// <returns>The resource name of the changed field based on the resource type.
/// The changed field's parent is also populated, but is not used.</returns>
private string SpecificResourceName(ChangeStatusResourceType resourceType, GoogleAdsRow row)
{
    string resourceName;
    switch (resourceType)
    {
        case ChangeStatusResourceType.AdGroup:
            resourceName = row.ChangeStatus.AdGroup;
            break;

        case ChangeStatusResourceType.AdGroupAd:
            resourceName = row.ChangeStatus.AdGroupAd;
            break;

        case ChangeStatusResourceType.AdGroupCriterion:
            resourceName = row.ChangeStatus.AdGroupCriterion;
            break;

        case ChangeStatusResourceType.Campaign:
            resourceName = row.ChangeStatus.Campaign;
            break;

        case ChangeStatusResourceType.CampaignCriterion:
            resourceName = row.ChangeStatus.CampaignCriterion;
            break;

        case ChangeStatusResourceType.Unknown:
        case ChangeStatusResourceType.Unspecified:
        default:
            resourceName = "";
            break;
    }
    return resourceName;
}
      

PHP

public static function runExample(GoogleAdsClient $googleAdsClient, int $customerId)
{
    $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
    // Creates a query to find information about changed resources in your account.
    $query = 'SELECT change_status.resource_name, '
        . 'change_status.last_change_date_time, '
        . 'change_status.resource_status, '
        . 'change_status.resource_type, '
        . 'change_status.ad_group, '
        . 'change_status.ad_group_ad, '
        . 'change_status.ad_group_bid_modifier, '
        . 'change_status.ad_group_criterion, '
        . 'change_status.ad_group_feed, '
        . 'change_status.campaign, '
        . 'change_status.campaign_criterion, '
        . 'change_status.campaign_feed, '
        . 'change_status.feed, '
        . 'change_status.feed_item '
        . 'FROM change_status '
        . 'WHERE change_status.last_change_date_time DURING LAST_14_DAYS '
        . 'ORDER BY change_status.last_change_date_time '
        . 'LIMIT 10000';

    // Issues a search request.
    $response = $googleAdsServiceClient->search(
        SearchGoogleAdsRequest::build($customerId, $query)
    );

    // Iterates over all rows in all pages and prints the requested field values for
    // the change status in each row.
    foreach ($response->iterateAllElements() as $googleAdsRow) {
        /** @var GoogleAdsRow $googleAdsRow */
        printf(
            "On %s, change status '%s' shows resource '%s' with type '%s' and status '%s'.%s",
            $googleAdsRow->getChangeStatus()->getLastChangeDateTime(),
            $googleAdsRow->getChangeStatus()->getResourceName(),
            self::getResourceNameForResourceType($googleAdsRow->getChangeStatus()),
            ChangeStatusResourceType::name(
                $googleAdsRow->getChangeStatus()->getResourceType()
            ),
            ChangeStatusOperation::name($googleAdsRow->getChangeStatus()->getResourceStatus()),
            PHP_EOL
        );
    }
}

/**
 * Gets the resource name for the resource type of the change status object.
 *
 * Each returned row contains all possible changed resources, only one of which is populated
 * with the name of the changed resource. This function returns the resource name of the
 * changed resource based on the resource type.
 *
 * @param ChangeStatus $changeStatus the change status object for getting changed resource
 * @return string the name of the resource that changed
 */
private static function getResourceNameForResourceType(
    ChangeStatus $changeStatus
) {
    $resourceType = $changeStatus->getResourceType();
    $resourceName = ''; // Default value for UNSPECIFIED or UNKNOWN resource type.
    switch ($resourceType) {
        case ChangeStatusResourceType::AD_GROUP:
            $resourceName = $changeStatus->getAdGroup();
            break;
        case ChangeStatusResourceType::AD_GROUP_AD:
            $resourceName = $changeStatus->getAdGroupAd();
            break;
        case ChangeStatusResourceType::AD_GROUP_BID_MODIFIER:
            $resourceName = $changeStatus->getAdGroupBidModifier();
            break;
        case ChangeStatusResourceType::AD_GROUP_CRITERION:
            $resourceName = $changeStatus->getAdGroupCriterion();
            break;
        case ChangeStatusResourceType::AD_GROUP_FEED:
            $resourceName = $changeStatus->getAdGroupFeed();
            break;
        case ChangeStatusResourceType::CAMPAIGN:
            $resourceName = $changeStatus->getCampaign();
            break;
        case ChangeStatusResourceType::CAMPAIGN_CRITERION:
            $resourceName = $changeStatus->getCampaignCriterion();
            break;
        case ChangeStatusResourceType::CAMPAIGN_FEED:
            $resourceName = $changeStatus->getCampaignFeed();
            break;
        case ChangeStatusResourceType::FEED:
            $resourceName = $changeStatus->getFeed();
            break;
        case ChangeStatusResourceType::FEED_ITEM:
            $resourceName = $changeStatus->getFeedItem();
            break;
    }

    return $resourceName;
}
      

Python

def main(client, customer_id):
    ads_service = client.get_service("GoogleAdsService")

    # Construct a query to find information about changed resources in your
    # account.
    query = """
        SELECT
          change_status.resource_name,
          change_status.last_change_date_time,
          change_status.resource_type,
          change_status.campaign,
          change_status.ad_group,
          change_status.resource_status,
          change_status.ad_group_ad,
          change_status.ad_group_criterion,
          change_status.campaign_criterion
        FROM change_status
        WHERE change_status.last_change_date_time DURING LAST_14_DAYS
        ORDER BY change_status.last_change_date_time
        LIMIT 10000"""

    search_request = client.get_type("SearchGoogleAdsRequest")
    search_request.customer_id = customer_id
    search_request.query = query

    response = ads_service.search(request=search_request)

    for row in response:
        cs = row.change_status
        resource_type = cs.resource_type.name
        if resource_type == "AD_GROUP":
            resource_name = cs.ad_group
        elif resource_type == "AD_GROUP_AD":
            resource_name = cs.ad_group_ad
        elif resource_type == "AD_GROUP_CRITERION":
            resource_name = cs.ad_group_criterion
        elif resource_type == "CAMPAIGN":
            resource_name = cs.campaign
        elif resource_type == "CAMPAIGN_CRITERION":
            resource_name = cs.campaign_criterion
        else:
            resource_name = "UNKNOWN"

        resource_status = cs.resource_status.name
        print(
            f"On '{cs.last_change_date_time}', change status "
            f"'{cs.resource_name}' shows that a resource type of "
            f"'{resource_type}' with resource name '{resource_name}' was "
            f"{resource_status}"
        )
      

Ruby

def get_change_summary(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

  # Construct a query to find information about changed resources in your
  # account.
  query = <<~QUERY
    SELECT
      change_status.resource_name,
      change_status.last_change_date_time,
      change_status.resource_type,
      change_status.campaign,
      change_status.ad_group,
      change_status.resource_status,
      change_status.ad_group_ad,
      change_status.ad_group_criterion,
      change_status.campaign_criterion
    FROM
      change_status
    WHERE change_status.last_change_date_time DURING LAST_14_DAYS
    ORDER BY
      change_status.last_change_date_time
    LIMIT 10000
  QUERY

  # Execute the query.
  response = client.service.google_ads.search(
    customer_id: customer_id,
    query: query,
    page_size: PAGE_SIZE
  )

  # Process the results.
  response.each do |row|
    cs = row.change_status
    resource_name = case cs.resource_type
    when :AD_GROUP
      cs.ad_group
    when :AD_GROUP_AD
      cs.ad_group_ad
    when :AD_GROUP_CRITERION
      cs.ad_group_criterion
    when :CAMPAIGN
      cs.campaign
    when :CAMPAIGN_CRITERION
      cs.campaign_criterion
    else
      "UNKNOWN"
    end
    puts "On #{cs.last_change_date_time}, change status #{cs.resource_name} " \
         "shows a resource type of #{cs.resource_type} " \
         "with resource name #{resource_name} was #{cs.resource_status}."
  end
end
      

Perl

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

  # Construct a search query to find information about changed resources in your
  # account.
  my $search_query =
    "SELECT change_status.resource_name, change_status.last_change_date_time, "
    . "change_status.resource_status, "
    . "change_status.resource_type, "
    . "change_status.ad_group, "
    . "change_status.ad_group_ad, "
    . "change_status.ad_group_bid_modifier, "
    . "change_status.ad_group_criterion, "
    . "change_status.ad_group_feed, "
    . "change_status.campaign, "
    . "change_status.campaign_criterion, "
    . "change_status.campaign_feed, "
    . "change_status.feed, "
    . "change_status.feed_item "
    . "FROM change_status "
    . "WHERE change_status.last_change_date_time DURING LAST_14_DAYS "
    . "ORDER BY change_status.last_change_date_time "
    . "LIMIT 10000";

  # Create a search Google Ads request that will retrieve all change statuses using
  # pages of the specified page size.
  my $search_request =
    Google::Ads::GoogleAds::V17::Services::GoogleAdsService::SearchGoogleAdsRequest
    ->new({
      customerId => $customer_id,
      query      => $search_query
    });

  # Get the GoogleAdsService.
  my $google_ads_service = $api_client->GoogleAdsService();

  my $iterator = Google::Ads::GoogleAds::Utils::SearchGoogleAdsIterator->new({
    service => $google_ads_service,
    request => $search_request
  });

  # Iterate over all rows in all pages and print the requested field values for
  # the change status in each row.
  while ($iterator->has_next) {
    my $google_ads_row = $iterator->next;

    my $change_status = $google_ads_row->{changeStatus};

    printf "On %s, change status '%s' shows a resource type of '%s' " .
      "with resource name '%s' was '%s'.\n",
      $change_status->{lastChangeDateTime},
      $change_status->{resourceName}, $change_status->{resourceType},
      __get_resource_name_for_resource_type($change_status),
      $change_status->{resourceStatus};
  }

  return 1;
}

# This method returns the resource name of the changed field based on the
# resource type. The changed field's parent is also populated but is not used.
sub __get_resource_name_for_resource_type {
  my $change_status = shift;
  my $resource_type = $change_status->{resourceType};
  if ($resource_type eq AD_GROUP) {
    return $change_status->{adGroup};
  } elsif ($resource_type eq AD_GROUP_AD) {
    return $change_status->{adGroupAd};
  } elsif ($resource_type eq AD_GROUP_BID_MODIFIER) {
    return $change_status->{adGroupBidModifier};
  } elsif ($resource_type eq AD_GROUP_CRITERION) {
    return $change_status->{adGroupCriterion};
  } elsif ($resource_type eq AD_GROUP_FEED) {
    return $change_status->{adGroupFeed};
  } elsif ($resource_type eq CAMPAIGN) {
    return $change_status->{campaign};
  } elsif ($resource_type eq CAMPAIGN_CRITERION) {
    return $change_status->{campaignCriterion};
  } elsif ($resource_type eq CAMPAIGN_FEED) {
    return $change_status->{campaignFeed};
  } elsif ($resource_type eq FEED) {
    return $change_status->{feed};
  } elsif ($resource_type eq FEED_ITEM) {
    return $change_status->{feedItem};
  } else {
    return "";
  }
}
      

ซิงค์ในเครื่อง

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

เปลี่ยนเวลา

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

โปรดทราบว่าช่องนี้กรองได้เช่นกัน ซึ่งหมายความว่าใช้ได้ในWHERE ของข้อความค้นหา Google Ads Query Language (GAQL) ที่ช่วยให้คุณค้นหา การเปลี่ยนแปลงในทรัพยากรที่เกิดขึ้นก่อนหรือหลังเวลาที่ระบุ

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

WHERE change_status.last_change_date_time DURING LAST_7_DAYS