Rozwiązywanie problemów z RTB

W tym przewodniku przedstawiamy zasoby do rozwiązywania problemów z określaniem stawek w czasie rzeczywistym, które umożliwiają z danymi kampanii z określaniem stawek w czasie rzeczywistym, które są widoczne również Narzędzie Podział RTB w Interfejs Authorized Buyers. Są to między innymi bidders.filterSets, bidders.accounts.filterSets i wszystkich podrzędnych zasobów.

Dzięki danym z zasobów dotyczących rozwiązywania problemów z RTB możesz uzyskać statystyki niewykorzystanych możliwości aby zdobywać wyświetlenia, które pomogą Ci zoptymalizować kampanię z określaniem stawek w czasie rzeczywistym.

Zmiany w strukturze i stylu interfejsu API

Materiały do rozwiązywania problemów z RTB wprowadzają kilka zmian, które pozwalają jednoznacznie wskazać własność dostępu, bardziej szczegółową kontrolę nad danymi zwracanymi przez interfejs API oraz metod projektowania interfejsów API Google.

Zasoby na poziomie licytującego i na poziomie konta

Informacje o zasobach znajdują się w porządku bidders i bidders.accounts. Umożliwiają one określenie czy wywołanie interfejsu API jest kierowane na licytującego (konto nadrzędne), a także wszystkie powiązane kont podrzędnych czy indywidualnych kont Authorized Buyers. W kontekście RTB Rozwiązywanie problemów: zasoby uporządkowane pod nagłówkiem bidders.filterSets będą zwracać wskaźniki zagregowane dla danego licytującego i wszystkich powiązanych kont podrzędnych. Z kolei osoby poniżej Funkcja bidders.accounts.filterSets będzie zwracać tylko dane dotyczące określonego konta niezależnie od tego: niezależnie od tego, czy chodzi o konto licytującego czy na konto podrzędne.

Uwaga: konta, które przekazują ustalanie stawek innemu kupującemu, nie są kontami licytujących. co sprawia, że nie mają dostępu do zasobów na poziomie licytującego. Poza tym na kontach, które nie korzystają z aukcji, dostęp do ustawień impressionMetrics, filteredBidResponses, bidResponseErrors i na poziomie konta bidResponsesWithoutBids zasobów.

Przedstawiamy nazwy zasobów jako unikalne identyfikatory

Nazwy zasobów są używane jako czyli unikalnych identyfikatorów, a nie identyfikatorów w postaci liczb całkowitych lub ciągów znaków. Podczas tworzenia nowego wystąpienia danego argumentu musisz określić względne nazwa zasobu za pomocą ścieżki identyfikatora URI, po której następuje preferowany identyfikator zasobu. Oto przykłady nazw ważnych w zasobach dotyczących rozwiązywania problemów z RTB:

Zasób Przykładowa nazwa
bidders.filterSets bidders/12345678/filterSets/fset_1
bidders.accounts.filterSets bidders/12345678/accounts/87654321/filterSets/fset_2

Uwaga: identyfikator zasobu określony w nazwie atrybutu bidders musi być identyfikatorem licytującego. Identyfikator konta Authorized Buyers. W przypadku accounts identyfikator zasobu musi być identyfikatorem konta albo licytującego lub na koncie podrzędnym zarządzanym przez ten system. Jeśli nie wiesz, które Authorized Buyers powiązane z Twoim kontem Google, możesz użyć accounts.list, aby je znaleźć.

Filtruj zestawy

Zestaw filtrów reprezentuje dostępne opcje filtrowania i można go utworzyć na poziomie licytującego lub konta. Służy do filtrowania wyników z punktu widzenia rozwiązywania problemów z RTB zasobów, które pobierają dane o kampaniach z określaniem stawek w czasie rzeczywistym.

Filtr stosowany przy pobieraniu danych to przecięcia poszczególnych filtrów w określonym zestawu filtrów. Filtry listy, takie jak platforms, są interpretowane jako suma elementów występujących na liście.

Zestawy filtrów na poziomie licytującego i na poziomie konta różnią się i są dostępne tylko na poziomie, na którym niezależnie od konta, na którym zostały utworzone. Udział licytujących i kont podrzędnych zestawy filtrów utworzone na poziomie konta, a licytujący ma dostęp do zasobów na poziomie na poziomie licytującego. W tabeli poniżej znajdziesz podsumowanie dotyczące dostępu do zasobów przez konta licytujące i podrzędne na dowolnym poziomie:

  bidders.filterSets bidders.accounts.filterSets
Konto licytującego Wywołanie interfejsu API mające wpływ tylko na zestawy filtrów na poziomie licytującego. Wywołanie interfejsu API mające wpływ tylko na zestawy filtrów na poziomie konta.
Konto dziecka To wywołanie interfejsu API zwróci odpowiedź o błędzie. Wywołanie interfejsu API mające wpływ tylko na zestawy filtrów na poziomie konta.

Utwórz zestaw filtrów

Przy tworzeniu zestawu filtrów musisz podać zakres czasu jako relativeDateRange, absoluteDateRange lub realtimeTimeRange. Przy pobieraniu wskaźników para klucz-wartość działanie domyślne to udostępnianie wszystkich danych z całego zakresu czasu. Aby otrzymywać rozkład ciągów czasowych w danym przedziale czasu, możesz określić timeSeriesGranularity aby wskazać interwały HOURLY lub DAILY.

Jeśli potrzebujesz filtra ustawionego tylko przez krótki czas, możesz ustawić isTransient do funkcji true. Oznacza to, że zestaw filtrów jest przejściowy, co oznacza, że nie będzie trwały. Zestawy filtrów tymczasowych będą dostępne przez co najmniej godzinę od utworzenia, ale po pewnym czasie zostaną usunięte. Domyślnie zestawy filtrów nie są tymczasowe.

Przykład na poziomie licytującego

Aby utworzyć nowy zestaw filtrów na poziomie licytującego, wyślij żądanie POST do identyfikatora URI zasobu bidders.filterSets, który ma ten format:

https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/filterSets

Ostrzeżenie: zestawów filtrów na poziomie licytującego nie można filtrować według identyfikatora kreacji ani identyfikatora umowy. Jeśli podczas tworzenia zestawu filtrów na poziomie licytującego określisz te filtry, otrzymasz odpowiedź o błędzie.

Wyślij prośbę

Oto przykład żądania POST, które tworzy nowy trwały zestaw filtrów na poziomie licytującego:

POST https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/filterSets
Authorization: Bearer access token here
Content-Type: application/json

{
  "name": "bidders/12345678/filterSets/bidder-fs",
  "format": "DISPLAY",
  "environment": "APP",
  "platforms": ["TABLET", "MOBILE"],
  "absoluteDateRange": {
    "startDate": {
      "month": 11,
      "day": 26,
      "year": 2017
    },
    "endDate": {
      "month": 12,
      "day": 3,
      "year": 2017
    }
  },
  "timeSeriesGranularity": "DAILY"
}

Odpowiedź

Jeśli żądanie zostanie zrealizowane, serwer odpowiada kodem stanu 200 OK. Treść odpowiedzi będzie zawierać utworzony zasób zestawu filtrów, który będzie taki sam jak zestaw filtrów przesłany w żądaniu.

Przykład na poziomie konta

Aby utworzyć nowy zestaw filtrów na poziomie konta, wyślij prośbę POST do Identyfikator URI zasobu bidders.accounts.filterSets w formacie:

https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/accounts/{account resource ID}/filterSets

Uwaga: identyfikator zasobu określony dla accounts może musi być identyfikatorem każdego konta Authorized Buyers, do którego ma dostęp licytujący. konta podanego w identyfikatorze URI, w tym konta licytującego.

Wyślij prośbę

Oto przykład żądania POST, które tworzy nowy trwały zestaw filtrów na poziomie konta:

POST https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/accounts/87654321/filterSets
Authorization: Bearer access token here
Content-Type: application/json

{
  "name": "bidders/12345678/accounts/87654321/filterSets/account-fs",
  "format": "VIDEO",
  "environment": "WEB",
  "platforms": ["DESKTOP"],
  "absoluteDateRange": {
    "startDate": {
      "month": 11,
      "day": 26,
      "year": 2017
    },
    "endDate": {
      "month": 12,
      "day": 3,
      "year": 2017
    }
  },
  "timeSeriesGranularity": "DAILY"
}
Odpowiedź

Jeśli żądanie zostanie zrealizowane, serwer odpowiada kodem stanu 200 OK. Treść odpowiedzi uwzględnij utworzony zasób zestawu filtrów, który będzie taki sam jak zestaw filtrów przesłany w do ich przesłania.

Pobierz zestaw filtrów

Metoda get może uzyskać zestaw filtrów tylko na tym samym poziomie, na którym został utworzony. Na przykład: konto powinno użyć metody bidders.accounts.filterSets.get, aby pobrać zestaw filtrów utworzony na koncie na poziomie obiektu, a nie w metodzie bidders.filterSets.get.

Na poziomie licytującego

Zestaw filtrów na poziomie licytującego możesz pobrać, wysyłając żądanie HTTP GET do identyfikatora URI zasobu bidders.filterSets, który ma ten format:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/filterSets/{filter set resource ID}
Wyślij prośbę

Oto przykład:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/filterSets/bidder-fs
Odpowiedź

Jeśli żądanie zostanie zrealizowane, serwer odpowiada, wysyłając kod stanu HTTP 200 OK i pobrany zestaw filtrów:

{
  "name": "bidders/12345678/filterSets/bidder-fs",
  "format": "DISPLAY",
  "environment": "APP",
  "platforms": ["TABLET", "MOBILE"],
  "absoluteDateRange": {
    "startDate": {
      "month": 11,
      "day": 26,
      "year": 2017
    },
    "endDate": {
      "month": 12,
      "day": 3,
      "year": 2017
    }
  },
  "timeSeriesGranularity": "DAILY"
}

Poziom konta

Zestaw filtrów na poziomie konta możesz pobrać, wysyłając żądanie HTTP GET do identyfikatora URI zasobu bidders.accounts.filterSets, który ma następujący format:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/accounts/{account resource ID}/filterSets/{filter set resource ID}
Wyślij prośbę

Oto przykład:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/accounts/87654321/filterSets/account-fs
Odpowiedź

Jeśli żądanie zostanie zrealizowane, serwer odpowiada, wysyłając kod stanu HTTP 200 OK i pobrany zestaw filtrów:

{
  "name": "bidders/12345678/accounts/87654321/filterSets/account-fs",
  "format": "VIDEO",
  "environment": "WEB",
  "platforms": ["DESKTOP"],
  "absoluteDateRange": {
    "startDate": {
      "month": 11,
      "day": 26,
      "year": 2017
    },
    "endDate": {
      "month": 12,
      "day": 3,
      "year": 2017
    }
  },
  "timeSeriesGranularity": "DAILY"
}

Wyświetlenie listy zestawów filtrów

Metoda listy zwraca tylko zestawy filtrów dostępne na poziomie, na który jest wywoływana. Na przykład konto licytującego nie będzie widzieć zestawów filtrów utworzonych samodzielnie przez bidders.accounts.filterSets.create przy połączeniu z: bidders.filterSets.list.

Na poziomie licytującego

Aby pobrać wszystkie zestawy filtrów na poziomie licytującego w przypadku danego licytującego, wyślij żądanie HTTP GET do identyfikatora URI zasobu bidders.filtersets, który ma następujący format:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/filterSets
Wyślij prośbę

Oto przykład wszystkich zestawów filtrów na poziomie licytującego o identyfikatorze konta 12345678:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/filterSets
Odpowiedź
{
  "filterSets": [{
      "filterSetId": "99994",
      "name": "bidders/12345678/filterSets/test-b-1",
      "relativeDateRange": {
        "durationDays": 30
      }
    },
    {
      "realtimeTimeRange": {
        "startTimeStamp": "2017-11-15T12:30:30.072831583Z"
      },
      "filterSetId": "99995",
      "name": "bidders/12345678/filterSets/test-b-2",
      "timeSeriesGranularity": "HOURLY"
    },
    {
      "absoluteDateRange": {
        "endDate": {
          "day": 12,
          "month": 3,
          "year": 2017
        },
        "startDate": {
          "day": 26,
          "month": 11,
          "year": 2017
        }
      },
      "filterSetId": "99996",
      "name": "bidders/12345678/filterSets/bidder-fs",
      "timeSeriesGranularity": "DAILY",
      "platforms": ["TABLET", "MOBILE"],
      "environment": "APP",
      "format": "DISPLAY"
    }
  ]
}

Poziom konta

Aby pobrać wszystkie zestawy filtrów na poziomie konta dla danego konta, wysyłaj żądanie HTTP GET do identyfikatora URI zasobu bidders.accounts.filtersets, który ma następujący format:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/accounts/{account resource ID}/filterSets
Wyślij prośbę

Oto przykład listy wszystkich zestawów filtrów na poziomie konta dla konta podrzędnego o identyfikatorze 87654321:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/accounts/87654321/filterSets
Odpowiedź
{
  "filterSets": [{
        "realtimeTimeRange": {
        "startTimeStamp": "2017-11-19T04:24:43.252893487Z"
      },
      "filterSetId": "99997",
      "name": "bidders/12345678/accounts/87654321/filterSets/test-a-1",
      "timeSeriesGranularity": "DAILY"
    },
    {
      "absoluteDateRange": {
        "endDate": {
          "day": 3,
          "month": 12,
          "year": 2017
        },
        "startDate": {
          "day": 26,
          "month": 11,
          "year": 2017
        }
      },
      "filterSetId": "99998",
      "name": "bidders/12345678/accounts/87654321/filterSets/account-fs",
      "timeSeriesGranularity": "DAILY",
      "platforms": ["DESKTOP"],
      "environment": "WEB",
      "format": "VIDEO"
    }
  ]
}

Usuwanie zestawu filtrów

Aby usunąć wszystkie trwałe zestawy filtrów, które nie są plikami, możesz użyć metody delete jest potrzebna dłużej. Może usuwać tylko zestawy filtrów dostępne na poziomie, na który jest wywoływany. na przykład konto licytującego nie może usunąć zestawu filtrów utworzonego za pomocą parametru bidders.accounts.filterSets.create dzięki bidders.filterSets.delete.

Na poziomie licytującego

Aby usunąć zestaw filtrów na poziomie licytującego dla danego konta, wyślij żądanie HTTP DELETE do identyfikatora URI zasobu bidders.filtersets, który ma następujący format:

DELETE https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/filterSets/{filter set resource ID}
Wyślij prośbę

Oto przykład usuwania zestawu filtrów na poziomie licytującego:

DELETE https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/filterSets/test-b-2
Odpowiedź

Jeśli żądanie się powiedzie, treść żądania będzie pusta. Podany zestaw filtrów nie będzie już dostępny.

Poziom konta

Aby usunąć zestaw filtrów na poziomie konta dla danego konta, wysyłaj żądanie HTTP DELETE do identyfikatora URI zasobu bidders.accounts.filtersets, który ma następujący format:

DELETE https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/accounts/{account resource ID}/filterSets/{filter set resource ID}
Wyślij prośbę

Oto przykład usuwania zestawu filtrów na poziomie konta:

DELETE https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/accounts/87654321/filterSets/test-a-1
Odpowiedź

Jeśli żądanie się powiedzie, treść żądania będzie pusta. Podany zestaw filtrów nie będzie już dostępny.

Pobieranie danych dotyczących rozwiązywania problemów z RTB

Wszystkie zasoby do rozwiązywania problemów z RTB używane do otrzymywania danych działają w podobny sposób – mają jedna metoda wyświetlania danych dla zbioru filtrów określonego za pomocą ścieżki filterSetName . Od wybranego zestawu filtrów zależy, jakie filtry i ustawienia zostaną zastosowane zapytań dotyczących danych. Wywołanie tych zasobów z poziomu licytującego spowoduje zwrócenie danych zbiorczych z konta licytującego i wszystkich powiązanych z nim kont podrzędnych, natomiast wywołanie z poziomu konta zwracają dane dotyczące tylko konta indywidualnego.

Dane o stawkach

Zasób bidMetrics służy do pobierania wskaźników mierzonych w liczby stawek. W ten sposób możesz np. określić łączną liczbę stawek w w wybranym okresie, a ile z nich nie zostało odfiltrowanych z aukcji, wygrało wyświetlenie. itp. Podobnie jak w przypadku wszystkich innych zasobów do rozwiązywania problemów z RTB, które służą do zbierania danych, używa tylko metody list.

Wyświetl dane o stawkach na poziomie licytującego

Aby wyświetlić dane o stawkach na poziomie licytującego dla danego zestawu filtrów, wyślij żądanie HTTP GET do identyfikatora URI zasobu bidders.filtersets.bidMetrics, który ma następujący format:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/filterSets/{filter set resource ID}/bidMetrics
Wyślij prośbę

Oto przykład danych o stawkach na poziomie licytującego:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/filterSets/bidder-fs/bidMetrics
Odpowiedź

Jeśli żądanie zostanie zrealizowane, serwer w odpowiedzi przesyła kod stanu 200 OK i treści zawierające wiersze danych dotyczące określonych wymiarów i dokładności.

{
  "bidMetricsRows": [{
        "bids": {
        "value": "6160"
      },
      "bidsInAuction": {
        "value": "5698"
      },
      "billedImpressions": {
        "value": "1196"
      },
      "impressionsWon": {
        "value": "2920"
      },
      "measurableImpressions": {
        "value": "1160"
      },
      "rowDimensions": {
        "timeInterval": {
          "endTime": "2017-11-29T08:00:00Z",
          "startTime": "2017-11-28T08:00:00Z"
        }
      },
      "viewableImpressions": {
        "value": "683"
      }
    },
    {
      "bids": {
        "value": "104288"
      },
      "bidsInAuction": {
        "value": "94016"
      },
      "billedImpressions": {
        "value": "99"
      },
      "impressionsWon": {
        "value": "125"
      },
      "measurableImpressions": {
        "value": "94"
      },
      "rowDimensions": {
        "timeInterval": {
          "endTime": "2017-11-30T08:00:00Z",
          "startTime": "2017-11-29T08:00:00Z"
        }
      },
      "viewableImpressions": {
        "value": "87"
      }
    },
    {
      "bids": {
        "value": "3999"
      },
      "bidsInAuction": {
        "value": "3631"
      },
      "billedImpressions": {
        "value": "618"
      },
      "impressionsWon": {
        "value": "1819"
      },
      "measurableImpressions": {
        "value": "604"
      },
      "rowDimensions": {
        "timeInterval": {
          "endTime": "2017-12-01T08:00:00Z",
          "startTime": "2017-11-30T08:00:00Z"
        }
      },
      "viewableImpressions": {
        "value": "369"
      }
    },
    {
      "bids": {
        "value": "15"
      },
      "bidsInAuction": {
        "value": "3"
      },
      "billedImpressions": {},
      "impressionsWon": {
        "value": "3"
      },
      "measurableImpressions": {},
      "rowDimensions": {
        "timeInterval": {
          "endTime": "2017-12-02T08:00:00Z",
          "startTime": "2017-12-01T08:00:00Z"
        }
      },
      "viewableImpressions": {}
    }
  ]
}

Uwaga: pola z wartością 0 dla danego wskaźnika nie pojawią się w odpowiedzi. Puste wskaźniki billedImpressions i measurableImpressions powyżej wskazują, że zarówno wartość, jak i wariancja dla tych wartości mają wartość 0.

Ostrzeżenie: w przypadku jakiegokolwiek podziału danych w odpowiedzi odpowiedź nie będzie uwzględnij wiersze, jeśli nie zawierają one żadnych danych innych niż zero. Na przykład, gdy plik określono timeSeriesGranularity, odpowiedź nie będzie zawierać wierszy dla żadnego timeInterval w określonym zakresie czasu zestawu filtrów, w którym wszystkie dane mają wartość zero.

Wyświetlanie danych o stawkach na poziomie konta

Aby wyświetlić dane o stawkach na poziomie konta dla określonego zestawu filtrów, wyślij żądanie HTTP GET do identyfikatora URI zasobu bidders.accounts.filtersets.bidMetrics, który zawiera parametr w tym formacie:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/{bidder resource ID}/accounts/{account resource ID}/filterSets/{filter set resource ID}/bidMetrics
Wyślij prośbę

Oto przykład danych o stawkach na poziomie konta:

GET https://adexchangebuyer.googleapis.com/v2beta1/bidders/12345678/accounts/87654321/filterSets/account-fs/bidMetrics
Odpowiedź

Jeśli żądanie zostanie zrealizowane, serwer w odpowiedzi przesyła kod stanu 200 OK i treści zawierające wiersze danych dotyczące określonych wymiarów i dokładności.

{
  "bidMetricsRows": [{
      "bids": {
        "value": "1748"
      },
      "bidsInAuction": {
        "value": "1421"
      },
      "billedImpressions": {
        "value": "301"
      },
      "impressionsWon": {
        "value": "915"
      },
      "measurableImpressions": {
        "value": "298"
      },
      "rowDimensions": {
        "timeInterval": {
          "endTime": "2017-12-01T08:00:00Z",
          "startTime": "2017-11-30T08:00:00Z"
        }
      },
      "viewableImpressions": {
        "value": "172"
      }
    },
    {
      "bids": {
        "value": "6"
      },
      "bidsInAuction": {
        "value": "2"
      },
      "billedImpressions": {},
      "impressionsWon": {
        "value": "1"
      },
      "measurableImpressions": {},
      "rowDimensions": {
        "timeInterval": {
          "endTime": "2017-12-02T08:00:00Z",
          "startTime": "2017-12-01T08:00:00Z"
        }
      },
      "viewableImpressions": {}
    }
  ]
}

Uwaga: pola z wartością 0 dla danego wskaźnika nie pojawią się w odpowiedzi. puste wskaźniki billedImpressions i measurableImpressions powyżej wskazują że zarówno wartość, jak i wariancja dla tych wartości mają wartość 0.

Ostrzeżenie: w przypadku podziału danych w odpowiedzi odpowiedź nie będzie zawierać wierszy, jeśli nie zawierają one ani jednej wartości innej niż zero. Na przykład, gdy plik określono timeSeriesGranularity, odpowiedź nie będzie zawierać wierszy dla żadnego timeInterval w określonym zakresie czasowym zestawu filtrów, w którym wszystkie dane wynoszą 0.