La API de Isochrones devuelve errores con el formato JSON estándar de google.rpc.Status de Google Cloud:
{
"error": {
"code": 400,
"message": "Violation in GenerateIsochroneRequest.travel_duration: travel_duration must be at least 1 second and not exceed 3600 seconds (60 minutes) for DRIVE or TWO_WHEELER mode or 7200 seconds (120 minutes) for other modes",
"status": "INVALID_ARGUMENT"
}
}
Usa el campo status (o HTTP code) para controlar los errores de manera programática. El texto de message está destinado a desarrolladores y puede cambiar, por lo que no debes analizarlo.
Cuando trabajes con la API de Isochrones, es posible que encuentres los siguientes códigos de estado de error comunes:
400 INVALID_ARGUMENT: La solicitud contiene parámetros no válidos o una sintaxis con formato incorrecto:- Límites de duración: Asegúrate de que
travelDurationsea al menos"1s", termine con"s"(como"1800s") y no supere el límite del modo:3600s(60 minutos) paraDRIVEyTWO_WHEELER, o7200s(120 minutos) paraWALKyBICYCLE. Se rechazan los valores cero ("0s"), negativos y de menos de 1 segundo (como"0.5s"). - Preferencia de tráfico: Asegúrate de que
routingPreferenceno esté configurado comoTRAFFIC_AWAREcuandotravelModeseaWALKoBICYCLE. El tráfico en vivo solo se admite paraDRIVEyTWO_WHEELER. - Enums obligatorios: Asegúrate de que se especifiquen
travelModeytravelDirection(FROMoTO) y de que no se establezcan en*_UNSPECIFIED. - Coordenadas de origen (
location): Establecelatitude(en[-90, 90]) ylongitude(en[-180, 180]). Un campo omitido se trata como0sin un error: si se omiten ambos, se obtiene(0, 0), que se rechaza; si se omite sololatitude, el origen se coloca en el ecuador; y si se omite sololongitude, se coloca en el meridiano de Greenwich. - Formato del ID de lugar (
place): Asegúrate de queplacesea un ID de lugar o un nombre de recurso deplaces/{place_id}(por ejemplo,"places/ChIJIQBpAG2ahYAR_6128GcTUEo"), sin segmentos de ruta adicionales, y que haga referencia a un ID de lugar válido. - Máscara de campo (
X-Goog-FieldMask): Si se proporciona, el encabezado debe hacer referencia a rutas de acceso de respuesta válidas, comoisochrone,isochrone.geoJsono*. - Clave de API no válida (
API_KEY_INVALID): Una clave de API mal formada o no reconocida enX-Goog-Api-Keyo?key=devuelve400 INVALID_ARGUMENTcon el motivoAPI_KEY_INVALID.
- Límites de duración: Asegúrate de que
403 PERMISSION_DENIED: No se pudo realizar la autenticación o la autorización:- No se proporcionaron credenciales de autenticación (token
X-Goog-Api-Key,?key=oAuthorization: Bearer) en la solicitud. - La API de Isochrones (
isochrones.googleapis.com) no está habilitada en tu proyecto de Google Cloud o no está habilitada la facturación. - Tu clave de API tiene restricciones de destino de API, dirección IP o referente HTTP que bloquean las solicitudes a
isochrones.googleapis.com.
- No se proporcionaron credenciales de autenticación (token
404 NOT_FOUND: No se pudo resolver el origen ni ajustarlo a la red vial:- No se pudo resolver el
placeen una ubicación. Verifica que el ID de lugar sea válido y esté actualizado. - El centroide de origen
locationoplacese encuentra más lejos de un tramo de ruta compatible con el medio de transporte que la distancia máxima de ajuste (aproximadamente 200 metros, o menos paraWALKyBICYCLE). Acerca la coordenada a una ruta pública o pasa las coordenadas de la entrada de la ruta en lugar de un parque grande o un ID de lugar de referencia. - La coordenada se encuentra en un área sin datos de ruta (como el océano abierto).
- No se pudo resolver el
429 RESOURCE_EXHAUSTED: Tu proyecto superó el límite de cuota por minuto (el valor predeterminado es de 300 solicitudes por minuto):{ "error": { "code": 429, "message": "Quota exceeded for quota metric 'Requests' and limit 'Requests per minute' of service 'isochrones.googleapis.com'.", "status": "RESOURCE_EXHAUSTED" } }Limita los porcentajes de solicitudes de los clientes y vuelve a intentar las respuestas
429con una retirada exponencial con una variación aleatoria.503 UNAVAILABLE: El servicio no está disponible temporalmente o está sobrecargado. Vuelve a intentar la solicitud con una retirada exponencial.500 INTERNAL: Se produjo un error interno del servidor, como un tiempo de espera del backend. Vuelve a intentar la solicitud con una retirada exponencial.