Pular para o conteúdo principal

Visão geral

A integração OneSignal + Materialize permite sincronização automática de eventos personalizados do seu banco de dados de streaming Materialize para o OneSignal para acionar campanhas de mensagens automatizadas e Journeys com base no comportamento do usuário em tempo real. Materialize é um banco de dados de streaming compatível com PostgreSQL que mantém visualizações incrementalmente atualizadas de seus dados, permitindo análises em tempo real e processamento de eventos.

Requisitos

  • Acesso a Event Streams para eventos de mensagem de saída (Limitações de plano e excedentes se aplicam)
  • Acesso a Custom Events para sincronização de eventos de entrada (Limitações de plano e excedentes se aplicam)
  • Plano de Conta Atualizado (não disponível em apps gratuitos)

Materialize

  • Conta Materialize com acesso ao console
  • App Password para autenticação de ferramenta externa
  • Materialized views ou tabelas contendo dados de eventos
  • Dados de eventos acessíveis no seu banco de dados Materialize

Configuração

1

Obter detalhes de conexão do Materialize

Faça login no console do Materialize e navegue até a página Connect para encontrar seus detalhes de conexão.
2

Criar App Password

No console do Materialize, crie uma nova App Password para o OneSignal usar para autenticação.
3

Conectar ao OneSignal

No OneSignal, vá para Data > Integrations e clique em Add Integration.Selecione Materialize e forneça:
  • Host: Seu nome de host Materialize (encontrado em External Tools na página Connect do console Materialize)
  • Username: Seu endereço de email (usado para fazer login no Materialize)
  • Password: A App Password criada no Passo 2
  • Database: Nome do banco de dados (opcional, padrão é materialize)
4

Testar conexão

Clique em Test para verificar se a conexão está funcionando corretamente.

Mapeamento de dados de evento

Mapeie seu para o formato de eventos personalizados do OneSignal:
Campo OneSignalDescriçãoObrigatório
nameevent_nameIdentificador de eventoSim
external_iduser_idIdentificador de usuárioSim
timestampevent_timestampQuando o evento ocorreuNão
propertiesevent_dataNão

Exemplo de Visualização de Evento em Tempo 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 Processamento

Materialized Views (Recomendado)

Aproveite o processamento em tempo real do Materialize sincronizando a partir de materialized views que atualizam automaticamente conforme novos dados chegam:
-- 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

Escreva consultas personalizadas compatíveis com PostgreSQL para transformar seus dados de evento:
-- 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;

Processamento de Stream em Tempo 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;

Limitações

  • Materialize suporta apenas o Basic Sync Engine
  • Consultas em tempo real podem consumir mais recursos de computação
  • Joins complexos em grandes conjuntos de dados devem ser otimizados
  • Materialized views requerem recursos de cluster contínuos

FAQ

Como otimizo o desempenho em tempo real no Materialize?

Use índices em colunas consultadas com frequência e considere particionar grandes conjuntos de dados de eventos por intervalos de tempo para melhor desempenho.

Posso sincronizar de tabelas e materialized views?

Sim, o OneSignal pode ler de tabelas estáticas e materialized views em tempo real no Materialize.

Como funciona a sincronização em tempo real?

O Materialize mantém visualizações atualizadas incrementalmente, então o OneSignal sempre lerá o estado mais recente dos seus dados sem sobrecarga de processamento adicional.