Saltar al contenido principal

Descripción general

La integración OneSignal + Google Cloud SQL habilita la sincronización automática de eventos personalizados desde tu base de datos Cloud SQL a OneSignal. Esto te permite activar Journeys automatizados y campañas de mensajería personalizadas basadas en datos de comportamiento del usuario almacenados en tu base de datos PostgreSQL administrada.

Requisitos

Google Cloud SQL

  • Instancia de Cloud SQL para PostgreSQL (versión 11 o superior recomendada)
  • Acceso a base de datos con permisos de lectura para tablas de eventos
  • Conectividad de red desde OneSignal a tu instancia Cloud SQL
  • Cloud SQL Auth proxy para conexiones seguras (recomendado)

Configuración

1

Configurar acceso a base de datos Cloud SQL

Crea un usuario dedicado para OneSignal con acceso de solo lectura a tablas de eventos:
-- Create OneSignal user
CREATE USER onesignal_reader WITH PASSWORD 'strong_unique_password';

-- Grant schema access
GRANT USAGE ON SCHEMA event_data TO onesignal_reader;

-- Grant table access
GRANT SELECT ON ALL TABLES IN SCHEMA event_data TO onesignal_reader;

-- Grant access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA event_data
GRANT SELECT ON TABLES TO onesignal_reader;
2

Configurar acceso de red

Asegúrate de que OneSignal pueda conectarse a tu instancia Cloud SQL:Opción 1: Authorized Networks (IP pública)
  • En Google Cloud Console, ve a SQL > Instances
  • Selecciona tu instancia → ConnectionsNetworking
  • Agrega direcciones IP de OneSignal a Authorized networks
Opción 2: IP privada (recomendado)
  • Configura tu instancia Cloud SQL con una IP privada
  • Usa Cloud SQL Auth Proxy para conexiones seguras
  • Asegura VPC peering o reglas de firewall apropiadas
Opción 3: Cloud SQL Auth Proxy
  • Descarga y configura el Cloud SQL Auth Proxy
  • Usa autenticación de cuenta de servicio
  • Conéctate a través de túnel proxy seguro
3

Configurar Cloud SQL Auth Proxy (recomendado)

Para seguridad mejorada, usa Cloud SQL Auth Proxy:
# Download Cloud SQL Auth Proxy
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64

# Make executable
chmod +x cloud_sql_proxy

# Run proxy (replace with your instance connection name)
./cloud_sql_proxy -instances=PROJECT:REGION:INSTANCE=tcp:5432
Crea una cuenta de servicio con rol Cloud SQL Client:
gcloud iam service-accounts create onesignal-cloudsql
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:onesignal-cloudsql@PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/cloudsql.client"
4

Agregar integración en OneSignal

In OneSignal, go to Data > Integrations and click Add Integration.Selecciona Google Cloud SQL y proporciona:
  • Instance Connection Name: PROJECT_ID:REGION:INSTANCE_ID
  • Database Name: El nombre de tu base de datos de eventos
  • Username: onesignal_reader
  • Password: La contraseña creada en el Paso 1
  • SSL Mode: require (recomendado para seguridad)
  • Connection Type: Elige entre Direct, Auth Proxy o Private IP
5

Configurar consultas de datos de eventos

Define la consulta SQL para recuperar datos de eventos de tu base de datos Cloud SQL:
SELECT
    event_name,
    user_id,
    created_at as event_timestamp,
    properties as event_payload
FROM event_data.user_events
WHERE created_at >= CURRENT_TIMESTAMP - INTERVAL '1 hour'
ORDER BY created_at DESC
Asegúrate de que tus tablas de eventos incluyan:
  • Nombre/tipo de evento (String)
  • Identificador de usuario (String)
  • Marca de tiempo del evento (Timestamp)
  • Propiedades del evento (JSON/JSONB)
6

Probar la conexión

Haz clic en Test Connection para verificar que OneSignal puede conectarse a tu instancia Cloud SQL y ejecutar la consulta de eventos exitosamente.

Event data mapping

Map your to OneSignal’s custom events format:
OneSignal FieldDescriptionRequired
nameevent_nameEvent identifierYes
external_iduser_idUser identifierYes
timestampevent_timestampWhen event occurredNo
propertiesevent_dataNo

Configuración avanzada

Connection Pooling

Optimiza las conexiones de base de datos para sincronización de eventos de alto volumen:
-- Check current connection limits
SELECT * FROM pg_stat_activity WHERE datname = 'your_database';

-- Optimize for OneSignal connections
ALTER SYSTEM SET max_connections = 200;
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';

Optimización de consultas

Mejora el rendimiento de consultas de eventos:
-- Create index on timestamp for efficient filtering
CREATE INDEX idx_events_created_at ON user_events(created_at);

-- Create composite index for user-based queries
CREATE INDEX idx_events_user_time ON user_events(user_id, created_at);

-- Analyze query performance
EXPLAIN ANALYZE
SELECT event_name, user_id, created_at, properties
FROM user_events
WHERE created_at >= NOW() - INTERVAL '1 hour';

Manejo de datos JSON

Si usas JSONB para propiedades de eventos, optimiza consultas JSON:
-- Create GIN index for JSON properties
CREATE INDEX idx_events_properties ON user_events USING GIN(properties);

-- Query specific JSON properties
SELECT
    event_name,
    user_id,
    properties->>'purchase_amount' as amount,
    properties->>'product_id' as product
FROM user_events
WHERE properties->>'event_type' = 'purchase';
Monitorea el rendimiento de tu instancia Cloud SQL cuando OneSignal consulta datos de eventos. Considera usar réplicas de lectura para cargas de trabajo de analíticas para evitar impactar el rendimiento de producción.

FAQ

¿Con qué frecuencia sincroniza OneSignal eventos desde Cloud SQL?

OneSignal sincroniza datos de eventos basándose en tu programación configurada, con un intervalo mínimo de 15 minutos.

¿Puedo usar réplicas de lectura de Cloud SQL para sincronización de eventos?

Sí, usar réplicas de lectura es recomendado para aislar consultas de analíticas de la carga de trabajo de tu base de datos de producción.

¿Qué sucede si mi instancia Cloud SQL está temporalmente no disponible?

OneSignal reintentará conexiones con backoff exponencial. La sincronización de eventos se reanudará automáticamente una vez que tu instancia sea accesible nuevamente.