Errores y solución de problemas

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 travelDuration sea al menos "1s", termine con "s" (como "1800s") y no supere el límite del modo: 3600s (60 minutos) para DRIVE y TWO_WHEELER, o 7200s (120 minutos) para WALK y BICYCLE. Se rechazan los valores cero ("0s"), negativos y de menos de 1 segundo (como "0.5s").
    • Preferencia de tráfico: Asegúrate de que routingPreference no esté configurado como TRAFFIC_AWARE cuando travelMode sea WALK o BICYCLE. El tráfico en vivo solo se admite para DRIVE y TWO_WHEELER.
    • Enums obligatorios: Asegúrate de que se especifiquen travelMode y travelDirection (FROM o TO) y de que no se establezcan en *_UNSPECIFIED.
    • Coordenadas de origen (location): Establece latitude (en [-90, 90]) y longitude (en [-180, 180]). Un campo omitido se trata como 0 sin un error: si se omiten ambos, se obtiene (0, 0), que se rechaza; si se omite solo latitude, el origen se coloca en el ecuador; y si se omite solo longitude, se coloca en el meridiano de Greenwich.
    • Formato del ID de lugar (place): Asegúrate de que place sea un ID de lugar o un nombre de recurso de places/{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, como isochrone, isochrone.geoJson o *.
    • Clave de API no válida (API_KEY_INVALID): Una clave de API mal formada o no reconocida en X-Goog-Api-Key o ?key= devuelve 400 INVALID_ARGUMENT con el motivo API_KEY_INVALID.
  • 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= o Authorization: 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.
  • 404 NOT_FOUND: No se pudo resolver el origen ni ajustarlo a la red vial:
    • No se pudo resolver el place en una ubicación. Verifica que el ID de lugar sea válido y esté actualizado.
    • El centroide de origen location o place se 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 para WALK y BICYCLE). 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).
  • 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 429 con 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.