Context: configuración de Google Maps/Places para estado_turismo (señal de sobreprecio por calificaciones promedio en zonas turísticas).
Decisiones tomadas
- Usar solo Places API (New) (
places.googleapis.com, biblioteca: console.cloud.google.com/apis/library/places.googleapis.com). No habilitar Legacy: misma base de datos, deprecada. Combinar ambas NO da más data. - Usar también Places Aggregate API (servicio
areainsights.googleapis.com, endpoint POST https://areainsights.googleapis.com/v1:computeInsights; biblioteca: console.cloud.google.com/apis/library/areainsights.googleapis.com) — OJO: NO es placesaggregate.googleapis.com. Para conteos de competencia por estratos (price level / rating / tipo, filtros locationFilter, typeFilter.includedTypes, priceLevels, ratingFilter, operatingStatus en el body). Devuelve solo conteos totales (INSIGHT_COUNT) o hasta 100 IDs (INSIGHT_PLACES), no detalle por negocio. Contrastar con detalle individual de Places (New). - La API key DEBE ser estándar, NO account-bound. Account-bound keys solo funcionan con Vertex y Gemini (error: “Only Agent Platform (Vertex) API and Gemini API are supported by account bound keys at this time”). Crear en APIs y servicios → Credenciales → + Crear credenciales → Clave de API (estándar).
- Restringir la clave por IP del servidor y por APIs (Places API New + Places Aggregate API).
- Requisito previo: facturación habilitada en el proyecto (Maps Platform lo exige).
- Otras APIs (Geocoding, Maps Embed, Solar, Weather, Street View…) NO se usan. Geocoding solo si un destino viene como nombre sin lat/lng.
- PENDIENTE POR EXPLICAR (sí se necesitan): Distance Matrix API y Route Optimization API. User las confirmó como necesarias, motivación por definir — no activar hasta que explique el caso de uso.
Próximo paso pendiente
- Verificar en el repo si la señal asume conteos por estrato para integrar Aggregate, o si hay que tocar el modelo.
- Generar CRON_SECRET con
openssl rand -hex 32. - Campos .env: GOOGLE_PLACES_API_KEY / BQ_DATASET / GOOGLE_APPLICATION_CREDENTIALS / SPAB_DATA_DIR / SPAB_RAW_DIR / CRON_SECRET.