Questa guida spiega come l'API Google Ads gestisce e comunica gli errori. Comprendere la struttura e il significato degli errori API è fondamentale per creare applicazioni robuste in grado di gestire correttamente i problemi, dall'input non valido all'indisponibilità temporanea del servizio.
L'API Google Ads segue il modello di errore standard delle API di Google, basato sui
codici di stato gRPC. Ogni risposta API che genera un errore
include un oggetto Status contenente:
- Un codice di errore numerico.
- Un messaggio di errore.
- (Facoltativo) Ulteriori dettagli sull'errore.
Codici di errore canonici
L'API Google Ads utilizza un insieme di codici di errore canonici definiti da gRPC e HTTP. Questi codici forniscono un'indicazione generale del tipo di errore. Devi sempre controllare prima questo codice numerico per comprendere la natura fondamentale del problema.
La tabella seguente riassume i codici più comuni che potresti riscontrare quando utilizzi l'API Google Ads:
| Codice gRPC | Codice HTTP | Nome enum | Descrizione | Linee guida |
|---|---|---|---|---|
| 0 | 200 | OK |
Nessun errore; indica l'esito positivo. | N/D |
| 1 | 499 | CANCELLED |
L'operazione è stata annullata, in genere dal client. | In genere significa che il client ha smesso di attendere. Controlla i timeout lato client. |
| 2 | 500 | UNKNOWN |
Si è verificato un errore sconosciuto. Potresti trovare maggiori dettagli nel messaggio o nei dettagli dell'errore. | Considera come errore del server. Spesso può essere riprovato con backoff. |
| 3 | 400 | INVALID_ARGUMENT |
Il client ha specificato un argomento non valido. Ciò indica un problema che impedisce all'API di elaborare la richiesta, ad esempio un nome della risorsa non valido o un valore non valido. | Errore del client: rivedi i parametri della richiesta e assicurati che soddisfino i requisiti dell'API. I dettagli dell'errore in genere forniscono informazioni su quale argomento non era valido e in che modo. Utilizza questi dettagli per correggere la richiesta. Non riprovare senza correggere la richiesta. |
| 4 | 504 | DEADLINE_EXCEEDED |
La scadenza è terminata prima che l'operazione potesse essere completata. | Errore del server: spesso temporaneo. Valuta la possibilità di riprovare con il backoff esponenziale. |
| 5 | 404 | NOT_FOUND |
Non è stata trovata un'entità richiesta, ad esempio una campagna o un gruppo di annunci. | Errore client: verifica l'esistenza e l'ID delle risorse a cui stai tentando di accedere. Non riprovare senza correggere. |
| 6 | 409 | ALREADY_EXISTS |
L'entità che il cliente ha tentato di creare esiste già. | Errore del client: evita di creare risorse duplicate. Controlla se la risorsa esiste prima di tentare di crearla. |
| 7 | 403 | PERMISSION_DENIED |
Il chiamante non dispone dell'autorizzazione per eseguire l'operazione specificata. | Errore client: controlla l'autenticazione, l'autorizzazione e i ruoli utente per l'account Google Ads. Non riprovare senza risolvere i problemi di autorizzazione. |
| 8 | 429 | RESOURCE_EXHAUSTED |
Una risorsa è stata esaurita (ad esempio, hai superato la quota) o un sistema è sovraccarico. | Errore client/server: in genere richiede attesa. Implementa il backoff esponenziale e riduci potenzialmente il tasso di richieste. Consulta la sezione Limiti e quote API. |
| 9 | 400 | FAILED_PRECONDITION |
L'operazione è stata rifiutata perché il sistema non si trova nello stato richiesto per l'esecuzione dell'operazione. Ad esempio, manca un campo obbligatorio. | Errore del client: la richiesta è valida, ma lo stato non è corretto. Esamina i dettagli dell'errore per comprendere l'errore di precondizione. Non riprovare senza correggere lo stato. |
| 10 | 409 | ABORTED |
L'operazione è stata interrotta, in genere a causa di un problema di concorrenza come un conflitto di transazioni. | Errore del server: spesso è sicuro riprovare con un breve backoff. |
| 11 | 400 | OUT_OF_RANGE |
L'operazione è stata tentata oltre l'intervallo valido. | Errore client: correggi l'intervallo o l'indice. |
| 12 | 501 | UNIMPLEMENTED |
L'operazione non è implementata o non è supportata dall'API. | Errore del client: controlla la versione dell'API e le funzionalità disponibili. Non riprovare. |
| 13 | 500 | INTERNAL |
Si è verificato un errore interno. Questo è un problema generico lato server. | Errore del server: in genere è possibile riprovare con il backoff esponenziale. Se il problema persiste, segnalalo. |
| 14 | 503 | UNAVAILABLE |
Servizio temporaneamente non disponibile. Molto probabilmente si tratta di una condizione temporanea. | Errore del server: ti consigliamo vivamente di riprovare con il backoff esponenziale. |
| 15 | 500 | DATA_LOSS |
Perdita o danneggiamento dei dati non recuperabili. | Errore del server: raro. Indica un problema grave. Non riprovare. Se il problema persiste, segnalalo. |
| 16 | 401 | UNAUTHENTICATED |
La richiesta non ha credenziali di autenticazione valide. | Errore del client: verifica i token di autenticazione e le credenziali. Non riprovare senza correggere l'autenticazione. |
Per ulteriori dettagli su questi codici, consulta la Guida alla progettazione delle API - Codici di errore.
Comprendere i dettagli dell'errore
Oltre al codice di primo livello, l'API Google Ads fornisce informazioni sugli errori più specifiche
all'interno del campo details dell'oggetto Status. Questo campo spesso contiene un proto GoogleAdsFailure, che include un elenco di singoli oggetti GoogleAdsError.
Ogni oggetto GoogleAdsFailure contiene:
errors: un elenco di oggettiGoogleAdsError, ognuno dei quali descrive in dettaglio un errore specifico che si è verificato.request_id: un ID univoco per la richiesta, utile per il debug e l'assistenza.
Ogni oggetto GoogleAdsError fornisce:
error_code: un errore più granulare, specifico dell'API Google AdsErrorCode(errori comuni), ad esempioAuthenticationError.NOT_ADS_USER.message: una descrizione leggibile dell'errore specifico.trigger: ilValueche ha causato l'errore, se applicabile.location: unErrorLocationche descrive in quale punto della richiesta si è verificato l'errore, inclusi i percorsi dei campi.details:ErrorDetailsaggiuntivi, ad esempio i motivi di errore non pubblicati.
Esempio di dettagli dell'errore
Quando ricevi un errore, la tua libreria client ti consentirà di
accedere a questi dettagli. Ad esempio, un INVALID_ARGUMENT (Code 3) potrebbe avere
dettagli GoogleAdsFailure come questi:
{
"code": 3,
"message": "The request was invalid.",
"details": [
{
"@type": "type.googleapis.com/google.ads.googleads.v25.errors.GoogleAdsFailure",
"errors": [
{
"errorCode": {
"fieldError": "REQUIRED"
},
"message": "The required field was not present.",
"location": {
"fieldPathElements": [
{ "fieldName": "operations", "index": 0 },
{ "fieldName": "create" },
{ "fieldName": "name" }
]
}
},
{
"errorCode": {
"stringLengthError": "TOO_SHORT"
},
"message": "The provided string is too short.",
"trigger": {
"stringValue": ""
},
"location": {
"fieldPathElements": [
{ "fieldName": "operations", "index": 0 },
{ "fieldName": "create" },
{ "fieldName": "description" }
]
}
}
],
"requestId": "AbCdEfGhIjKlMnOpQrStUv"
}
]
}
In questo esempio, nonostante il INVALID_ARGUMENT di primo livello, i dettagli di
GoogleAdsFailure indicano che i campi name e
description hanno causato il problema e il motivo (REQUIRED e
TOO_SHORT, rispettivamente).
Individuare i dettagli dell'errore
Il modo in cui accedi ai dettagli degli errori dipende dal fatto che utilizzi chiamate API standard, errori parziali o streaming.
Chiamate API standard e di streaming
Quando una chiamata API non va a buon fine senza utilizzare l'errore parziale, incluse le chiamate di streaming, l'oggetto GoogleAdsFailure viene restituito come parte dei metadati finali nelle intestazioni di risposta gRPC. Se
utilizzi REST per le chiamate standard, GoogleAdsFailure
viene restituito nella risposta HTTP. Le librerie client in genere
lo mostrano come eccezione con un attributo GoogleAdsFailure.
Errore parziale
Se utilizzi l'errore parziale, gli errori relativi alle operazioni non riuscite vengono restituiti nel campo partial_failure_error della risposta, non nelle intestazioni della risposta. In questo caso, l'GoogleAdsFailure è incorporato in un oggetto google.rpc.Status nella risposta.
Job batch
Per l'elaborazione batch, gli errori per le singole operazioni possono
essere trovati chiamando BatchJobService.ListBatchJobResults
al termine del job. Ogni risultato dell'operazione includerà un campo status
contenente i dettagli dell'errore se l'operazione non è riuscita.
ID richiesta
L'request-id è una stringa univoca che identifica la tua richiesta API ed è
essenziale per la risoluzione dei problemi.
Puoi trovare request-id in più posizioni:
GoogleAdsFailure: se una chiamata API non va a buon fine e viene restituitoGoogleAdsFailure, conterrà unrequest_id.- Metadati finali:per le richieste riuscite e non riuscite,
request-idè disponibile nei metadati finali della risposta gRPC. - Intestazioni di risposta:per le richieste riuscite e non riuscite,
request-idè disponibile anche nelle intestazioni di risposta gRPC e risposta HTTP, ad eccezione delle richieste di streaming riuscite. SearchGoogleAdsStreamResponse: Per le richieste di streaming, ogni messaggioSearchGoogleAdsStreamResponsecontiene un camporequest_id.
Quando registri errori o contatti l'assistenza, assicurati di includere
request-id per facilitare la diagnosi dei problemi.
Best practice per la gestione degli errori
Per creare applicazioni resilienti, implementa le seguenti best practice:
Esamina i dettagli dell'errore:analizza sempre il campo
detailsdell'oggettoStatus, cercando in particolareGoogleAdsFailure. I valori granularierror_code,messageelocationall'interno diGoogleAdsErrorforniscono le informazioni più utili per il debug e il feedback degli utenti.Distinguere gli errori client da quelli del server:
- Errori del client:codici come
INVALID_ARGUMENT,NOT_FOUND,PERMISSION_DENIED,FAILED_PRECONDITION,UNAUTHENTICATED. Questi richiedono modifiche alla richiesta o allo stato/alle credenziali dell'applicazione. Non riprovare a inviare la richiesta senza risolvere il problema. - Errori del server:codici come
UNAVAILABLE,INTERNAL,DEADLINE_EXCEEDED,UNKNOWN. Questi suggeriscono un problema temporaneo con il servizio API.
- Errori del client:codici come
Implementare una strategia di ripetizione dei tentativi:
- Quando riprovare: riprova solo in caso di errori del server temporanei come
UNAVAILABLE,DEADLINE_EXCEEDED,INTERNAL,UNKNOWNeABORTED. - Backoff esponenziale:utilizza un algoritmo di backoff esponenziale per attendere periodi sempre più lunghi tra i nuovi tentativi. In questo modo si evita di sovraccaricare un servizio già sotto stress. Ad esempio, attendi 1 secondo, poi 2 secondi, poi 4 secondi, fino a un numero massimo di tentativi o un tempo di attesa totale.
- Jitter:aggiungi una piccola quantità casuale di "jitter" ai ritardi di backoff per evitare il problema del "thundering herd", in cui molti client riprovano <x0A>contemporaneamente.
- Quando riprovare: riprova solo in caso di errori del server temporanei come
Registra i log in modo completo:registra la risposta completa all'errore, inclusi tutti i dettagli, in particolare l'ID richiesta. Queste informazioni sono essenziali per il debug e per segnalare problemi all'Assistenza Google, se necessario.
Fornisci feedback agli utenti:in base ai codici e ai messaggi
GoogleAdsErrorspecifici, fornisci feedback chiari e utili agli utenti della tua applicazione. Ad esempio, invece di dire semplicemente "Si è verificato un errore", puoi dire "È obbligatorio il nome della campagna" o "L'ID del gruppo di annunci fornito non è stato trovato".
Se segui queste linee guida, puoi diagnosticare e gestire in modo efficace gli errori restituiti dall'API Google Ads, ottenendo applicazioni più stabili e intuitive.