メインコンテンツへスキップ

概要

OneSignal + Materialize統合により、Materializeストリーミングデータベースからカスタムイベントを自動的にOneSignalに同期して、リアルタイムのユーザー行動に基づいた自動化されたメッセージングキャンペーンとジャーニーをトリガーできます。 Materializeは、PostgreSQL互換のストリーミングデータベースで、データの増分更新ビューを維持し、リアルタイム分析とイベント処理を可能にします。

要件

  • アウトバウンドメッセージイベント用のEvent Streamsへのアクセス(プランの制限と超過料金が適用されます)
  • インバウンドイベント同期用のCustom Eventsへのアクセス(プランの制限と超過料金が適用されます)
  • 更新されたアカウントプラン(無料アプリでは利用できません)

Materialize

  • コンソールアクセスを持つMaterializeアカウント
  • 外部ツール認証用のアプリパスワード
  • イベントデータを含むマテリアライズドビューまたはテーブル
  • Materializeデータベースでアクセス可能なイベントデータ

セットアップ

1

Materialize接続詳細を取得

Materializeコンソールにサインインし、接続ページに移動して接続詳細を確認します。
2

アプリパスワードを作成

Materializeコンソールで、OneSignalが認証に使用する新しいアプリパスワードを作成します。
3

OneSignalに接続

OneSignalで、Data > Integrationsに移動し、Add Integrationをクリックします。Materializeを選択して、次を提供します:
  • ホスト: Materializeホスト名(Materializeコンソールの接続ページの外部ツールにあります)
  • ユーザー名: メールアドレス(Materializeへのサインインに使用)
  • パスワード: ステップ2で作成したアプリパスワード
  • データベース: データベース名(オプション、デフォルトはmaterialize
4

接続をテスト

テストをクリックして、接続が正しく機能していることを確認します。

イベントデータマッピング

をOneSignalのカスタムイベント形式にマッピングします:
OneSignalフィールド説明必須
nameevent_nameイベント識別子はい
external_iduser_idユーザー識別子はい
timestampevent_timestampイベントが発生した時刻いいえ
propertiesevent_dataいいえ

リアルタイムイベントビューの例

-- 最近のイベント用のリアルタイムマテリアライズドビュー
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';

処理モード

マテリアライズドビュー(推奨)

新しいデータが到着すると自動的に更新されるマテリアライズドビューから同期することで、Materializeのリアルタイム処理を活用します:
-- 高価値イベントマテリアライズドビュー
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;

SQLクエリモード

カスタムPostgreSQL互換クエリを作成して、イベントデータを変換します:
-- リアルタイムユーザーアクティビティサマリー
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;

リアルタイムストリーム処理

-- プログレッシブプロファイリングビュー
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;

制限事項

  • Materializeは基本同期エンジンのみをサポートします
  • リアルタイムクエリはより多くの計算リソースを消費する可能性があります
  • 大規模なデータセットにわたる複雑な結合は最適化する必要があります
  • マテリアライズドビューには継続的なクラスターリソースが必要です

FAQ

Materializeでリアルタイムパフォーマンスを最適化するにはどうすればよいですか?

頻繁にクエリされる列にインデックスを使用し、パフォーマンスを向上させるために大規模なイベントデータセットを時間範囲でパーティション化することを検討してください。

テーブルとマテリアライズドビューの両方から同期できますか?

はい、OneSignalはMaterialize内の静的テーブルとリアルタイムマテリアライズドビューの両方から読み取ることができます。

リアルタイム同期はどのように機能しますか?

Materializeは増分更新されたビューを維持するため、OneSignalは追加の処理オーバーヘッドなしで常にデータの最新状態を読み取ります。