Zmień

Skrypty Google Ads obsługują ogólne mutacje dostępne w interfejsie Google Ads API. Większość operacji, które można wykonać w GoogleAdsService.mutate, można też przeprowadzać w skryptach Google Ads, w tym tworzyć kampanie i nimi zarządzać.

Ta funkcja umożliwia dostęp do tak dużej części interfejsu Google Ads API, że aby z niej korzystać, warto mieć podstawową wiedzę o konwencjach interfejsu Google Ads API. Wiele aspektów można pominąć, np. tokeny dewelopera i autoryzację, ponieważ są one obsługiwane przez skrypty Google Ads. Musisz jednak utworzyć prawidłowe żądanie zmiany.

Zanim przejdziesz do tego przewodnika, zapoznaj się z tymi podstawowymi materiałami dotyczącymi interfejsu REST Google Ads API:

Podstawowy przykład

Aby zademonstrować tę funkcję, rozważmy ten podstawowy przykład, który tworzy budżet kampanii:

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

Wywołanie funkcji AdsApp.mutate przyjmuje obiekt JSON reprezentujący pojedynczy element MutateOperation. W tym obiekcie określasz rodzaj wykonywanej operacji – w tym przypadku jest to campaignBudgetOperation. Następnie podaj create, remove lub oba te atrybuty: updateupdateMask. Konkretne pola w createupdate zależą od typu zasobu, na którym działasz.

Tworzenie operacji

Istnieje kilka strategii, których możesz użyć, aby utworzyć prawidłową operację. W przypadku budżetu kampanii możesz na przykład zapoznać się z dokumentacją referencyjną REST dotyczącą budżetu kampanii, aby zobaczyć listę wszystkich prawidłowych pól, a następnie wypełnić odpowiednie pola lub napisać w skrypcie niestandardowy kod JavaScript, aby utworzyć odpowiedni obiekt.

Możesz też spróbować dynamicznie utworzyć operację za pomocą funkcji „Wypróbuj” w przypadku budżetu kampanii, która umożliwia dynamiczne tworzenie treści żądania przez wybieranie pól, które chcesz dodać. Następnie możesz wyodrębnić zawartość operacji z wygenerowanego wyniku i dodać ją do wywołania mutate po określeniu typu operacji.

Typy operacji

Utwórz

W operacji określ create, przekazując reprezentację obiektu zasobu, który chcesz utworzyć.

Przykład operacji create znajdziesz powyżej.

Usuń

W operacji podaj remove, przekazując nazwę zasobu, który chcesz usunąć, na przykład:

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

Jeśli nie znasz nazwy zasobu dla danego typu, możesz ją pobrać za pomocą żądania Adsapp.search.

Aktualizuj

W operacji określ update, przekazując obiekt z określoną nazwą zasobu, aby system mógł określić, który obiekt chcesz zaktualizować. Dodatkowo wypełnij wszystkie pola, w których chcesz zaktualizować wartości, i określ updateMask, które wskazuje, które pola chcesz zmienić w tym żądaniu. Nie podawaj nazwy zasobu w masce aktualizacji.

Przykład operacji update:

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

Obsługa wyników

Niezależnie od typu operacji zwracana wartość to MutateResult. Możesz użyć zwróconej nazwy zasobu, aby po zmianie wysłać zapytanie o jego bieżący stan i sprawdzić, czy operacja się powiodła, czy też wystąpiły jakieś błędy.

Oto przykład przedstawiający podstawowy proces sprawdzania wyniku i drukowania informacji w dziennikach:

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

Wiele operacji

Skrypty Google Ads obsługują też modyfikowanie wielu operacji w ramach jednego żądania za pomocą metody AdsApp.mutateAll. Możesz tworzyć powiązane ze sobą obiekty, np. pełną hierarchię kampanii, w ramach jednego żądania. Opcjonalnie możesz sprawić, że cały zestaw operacji będzie niepodzielny, tak aby w przypadku niepowodzenia którejkolwiek z nich żadna nie została wykonana.

Wartość zwracana to tablica obiektów MutateResult, po jednym dla każdej podanej operacji i w tej samej kolejności co operacje początkowe.

Ta funkcja działa tak samo jak funkcja interfejsu Google Ads API, więc pełne wyjaśnienie tymczasowych identyfikatorów i innych kwestii znajdziesz w przewodniku Najlepsze praktyki dotyczące interfejsu Google Ads API. Pamiętaj, że w przewodniku nazwy pól są oznaczane symbolem snake_case, a w dokumentacji skryptów Google Ads symbolem lowerCamelCase. Oba te przypadki są akceptowane w skryptach Google Ads, więc możesz skopiować kod bezpośrednio z tego przewodnika.

Aby wykonać wiele operacji w ramach jednego żądania, zbierz wszystkie operacje w tablicy, a następnie wywołaj AdsApp.mutateAll. Wywołanie mutateAll przyjmuje jako pierwszy argument tablicę operacji, a jako drugi argument opcjonalny tablicę opcji, w tym:

  • apiVersion: możesz określić niestandardową wersję interfejsu API, np. V20, jeśli chcesz użyć wersji innej niż domyślna w skryptach. Możesz używać dowolnej publicznie dostępnej wersji.
  • partialFailure: to pole ma domyślnie wartość true. Jeśli ta opcja ma wartość true, wykonywane są prawidłowe operacje, a nieudane operacje zwracają błędy. Jeśli ta opcja ma wartość false, w przypadku niepowodzenia którejkolwiek operacji żadne operacje nie są wykonywane, co sprawia, że ten zestaw operacji jest niepodzielny.

Oto przykład z wieloma operacjami, który w ramach jednej niepodzielnej prośby tworzy budżet kampanii, kampanię i grupę reklam.

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