Saltar al contenido principal

Resumen

La integración de OneSignal + Materialize permite la sincronización automática de eventos personalizados desde tu base de datos de streaming de Materialize a OneSignal para activar campañas de mensajería automatizadas y Journeys basados en comportamiento de usuario en tiempo real. Materialize es una base de datos de streaming compatible con PostgreSQL que mantiene vistas actualizadas incrementalmente de tus datos, habilitando análisis en tiempo real y procesamiento de eventos.

Requisitos

Materialize

  • Cuenta de Materialize con acceso a consola
  • App Password para autenticación de herramientas externas
  • Vistas materializadas o tablas que contengan datos de eventos
  • Datos de eventos accesibles en tu base de datos de Materialize

Configuración

1

Obtener detalles de conexión de Materialize

Inicia sesión en la consola de Materialize y navega a la página Connect para encontrar tus detalles de conexión.
2

Crear App Password

En la consola de Materialize, crea una nueva App Password para que OneSignal la use para autenticación.
3

Conectar a OneSignal

In OneSignal, go to Data > Integrations and click Add Integration.Selecciona Materialize y proporciona:
  • Host: El nombre de host de tu Materialize (se encuentra en External Tools en la página Connect de la consola de Materialize)
  • Username: Tu dirección de email (usada para iniciar sesión en Materialize)
  • Password: La App Password creada en el Paso 2
  • Database: Nombre de base de datos (opcional, predeterminado es materialize)
4

Probar conexión

Haz clic en Test para verificar que la conexión funciona correctamente.

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

Ejemplo de vista de evento en tiempo real

-- Real-time materialized view for recent events
CREATE MATERIALIZED VIEW analytics.recent_user_events AS
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties,
    session_id,
    device_type
FROM raw_events.stream
WHERE event_timestamp >= NOW() - INTERVAL '1 day';

Modos de procesamiento

Vistas materializadas (Recomendado)

Aprovecha el procesamiento en tiempo real de Materialize sincronizando desde vistas materializadas que se actualizan automáticamente cuando llegan nuevos datos:
-- High-value events materialized view
CREATE MATERIALIZED VIEW analytics.high_value_events AS
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties || jsonb_build_object(
        'source', 'materialize',
        'value_tier', 'high'
    ) as event_properties
FROM raw_events.stream
WHERE (event_properties->>'value')::numeric > 100;

Modo de consulta SQL

Escribe consultas personalizadas compatibles con PostgreSQL para transformar tus datos de eventos:
-- Real-time user activity summary
SELECT
    'activity_summary' as event_name,
    user_id,
    NOW() as event_timestamp,
    jsonb_build_object(
        'events_last_hour', COUNT(*),
        'unique_sessions', COUNT(DISTINCT session_id),
        'total_value', SUM((event_properties->>'value')::numeric),
        'last_seen', MAX(event_timestamp)
    ) as event_properties
FROM analytics.recent_user_events
WHERE event_timestamp >= NOW() - INTERVAL '1 hour'
GROUP BY user_id
HAVING COUNT(*) >= 5;

Procesamiento de flujo en tiempo real

-- Progressive profiling view
CREATE MATERIALIZED VIEW analytics.user_progression AS
SELECT
    user_id,
    COUNT(*) as total_events,
    COUNT(DISTINCT event_name) as unique_event_types,
    MAX(event_timestamp) as last_activity,
    CASE
        WHEN COUNT(*) >= 50 THEN 'power_user'
        WHEN COUNT(*) >= 20 THEN 'active_user'
        WHEN COUNT(*) >= 5 THEN 'engaged_user'
        ELSE 'new_user'
    END as user_segment
FROM raw_events.stream
GROUP BY user_id;

Limitaciones

  • Materialize solo soporta el Motor de sincronización básico
  • Las consultas en tiempo real pueden consumir más recursos de cómputo
  • Las uniones complejas en conjuntos de datos grandes deben optimizarse
  • Las vistas materializadas requieren recursos de clúster continuos

Preguntas frecuentes

¿Cómo optimizo el rendimiento en tiempo real en Materialize?

Usa índices en columnas consultadas frecuentemente y considera particionar conjuntos de datos de eventos grandes por rangos de tiempo para mejor rendimiento.

¿Puedo sincronizar desde tablas y vistas materializadas?

Sí, OneSignal puede leer tanto de tablas estáticas como de vistas materializadas en tiempo real en Materialize.

¿Cómo funciona la sincronización en tiempo real?

Materialize mantiene vistas actualizadas incrementalmente, por lo que OneSignal siempre leerá el estado más reciente de tus datos sin sobrecarga de procesamiento adicional.