Tipos de errores

Clasificamos los errores en las siguientes categorías generales:

  • Autenticación
  • Se puede volver a intentar.
  • Validación
  • Relacionado con la sincronización

Aunque estas categorías no abarcan todos los errores posibles, y algunos pueden pertenecer a más de una categoría, pueden servir como punto de partida para estructurar el manejo de errores de tu app. Consulta Errores comunes para obtener más detalles sobre un error en particular.

Errores de autenticación

La autenticación se refiere a si un usuario otorgó permiso a tu app para acceder a Google Ads en su nombre. La autenticación se administra a través de las credenciales que genera el flujo de OAuth2.

La razón más común por la que un error de autenticación surge por factores más allá de tu control es que el usuario autenticado revocó el permiso que le dio a tu app para actuar en su nombre. Por ejemplo, si tu app administra cuentas de Google Ads diferentes para clientes independientes y se autentica por separado como cada cliente cuando administra la cuenta de ese cliente, un cliente podría revocar el acceso a tu app en cualquier momento. Según cuándo se haya revocado el acceso, la API puede mostrar directamente un error AuthenticationError.OAUTH_TOKEN_REVOKED, o los objetos de credenciales integrados en las bibliotecas cliente pueden generar una excepción revocada de token. En cualquier caso, si tu app tiene una IU para tus clientes, podría pedirles que reinicien el flujo de OAuth2 para restablecer el permiso de tu app a fin de actuar en su nombre.

Errores que se pueden volver a intentar

Algunos errores, como TRANSIENT_ERROR o INTERNAL_ERROR, pueden indicar un problema temporal que se podría resolver volviendo a intentar la solicitud después de una breve pausa.

En el caso de las solicitudes iniciadas por el usuario, una estrategia es indicar de inmediato un error en tu IU y brindarle al usuario la opción de activar un reintento. Como alternativa, tu app podría reintentar la solicitud de forma automática primero y solo exponer el error en la IU después de alcanzar una cantidad máxima de reintentos o el tiempo de espera total del usuario.

Para las solicitudes iniciadas en el backend, la app debe reintentar la solicitud automáticamente hasta una cantidad máxima de reintentos.

Cuando reintentes solicitudes, usa una política de retirada exponencial. Por ejemplo, si primero realizas una pausa 5 segundos antes del primer reintento, podrías pausar 10 segundos después del segundo y 20 segundos después del tercer reintento. La retirada exponencial ayuda a garantizar que no llames a la API de manera demasiado agresiva.

Errores de validación

Los errores de validación indican que no se aceptó una entrada en una operación. Por ejemplo, PolicyViolationError, DateError, DateRangeError, StringLengthError y UrlFieldError.

Los errores de validación ocurren con mayor frecuencia en solicitudes iniciadas por el usuario, en las que un usuario ingresó una entrada no válida. En estos casos, debes proporcionar un mensaje de error adecuado al usuario según el error específico de la API que recibiste. Además, puedes validar la entrada del usuario para detectar errores comunes antes de realizar una llamada a la API, lo que hace que tu app sea más responsiva y el uso de la API sea más eficiente. En el caso de las solicitudes del backend, la app puede agregar la operación con errores a una cola para que un operador humano la revise.

Muchas aplicaciones de Google Ads mantienen una base de datos local para almacenar sus objetos de Google Ads. Uno de los desafíos de este enfoque es que la base de datos local puede no estar sincronizada con los objetos reales en Google Ads. Por ejemplo, un usuario podría borrar un grupo de anuncios directamente en Google Ads, pero la app y la base de datos local no están al tanto del cambio y continúan emitiendo llamadas a la API como si el grupo de anuncios existiera. Estos problemas de sincronización pueden manifestarse como una variedad de errores, como DUPLICATE_CAMPAIGN_NAME, DUPLICATE_ADGROUP_NAME, AD_NOT_UNDER_ADGROUP, CANNOT_OPERATE_ON_REMOVED_ADGROUPAD y muchos más.

En el caso de las solicitudes iniciadas por el usuario, una estrategia es alertarlo sobre un posible problema de sincronización, iniciar de inmediato un trabajo que recupere la clase relevante de objetos de Google Ads y actualice la base de datos local y, luego, solicitarle al usuario que actualice la IU.

En el caso de las solicitudes de backend, algunos errores proporcionan suficiente información para que tu app corrija de forma automática e incremental tu base de datos local. Por ejemplo, CANNOT_OPERATE_ON_REMOVED_ADGROUPAD debería hacer que tu app marque ese anuncio como quitado de tu base de datos local. Los errores que no puedes controlar de esta manera podrían hacer que tu app inicie un trabajo de sincronización más completo o se agregue a una cola para que un operador humano la revise.