> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Pub/Sub

> Google Pub/SubからOneSignalにカスタムイベントを同期して、リアルタイムのユーザー行動に基づいた自動化されたJourneysとパーソナライズされたメッセージングキャンペーンをトリガーします。

export const PLATFORM_0 = "Pub/Sub"

export const DATA_TYPE_0 = "message fields"

export const COLUMN_HEADER_0 = "Pub/Sub Message Field"

export const PROPERTIES_DESCRIPTION_0 = "JSON object with event details"

## 概要

OneSignal + Google Pub/Subインテグレーションにより、Pub/SubトピックからOneSignalへのカスタムイベントのリアルタイム同期が可能になり、ユーザー行動に基づいた自動化されたメッセージングキャンペーンとJourneysをトリガーできます。

Pub/Subは、独立したコンポーネント間でメッセージを送受信できるようにするGoogleのスケーラブルなメッセージングサービスです。OneSignalはPub/Subトピックのサブスクライバーとして機能し、Pub/Subからイベントメッセージを同期してパーソナライズされたユーザーエクスペリエンスをトリガーできます。

***

## 要件

* アウトバウンドメッセージイベント用の[Event Streams](/docs/ja/event-streams)へのアクセス（プランの制限と超過料金が適用されます）
* インバウンドイベント同期用の[Custom Events](/docs/ja/custom-events)へのアクセス（プランの制限と超過料金が適用されます）
* [更新されたアカウントプラン](https://onesignal.com/pricing)（無料アプリでは利用できません）

### Google Pub/Sub

* Pub/Subが有効になっている**Google Cloud Project**
* イベントメッセージを含む**Pub/Subトピック**
* サービスアカウントアクセスを付与するための**IAM権限**
* トピック上の**JSON形式のメッセージ**

***

## セットアップ

<Steps>
  <Step title="Pub/Sub接続を作成する">
    OneSignalで、**Data > Integrations**に移動し、**Add Integration**をクリックします。

    1. リストから**Google Pub/Sub**を選択します
    2. Pub/Subトピックが配置されている**GCP Project ID**を入力します
    3. 認証方法を選択します：
       * **自動生成サービスアカウント**（推奨）：OneSignalがサービスアカウントを作成して管理します
       * **既存のサービスアカウント**：独自のサービスアカウントキーJSONファイルを提供します
    4. **接続**をクリックします
  </Step>

  <Step title="サービスアカウントに権限を付与する">
    OneSignalは新しいサービスアカウントを作成し、サービスアカウントのメールアドレスを提供します。

    GCPプロジェクトでこのサービスアカウントに\*\*`roles/pubsub.editor`\*\*ロールを付与します：

    ```bash theme={null}
    gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
      --role roles/pubsub.editor
    ```

    OneSignalはこのロールを使用して以下を行います：

    * イベントトピックへのサブスクリプションを作成する
    * トピックからイベントメッセージを消費する
    * 処理が失敗した場合のエラートピック（Dead Letter Queue）を作成する
  </Step>

  <Step title="接続をテストする">
    必要な権限を付与したら、OneSignalで**保存**をクリックして接続を確認します。

    OneSignalは、Pub/Subトピックにアクセスでき、イベントメッセージを処理する準備ができていることを検証します。
  </Step>
</Steps>

***

## イベントデータスキーマ

カスタムイベントにPub/Subトピックを使用する前に、イベントメッセージのスキーマを定義する必要があります。

<Steps>
  <Step title="イベントスキーマ定義に移動する">
    OneSignalで、**データ > インテグレーション**に移動し、Pub/Sub接続を選択します。

    OneSignalは自動的にプロジェクトからトピックのリストを取得します。手動でリストを更新するには、**トピックを更新**をクリックします。
  </Step>

  <Step title="イベントメッセージスキーマを定義する">
    1. イベントデータを含むトピックの名前をクリックします
    2. メッセージ形式として**JSON**を選択します（サポートされている唯一の形式）
    3. **サンプルメッセージをインポート**をクリックして、サンプルイベントメッセージを提供します
    4. 検出されたスキーマを確認して、適切なフィールドマッピングを確保します
    5. **データセットを保存**をクリックします
  </Step>
</Steps>

### イベントメッセージ形式

Pub/Subメッセージは、OneSignalカスタムイベントの次のJSON構造に従う必要があります：

```json theme={null}
{
  "event_name": "purchase_completed",
  "user_id": "user_12345",
  "timestamp": "2023-12-01T10:30:00Z",
  "properties": {
    "product_id": "prod_abc123",
    "price": 29.99,
    "category": "electronics",
    "payment_method": "credit_card"
  },
  "session_id": "session_789"
}
```

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

{PLATFORM_0} {DATA_TYPE_0}をOneSignalのカスタムイベント形式にマッピングします：

| OneSignalフィールド | {COLUMN_HEADER_0} | 説明                         | 必須  |
| -------------- | ----------------- | -------------------------- | --- |
| `name`         | `event_name`      | イベント識別子                    | はい  |
| `external_id`  | `user_id`         | ユーザー識別子                    | はい  |
| `timestamp`    | `event_timestamp` | イベントが発生した時刻                | いいえ |
| `properties`   | `event_data`      | {PROPERTIES_DESCRIPTION_0} | いいえ |

<Warning>
  サンプルメッセージに顧客のPIIまたは機密データを含めないでください。OneSignalは、データセット定義の一部としてメッセージサンプルを保存します。
</Warning>

***

## リアルタイムイベント処理

バッチインテグレーションとは異なり、Pub/Subはほぼリアルタイムのイベント処理を可能にします：

* **低レイテンシ**：イベントはトピックに公開されてから数秒以内に処理されます
* **自動サブスクリプション**：OneSignalは各トピックに専用のサブスクリプションを作成します
* **エラー処理**：失敗したイベントは調査のためにDead Letter Queueトピックに送信されます
* **スケーラブルな処理**：大量のイベントストリームを自動的に処理します

***

## 高度な構成

### Dead Letter Queue

OneSignalは、処理に失敗したイベントのエラートピックを自動的に作成します：

* **自動作成**：エラートピックはサブスクリプションごとに作成されます
* **失敗したイベントの保存**：処理できないイベントはデバッグ用に保存されます
* **手動レビュー**：トラブルシューティングのためにGoogle Cloud Consoleを介して失敗したイベントにアクセスします

### メッセージ確認応答

OneSignalはPub/Subメッセージの確認応答を自動的に処理します：

* **処理成功**：イベント作成が成功した後、メッセージが確認応答されます
* **処理失敗**：メッセージは否定的に確認応答され、Dead Letter Queueに送信されます
* **リトライロジック**：一時的な障害に対する組み込みのリトライ処理

***

## 制限事項

* JSON メッセージ形式のみがサポートされています
* メッセージサンプルはデータセット定義の一部として保存されます（PIIを避けてください）
* プロジェクトレベルで`roles/pubsub.editor`権限が必要です
* 最大メッセージサイズはGoogle Pub/Subの制限（10MB）に従います

***

## よくある質問

### イベントはどのくらい早く処理されますか？

イベントは通常、Pub/Subトピックに公開されてから数秒以内に処理され、ほぼリアルタイムのJourneyトリガーが可能になります。

### OneSignalがイベントを処理できない場合はどうなりますか？

失敗したイベントは、OneSignalが作成するDead Letter Queueトピックに自動的に送信されます。デバッグのために、Google Cloud Consoleでこれらのイベントを確認できます。

### 異なるイベントタイプに複数のトピックを使用できますか？

はい、同じGCPプロジェクト内の複数のトピックに対してスキーマを定義できます。各トピックには、独自のスキーマ定義を持つ異なるイベントタイプを含めることができます。
