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: update
i updateMask
. Konkretne pola w create
i update
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});