Este guia explica como a API Google Ads processa e comunica erros. Entender a estrutura e o significado dos erros da API é fundamental para criar aplicativos robustos que possam lidar com problemas, desde entradas inválidas até indisponibilidade temporária do serviço.
A API Google Ads segue o modelo de erro padrão da API Google, que é baseado
em 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 de 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 pelo 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, isso 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 ou nos detalhes do erro. | Trate como um erro do servidor. Muitas vezes, é possível tentar novamente com 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 malformado 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 do servidor: geralmente temporário. Considere tentar novamente com espera exponencial. |
| 5 | 404 | NOT_FOUND |
Algumas entidades solicitadas, como uma campanha ou um grupo de anúncios, não foram encontradas. | Erro do cliente: verifique a existência e o ID dos recursos que você está tentando acessar. Não tente novamente sem correção. |
| 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 os papéis do usuário na 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 a cota) ou um sistema está sobrecarregado. | Erro do cliente/servidor: geralmente requer espera. Implemente a espera exponencial e, possivelmente, reduza a taxa de solicitações. Consulte Limites e cotas da API. |
| 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 pré-condição. 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 do 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 novamente. |
| 13 | 500 | INTERNAL |
Ocorreu um erro interno. Essa é uma captura geral para problemas do lado do servidor. | Erro do servidor: geralmente pode ser repetido com espera exponencial. Se persistir, informe o problema. |
| 14 | 503 | UNAVAILABLE |
O serviço está indisponível no momento. Esta é provavelmente uma condição temporária. | Erro do servidor: é altamente recomendável tentar novamente com espera exponencial. |
| 15 | 500 | DATA_LOSS |
Perda ou corrupção irrecuperável de dados. | Erro do servidor: raro. Indica um problema grave. Não tente novamente. Se 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 e credenciais de autenticação. Não tente novamente sem corrigir a autenticação. |
Para mais detalhes sobre esses códigos, consulte o Guia de design da API – Códigos de 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 GoogleAdsFailure
proto, que inclui uma lista de objetos individuais
GoogleAdsError.
Cada GoogleAdsFailure objeto contém:
errors: uma lista de objetosGoogleAdsError, cada um detalhando um erro específico que ocorreu.request_id: um ID exclusivo da solicitação, útil para depuração e suporte.
Cada GoogleAdsError objeto fornece:
errorCode: um código de erro mais granular e específico da API Google Ads, comoAuthenticationError.NOT_ADS_USER.message: uma descrição legível do erro específico.trigger: o valor que causou o erro, se aplicável.location: descreve onde o erro ocorreu na solicitação, incluindo caminhos de campo.details: mais detalhes do erro, como motivos de erro não publicados.
Exemplo de detalhes do erro
Quando você recebe um erro, a biblioteca de cliente
permite acessar 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.v24.errors.GoogleAdsFailure",
"errors": [
{
"errorCode": {
"fieldError": "REQUIRED"
},
"message": "The required field was not present.",
"location": {
"fieldPathElements": [
{ "fieldName": "operations" },
{ "fieldName": "create" },
{ "fieldName": "name" }
]
}
},
{
"errorCode": {
"stringLengthError": "TOO_SHORT"
},
"message": "The provided string is too short.",
"trigger": {
"stringValue": ""
},
"location": {
"fieldPathElements": [
{ "fieldName": "operations" },
{ "fieldName": "create" },
{ "fieldName": "description" }
]
}
}
]
}
]
}
Neste exemplo, apesar do INVALID_ARGUMENT de nível superior, os
GoogleAdsFailure detalhes informam que os
name e description campos causaram o problema e por quê
(REQUIRED e
TOO_SHORT,
respectivamente).
Localizar detalhes do erro
A maneira como você acessa 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 streaming
chamadas, o
GoogleAdsFailure objeto é 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
exibem isso como uma exceção com um
GoogleAdsFailure atributo.
Falha parcial
Se você estiver usando 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 o processamento em lote, os erros de
operações individuais podem ser encontrados recuperando os resultados do job em lote após
a conclusão do job. Cada resultado da operação vai incluir um campo status que contém 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.
É possível 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-idestá também disponível nos cabeçalhos de resposta do gRPC e resposta HTTP, com exceção das solicitações de streaming bem-sucedidas. SearchGoogleAdsStreamResponse: para solicitações de streaming, cadaSearchGoogleAdsStreamResponsemensagem conté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:
Inspecionar detalhes do erro: sempre analise o
detailscampo doStatusobjeto, procurando especificamente porGoogleAdsFailure. O granularerrorCode,message, elocationdentro deGoogleAdsErrorfornecem as informações mais acionáveis para depuração e feedback do usuário.Diferenciar erros do cliente e do servidor:
- Erros do cliente: códigos como
INVALID_ARGUMENT,NOT_FOUND,PERMISSION_DENIED,FAILED_PRECONDITION,UNAUTHENTICATED. Eles exigem mudanças na solicitação ou no estado/credenciais do aplicativo. Não tente novamente a solicitação sem resolver o problema. - Erros do servidor: códigos como
UNAVAILABLE,INTERNAL,DEADLINE_EXCEEDED,UNKNOWN. Eles sugerem um problema temporário com o serviço da API.
- Erros do cliente: códigos como
Implementar uma estratégia de repetição:
- Quando tentar novamente: tente apenas para erros de servidor temporários, como
UNAVAILABLE,DEADLINE_EXCEEDED,INTERNAL,UNKNOWNeABORTED. - Espera exponencial: use um algoritmo de espera exponencial para aguardar períodos cada vez maiores entre as novas tentativas. Isso ajuda a evitar a sobrecarga de um serviço já estressado. Por exemplo, aguarde 1 segundo, depois 2 segundos, depois 4 segundos, continuando até um número máximo de novas tentativas ou tempo total de espera.
- Jitter: adicione uma pequena quantidade aleatória de "jitter" aos atrasos de espera para evitar o problema de "excesso de acionamentos", em que muitos clientes tentam novamente simultaneamente.
- Quando tentar novamente: tente apenas para erros de servidor temporários, como
Registre completamente: registre a resposta de erro completa, incluindo todos os detalhes, especialmente o ID da solicitação. Essas informações são essenciais para depuração e para informar problemas ao suporte do Google, se necessário.
Forneça feedback do usuário: com base nos códigos e mensagens específicos
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 estas diretrizes, você pode diagnosticar e tratar com eficiência os erros retornados pela API Google Ads, resultando em aplicativos mais estáveis e fáceis de usar.