Neste guia, explicamos como a API Google Ads lida com erros e os comunica. Entender a estrutura e o significado dos erros de API é crucial para criar aplicativos robustos que possam lidar com problemas, desde entradas inválidas até indisponibilidade temporária de serviço.
A API Google Ads segue o modelo de erro padrão da API do Google, que é baseado nos
códigos de status do gRPC. Cada resposta da API que resulta em um erro
inclui um objeto Status que contém:
- Um código do erro numérico.
- Uma mensagem de erro.
- Detalhes adicionais opcionais do erro.
Códigos de erro canônicos
A API Google Ads usa um conjunto de códigos de erro canônicos definidos por gRPC e HTTP. Esses códigos fornecem uma indicação de alto nível do tipo de erro. Sempre verifique esse código numérico primeiro para entender a natureza fundamental do problema.
A tabela a seguir resume os códigos mais comuns que você pode encontrar ao usar a API Google Ads:
| Código gRPC | Código HTTP | Nome do tipo enumerado | Descrição | Orientação |
|---|---|---|---|---|
| 0 | 200 | OK |
Nenhum erro. Indica sucesso. | N/A |
| 1 | 499 | CANCELLED |
A operação foi cancelada, geralmente pelo cliente. | Normalmente significa que o cliente parou de esperar. Verifique os tempos limite do lado do cliente. |
| 2 | 500 | UNKNOWN |
Ocorreu um erro desconhecido. Mais detalhes podem estar na mensagem de erro ou nos detalhes. | Trate como um erro de servidor. Geralmente, é possível tentar novamente com uma espera. |
| 3 | 400 | INVALID_ARGUMENT |
O cliente especificou um argumento inválido. Isso indica um problema que impede a API de processar a solicitação, como um nome de recurso incorreto ou um valor inválido. | Erro do cliente: revise os parâmetros da solicitação e verifique se eles atendem aos requisitos da API. Os detalhes do erro geralmente fornecem informações sobre qual argumento era inválido e como. Use esses detalhes para corrigir a solicitação. Não tente novamente sem corrigir a solicitação. |
| 4 | 504 | DEADLINE_EXCEEDED |
O prazo expirou antes do término da operação. | Erro de servidor: geralmente temporário. Tente novamente com uma espera exponencial. |
| 5 | 404 | NOT_FOUND |
Alguma entidade solicitada, como uma campanha ou um grupo de anúncios, não foi encontrada. | Erro do cliente: verifique a existência e o ID dos recursos que você está tentando acessar. Não tente novamente sem fazer as correções. |
| 6 | 409 | ALREADY_EXISTS |
A entidade que o cliente tentou criar já existe. | Erro do cliente: evite criar recursos duplicados. Verifique se o recurso existe antes de tentar criá-lo. |
| 7 | 403 | PERMISSION_DENIED |
O autor da chamada não tem permissão para executar a operação especificada. | Erro do cliente: verifique a autenticação, a autorização e as funções de usuário da conta do Google Ads. Não tente novamente sem resolver as permissões. |
| 8 | 429 | RESOURCE_EXHAUSTED |
Um recurso foi esgotado (por exemplo, você excedeu sua cota) ou um sistema está sobrecarregado. | Erro de cliente/servidor: geralmente, é preciso esperar. Implemente a espera exponencial e reduza a taxa de solicitação. Consulte limites da API e cotas. |
| 9 | 400 | FAILED_PRECONDITION |
A operação foi rejeitada porque o estado do sistema não é o necessário para a execução dela. Por exemplo, um campo obrigatório está ausente. | Erro do cliente: a solicitação é válida, mas o estado está incorreto. Analise os detalhes do erro para entender a falha de condição prévia. Não tente novamente sem corrigir o estado. |
| 10 | 409 | ABORTED |
A operação foi cancelada, geralmente devido a um problema de simultaneidade, como um conflito de transação. | Erro de servidor: geralmente é seguro tentar novamente com uma espera curta. |
| 11 | 400 | OUT_OF_RANGE |
Houve uma tentativa da operação depois do intervalo válido. | Erro do cliente: corrija o intervalo ou o índice. |
| 12 | 501 | UNIMPLEMENTED |
A operação não foi implementada ou não é compatível com a API. | Erro do cliente: verifique a versão da API e os recursos disponíveis. Não tente de novo. |
| 13 | 500 | INTERNAL |
Ocorreu um erro interno. Este é um erro geral para problemas do lado do servidor. | Erro de servidor: geralmente, é possível tentar novamente com espera exponencial. Se o erro persistir, informe o problema. |
| 14 | 503 | UNAVAILABLE |
O serviço está temporariamente indisponível. Muito provavelmente, trata-se de uma condição temporária. | Erro de servidor: é altamente recomendável tentar novamente com espera exponencial. |
| 15 | 500 | DATA_LOSS |
Perda ou corrupção irrecuperável de dados. | Erro de servidor: raro. Indica um problema sério. Não tente de novo. Se o erro persistir, informe o problema. |
| 16 | 401 | UNAUTHENTICATED |
A solicitação não tem credenciais de autenticação válidas. | Erro do cliente: verifique seus tokens de autenticação e credenciais. Não tente novamente sem corrigir a autenticação. |
Para mais detalhes sobre esses códigos, consulte o Guia de design de API: códigos do erro.
Entender os detalhes do erro
Além do código de nível superior, a API Google Ads fornece informações de erro mais específicas no campo details do objeto Status. Esse campo geralmente contém um proto
GoogleAdsFailure, que inclui uma lista de
objetos GoogleAdsError individuais.
Cada objeto GoogleAdsFailure contém:
errors: uma lista de objetosGoogleAdsError, cada um detalhando um erro específico que ocorreu.request_id: um ID exclusivo para a solicitação, útil para fins de depuração e suporte.
Cada objeto GoogleAdsError fornece:
error_code: umErrorCodemais granular e específico da API Google Ads (erros comuns), comoAuthenticationError.NOT_ADS_USER.message: uma descrição legível por humanos do erro específico.trigger: oValueque causou o erro, se aplicável.location: umErrorLocationque descreve onde o erro ocorreu na solicitação, incluindo caminhos de campo.details:ErrorDetailsadicionais, como motivos de erro não publicados.
Exemplo de detalhes do erro
Quando você recebe um erro, a biblioteca de cliente permite que você
acesse esses detalhes. Por exemplo, um INVALID_ARGUMENT (Código 3) pode ter
detalhes de GoogleAdsFailure como este:
{
"code": 3,
"message": "The request was invalid.",
"details": [
{
"@type": "type.googleapis.com/google.ads.googleads.v26.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"
}
]
}
Neste exemplo, apesar do INVALID_ARGUMENT de nível superior, os detalhes de GoogleAdsFailure informam que os campos name e description causaram o problema e o motivo (REQUIRED e TOO_SHORT, respectivamente).
Encontrar detalhes do erro
A forma de acessar os detalhes do erro depende se você está usando chamadas de API padrão, falha parcial ou streaming.
Chamadas de API padrão e de streaming
Quando uma chamada de API falha sem usar falha parcial, incluindo chamadas de streaming, o objeto GoogleAdsFailure é retornado como parte dos metadados finais nos cabeçalhos de resposta do gRPC. Se
você estiver usando REST para chamadas padrão, GoogleAdsFailure
será retornado na resposta HTTP. As bibliotecas de cliente geralmente
mostram isso como uma exceção com um atributo
GoogleAdsFailure.
Falha parcial
Se você estiver usando a falha parcial, os erros de operações com falha serão retornados no campo partial_failure_error da resposta, não nos cabeçalhos de resposta. Nesse caso, o
GoogleAdsFailure é incorporado a um
objeto google.rpc.Status na resposta.
jobs em lote
Para processamento em lote, os erros de operações individuais podem ser encontrados chamando BatchJobService.ListBatchJobResults após a conclusão do job. Cada resultado de operação vai incluir um campo status
com detalhes do erro se a operação falhar.
ID da solicitação
O request-id é uma string exclusiva que identifica sua solicitação de API e é essencial para a solução de problemas.
Você pode encontrar o request-id em vários lugares:
GoogleAdsFailure: se uma chamada de API falhar eGoogleAdsFailurefor retornado, ele vai conter umrequest_id.- Metadados finais: para solicitações bem-sucedidas e com falha,
request-idestá disponível nos metadados finais da resposta do gRPC. - Cabeçalhos de resposta: para solicitações bem-sucedidas e com falha,
request-idtambém está disponível nos cabeçalhos de resposta gRPC e resposta HTTP, exceto para solicitações de streaming bem-sucedidas. SearchGoogleAdsStreamResponse: para solicitações de streaming, cada mensagemSearchGoogleAdsStreamResponsecontém um camporequest_id.
Ao registrar erros ou entrar em contato com o suporte, inclua o
request-id para ajudar no diagnóstico de problemas.
Práticas recomendadas para tratamento de erros
Para criar aplicativos resilientes, implemente as seguintes práticas recomendadas:
Inspecione os detalhes do erro: sempre analise o campo
detailsdo objetoStatus, procurando especificamente porGoogleAdsFailure. As informações granulareserror_code,messageelocationemGoogleAdsErrorfornecem as informações mais úteis para depuração e feedback do usuário.Diferencie os erros de cliente dos erros de servidor:
- Erros do cliente: códigos como
INVALID_ARGUMENT,NOT_FOUND,PERMISSION_DENIED,FAILED_PRECONDITION,UNAUTHENTICATED. Elas exigem mudanças na solicitação ou no estado/nas credenciais do aplicativo. Não tente fazer a solicitação novamente sem resolver o problema. - Erros de servidor: códigos como
UNAVAILABLE,INTERNAL,DEADLINE_EXCEEDED,UNKNOWN. Isso sugere um problema temporário com o serviço da API.
- Erros do cliente: códigos como
Implemente uma estratégia de novas tentativas:
- Quando tentar novamente: tente novamente apenas para erros temporários do servidor, como
UNAVAILABLE,DEADLINE_EXCEEDED,INTERNAL,UNKNOWNeABORTED. - Espera exponencial: use um algoritmo de espera exponencial para aguardar períodos crescentes entre as novas tentativas. Isso ajuda a evitar a sobrecarga de um serviço que já está estressado. Por exemplo, aguarde 1s, depois 2s, depois 4s, continuando até um número máximo de novas tentativas ou tempo total de espera.
- Instabilidade: adicione uma pequena quantidade aleatória de "instabilidade" aos atrasos de espera para evitar o problema de "rebanho estrondoso", em que muitos clientes tentam novamente ao mesmo tempo.
- Quando tentar novamente: tente novamente apenas para erros temporários do servidor, como
Registre tudo: registre a resposta de erro completa, incluindo todos os detalhes, especialmente o ID da solicitação. Essas informações são essenciais para depurar e informar problemas ao Suporte do Google, se necessário.
Forneça feedback ao usuário: com base nos códigos e nas mensagens específicos de
GoogleAdsError, forneça feedback claro e útil aos usuários do aplicativo. Por exemplo, em vez de apenas "Ocorreu um erro", você pode dizer "O nome da campanha é obrigatório" ou "O ID do grupo de anúncios fornecido não foi encontrado".
Ao seguir essas diretrizes, você pode diagnosticar e lidar com erros retornados pela API Google Ads, o que resulta em aplicativos mais estáveis e fáceis de usar.